PEGEL://
loading…
> pegel --station --refresh 300s
--river
--adsb --ais · your own live receivers
--adsb
--ais
local archive: empty
· · · full archive (2000→)

source PEGELONLINE (WSV) · refreshes every 5 min

PEGEL(7) · feature guide
the gauge
The big digits are the live water level in cm, next to the trend per hour ( rising · falling · steady) averaged over the last 6 hours — gauges report whole centimetres, so an hourly slope on a big river is mostly rounding noise — and the station's state relative to its mean low/high water. Stations that report them also show water temperature (WT) and discharge (Q). Data comes from PEGELONLINE (WSV) and refreshes every 5 minutes.
the living river
The cross-section waves at the real level: drifting current, a little ship, dashed marker lines for MNW / MW / MHW and all-time records (HHW / NNW). The scene reacts to the world — below MNW the bank cracks under a blazing sun; above MHW a storm rains into the swollen river; a fast-rising level sends a lone harbinger cloud in upstream; at ≤ 0.5 °C the river freezes over, floes drifting past a ship stuck fast. Real rain, snow, clouds and wind at the station draw themselves (via open-meteo), and after the station's actual sunset the real moon phase rises over twinkling stars — unless it's overcast.
history & archive
The sparkline starts with the API's data and grows: every visit merges new points into a local archive in your browser, so over time it covers more than the API can serve. Pick a window with the range chips that sit on the HISTORY block itself (24H … ALL, 30D to start) — the choice lands in the URL, so shared links reproduce it. export / import / clear manage the archive; nothing ever leaves your browser. Want years instead of days? Picking 1Y / 5Y / ALL fetches the WSV raw archive (data back to 2000, condensed to daily min/max, hosted with this site and refreshed monthly) for the station on screen — marked as unvalidated raw data: outliers and gaps are part of the deal. The full archive link and import (which swallows the WSV ZIP directly) remain as the manual route.
years view
The ▦ YEARS chip (or ?view=years) turns the station into a multi-year statistics terminal: a heatmap of every archived year by month (absolute shades the level itself, anomaly shades the deviation from that month's long-term mean — dry months warm, wet months blue), the long-term monthly min–max band with median against the current year, and a day-of-year overlay of all years with one year bold — click any year in the heatmap to put it on top, or page through the years with the ◂ year ▸ chips. Clicking a month cell in the heatmap prints its hard numbers in a readout line: monthly mean, min–max and the deviation from the long-term month mean in σ. Built from the same daily WSV archive the 1Y/5Y/ALL ranges use.
wave view
In river mode, the profile / wave chips under the river’s name, [▦ WAVE] in the header or ?view=wave draw the whole river as a station × day heatmap: rows run downstream, columns are days, dark cells are high water — a flood wave shows up as a diagonal ridge rolling down the screen. Each row is scaled to its own station. Data: the hosted daily archive plus the live API for the newest days.
elevation profile
Below the sparkline: the water surface elevation (m NHN) between the neighboring gauges on the same river. It always runs downstream to the right — German river km count downstream on the Rhein but upstream on the Neckar, so the direction comes from the elevation, not from the km. The neighbors are one click away.
whole-river mode
Type a river name (e.g. RHEIN) or use ?river= to see the entire river as one longitudinal profile: every gauge at its live elevation — normal · low · high — plus a TROUBLE list of every station running low or high. Every marker, label and row is a click target.
the rivers map
The --rivers button (or ?rivers) puts every water on one screen: a schematic outline of Germany with each river anchored at the centroid of its own gauges, sized by how many it has. Click a name to walk that river gauge by gauge. Whatever the map has no free cell for — and every water PEGELONLINE lists without coordinates, like the Austrian Donau or the Czech Elbe gauges — is listed underneath with its gauge count, so the counts stay true even where the map cannot show them. The ← STATION button next to --rivers goes back to the gauge you came from; it appears in the map and the whole-river view, which otherwise have no station on screen to click.
the rising board
The --rising button (or ?rising) ranks every gauge by how fast it moved since yesterday, in cm per day: top risers first, the steepest fallers below, every row a click away from its station. The "yesterday" is a daily snapshot of all stations, captured by this site's data pipeline (the live API only tells the present). Where a station has mean low/high water marks, the row adds context: already HIGH / LOW, or a rough straight-line ETA like →MHW ~18d. Tidal gauges are counted but never ranked — a day apart, the tide phase has wandered ~50 minutes, so their day diff measures the tide, not the river. They are recognized by their MThw mark or, where the API carries no marks at all (Rotterdam, Helgoland, the barrage gauges), by the tide in their own daily record. The 1D / 7D chips switch the baseline between yesterday and a week back (?rising&d7): the week view keeps the same cm/day unit, adds the total centimetres of the span in brackets, and states the span it actually measured — a missed snapshot day makes it Δ6.8d rather than exactly seven.
the total overview
The --total button (or ?total) stacks every river's summed gauge readings into one chart and lets you zoom: years → one year's months → one month's days → a single day, where every river is ranked by its share of that day's sum. The five all-time biggest rivers keep their own band and color at every level; everything else folds into OTHER. A day's view is a shareable link (?total&y=2024&d=2024-05-12). Honesty note: gauge zeros are arbitrary datums, so the sum is a transparent reading of the network, not a volume — and the handful of gauges reporting elevation in metres are excluded before summing. The absolute sum also grows with every gauge that joins the archive, so for trends switch to Δ DIFF (or ?total&diff): the net day-over-day change, counting only gauges that reported on both days — how much water actually arrived or left, immune to coverage changes. Built daily by this site's data pipeline from the same hosted archive the station statistics use.
the prompt
A tiny REPL. A bare name switches to that station (or river). Flags: --station, --river, --rivers, --rising, --total, --adsb, --ais, --history 24h…all, --view, --export, --clear, --info, --help. Press / to open the finder from anywhere; Esc dismisses help.
keyboard
extras
Aircraft overhead from your own ADS-B receiver (--adsb URL) and real river traffic on the waterline from your own AIS receiver (--ais URL, AIS-catcher) — both URLs stay in your browser. The tab title and favicon carry the live level, dark mode follows your system, narrow screens switch the layout reflows for the screen it is on, and the page installs as an app from the browser menu. Should a gauge ever fall silent, the water-drop buddy says so.
PEGEL(7) · report an issue

The report below is built from what's on screen right now — station, range, live values — so a bug never boils down to "the river looked wrong". Nothing leaves this page until you pick a route below.