The bright line
This site shows the observed record only. No forecasts, no
projections, no scenarios. Every number on every chart describes a day, a
month or a year that has already happened.
There is one place a model field is used, and it is bounded. Reanalysis —
the observational record of the atmosphere — runs about five days behind the
present. To carry the daily temperature charts to yesterday rather than
stopping five days short, the last few days are filled with short-range
model fields from ECMWF's HRES for elapsed days: the 00Z run for a
day that has already finished, read after the fact. Those days are drawn dashed with a hollow
endpoint and labelled provisional, and each one is replaced by
reanalysis the moment reanalysis reaches it.
A provisional value is an estimate of a day that has happened. It is
never a forecast of a day that has not. No forecast field is
published anywhere on this site, and none ever will be. That is the
editorial position the whole site is held to: a site that published model
forecasts alongside observations would blur exactly the line that makes it
worth reading.
Three tiers of recency
Every row of every published series carries a status, and that
field drives the styling all the way through to the downloadable image. For
the ERA5-based temperature charts it takes three values.
| Status | Source | Age of newest day | How it is drawn |
final | ERA5 reanalysis |
about 3 months | solid |
preliminary | ERA5T |
about 5 days | solid |
provisional | ECMWF HRES 00Z |
0–1 day | dashed, hollow endpoint, labelled |
The tier is read from the data, not guessed. CDS serves ERA5
and ERA5T from one dataset and distinguishes them with an expver
coordinate, one value per timestep. The status of a day is taken from that
directly, never inferred from the date.
Promotion to final. Final ERA5 arrives two to three months
after ERA5T, by which time a day has long left the window that is re-fetched
each morning. So promotion is its own step: each morning, the oldest month
that still holds ERA5T days is replaced with final ERA5 from NCAR's mirror of
the archive, as soon as that mirror holds the month. The mirror carries final
ERA5 only, so a month appearing on it is itself the evidence that the final
version exists. When the same day is held at two tiers, the more settled one
always wins.
ERA5T is not styled as provisional, deliberately. It is
preliminary reanalysis, produced by the same system as ERA5 and
differing only in that a few late observations may still arrive. It is not a
model estimate. Marking it would spend a reader's attention on a distinction
that does not change how the number should be read, and would dilute the
marking that does — the HRES tail.
How the provisional days are built
The HRES conventions are fixed, because the correction described below is
defined against them and a silent change to any of them would move every
provisional value:
- The 00Z cycle only. Never 06, 12 or 18.
- Steps 0, 3, 6 … 21 — the eight three-hourly samples that
fall inside the day. Step 24 is the next day's midnight and belongs to the
next day.
- Only the 2 m temperature message is fetched, by byte
range: 0.65 MB rather than the ~139 MB the full field file weighs.
Eight three-hourly samples are not twenty-four hourly ones, so an HRES daily
mean and a reanalysis daily mean do not agree exactly. The difference
is measured rather than assumed. On every run the two are compared
across the five most recent days both of them cover, and the provisional days
are corrected by the measured offset before publication. Without that
correction there is a visible step exactly where the provisional tail meets
the reanalysis, and drawing two sources as one line without removing it would
be dishonest.
The offset is re-measured every run rather than stored. It is small — under
0.03 °C for the globe, the Arctic and the contiguous US, and about −0.26 °C
for Europe — but it follows the model, and an ECMWF cycle upgrade moves it. A
number frozen in configuration would go on applying the old one without
saying so. Every comparison is also kept, so that a step in the
offset is visible after the fact and raises an alert: the correction absorbs
it either way, but a change in the relationship between model and reanalysis
is something a reader of this page deserves to be able to look up.
Baselines
An anomaly is only meaningful against a stated reference period. This site
uses 1991–2020 as the operational baseline everywhere, which
is the current WMO normal period and the one most operational products use.
Where a chart says "normal" or "anomaly" without qualification, that is the
period meant.
One fixed baseline across every chart is a deliberate trade.
It means the same colour means the same anomaly on every map and the same
distance means the same departure on every series, which is what makes thirty
charts one instrument rather than thirty. The cost is that a value here can
differ from an official product defined another way, and where that matters
the chart says so.
El Niño is measured relative to the whole tropical ocean.
Since February 2026 NOAA classifies El Niño and La Niña with the Relative
Oceanic Niño Index (RONI): the Niño 3.4 anomaly minus the anomaly of the
entire tropical ocean between 20°S and 20°N, rescaled so its spread matches
the plain index. The subtraction keeps the general warming of every tropical
ocean from being counted as El Niño. The Niño 3.4 chart here uses the same
method, rescaled over 1991–2020, with NOAA's thresholds of ±0.5 °C read
against the three-month mean. It is built from OISST, where NOAA uses
ERSSTv6, so the two are close but not identical. No “super” level is shown,
because NOAA defines none.
Headline global temperature is the exception the spec asks for: it belongs
against 1850–1900, the pre-industrial reference. ERA5 begins
in 1940 and cannot produce that period, so the intended method is a
1991–2020 climatology plus a fixed published pre-industrial offset. See
known limits — this is not yet what the live
global charts do, and the page says so rather than implying otherwise.
What is done to the numbers
Every published series is derived from its source by one of a small number of
steps, applied the same way for every indicator that uses them.
- Day-of-year climatologies average each calendar day over
the baseline period. Leap years are aligned by slot, and 29 February —
which has roughly a quarter of the years behind it that its neighbours have
— is interpolated from them rather than published as a real value, because
otherwise it appears as the largest single-day step in the year and the
step is an artefact of the calendar.
- Regional means are area-weighted by the cosine of
latitude, and land or ocean masked where the region says so. Every region
is cut from one global field rather than fetched separately, so two regions
can never disagree about a day.
- Running means are centred, run over calendar months, and
are published only where the window is complete. A three-month mean of two
months would move when the third month lands, so a smoothed series ends
short of the monthly one — one month for a three-month mean, five for a
twelve-month one — and a window that would span a missing month is not
published at all.
- Anomaly maps show the mean of the last 30 days against
the same 30 calendar days of the 1991–2020 baseline, on a 0.5° grid, drawn
as discrete cells at the data's own resolution with no smoothing. They end
where reanalysis ends: a provisional field is not drawn cell by cell,
because doing so would imply a precision it does not have.
- Trends are least squares, with the 95% interval widened
for lag-1 autocorrelation and taken from Student's t on the effective
number of independent years. On the Dutch sea level record, ordinary least
squares would understate the interval by about a quarter. An uncertainty
band that is too narrow is worse than none — and one that is too wide is
no better. The autocorrelation is measured about a curve, not a line: the
satellite record is accelerating, and measured about a straight line, that
acceleration would be read as noise, inflating the rate's interval to
three times the size its producer can support. Where a producer publishes the
measuring system's own error on the rate, as AVISO does for altimetry, it
is added in quadrature, because no fit to a system's output can see an
error the system makes the same way every year.
What happens when something is wrong
Every update runs the same checks, and they are split into two kinds. The
split is the important part.
Blocking checks mean the data is wrong. A value outside
physical bounds, dates that are duplicated or out of order, or a multi-day
hole in the recent interior where the source does have the data — each of
these means the pipeline got it wrong, and the new data is refused. The
previously published series stays exactly where it was, with its own honest
"updated" stamp.
Advisory checks mean the data is merely old or incomplete,
which is a fact about the world rather than an error. A source running late
publishes with its real date. A day the source never published leaves a
break in the line and a note underneath saying which days are missing —
gaps are never interpolated across, because a line drawn
through a hole is a claim nobody made.
A record that has never reached the present at all is withheld rather than
published, because a chart ending in 1996 under a caption promising the
present misleads in a way a late chart does not. And a chart that stops
advancing for more than three times its own allowance raises an alert, since
from the outside a frozen chart and a chart with nothing new to say look
identical.
Sources, attribution and licence
Each chart carries its source and licence in its own signature block, so the
attribution travels with every screenshot and every embed. Those lines are
generated from the source register, never typed by hand,
which is why they cannot drift from what was actually used.
The derived series and the charts are published under
CC-BY 4.0. The code is MIT. Each upstream source carries its
own licence and its own required attribution, listed per indicator below.
Known limits
Things that are true about this site today and that a careful reader would
otherwise have to discover for themselves.
- The headline global temperature chart is not yet a
pre-industrial anomaly. It publishes absolute daily global mean
temperature against the 1991–2020 normal. The 1850–1900 version the spec
describes needs the offset method in baselines
and an anomaly mode for the chart; until both exist, the chart is
honest about what it shows but it is not the headline number.
- The global monthly long record is not published at all.
Its baseline is 1850–1900 and its primary source begins in 1940, so it
cannot be built as configured. It is listed below as pending rather than
quietly omitted.
- 9 of the 30 charts are not live yet. Each is marked below.
- Provisional days are corrected, and a correction is an
estimate. The offset is measured over five days, so it removes the
systematic part of the difference and not the day-to-day scatter. A
provisional value is a good estimate of an elapsed day, not a
measurement of it. That is what the dashed styling is for.
Every indicator
Generated from the frozen indicator list, so it describes what the pipeline
actually does rather than what someone remembered to write down. Each
chart links here, to its own entry.
Arctic
Arctic sea ice extent
How much of the Arctic Ocean is covered by ice today, against every year since 1979.
- Shown as
- Day-of-year comparison
- Baseline
- 1991-2020
- Region
- all Northern Hemisphere sea ice, as the NSIDC Sea Ice Index measures it
- Updates
- daily
- Allowed lag
- 6 day(s) past the next due observation before it is reported as stale
- Plausible range
- 0.0 to 20.0 million km2 — values outside this are refused, not published
- Status
- Live
Arctic sea ice concentration not live yet
Today's ice cover, with the 1991-2020 median ice edge drawn for comparison.
- Shown as
- Sea ice concentration map
- Baseline
- 1991-2020
- Region
- Northern Hemisphere sea ice, mapped north of 66°N
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- 0.0 to 100.0 — values outside this are refused, not published
- Status
- Not live yet
Arctic (66N+) mean 2 m temperature
Temperature north of 66N, where warming runs fastest on Earth.
- Shown as
- Day-of-year comparison
- Baseline
- 1991-2020
- Region
- 66°N to 90°N, all longitudes
- Updates
- daily
- Allowed lag
- 7 day(s) past the next due observation before it is reported as stale
- Plausible range
- -45.0 to 20.0 degC — values outside this are refused, not published
- Status
- Live
Barents Sea ice extent not live yet
The Barents Sea is losing winter ice faster than anywhere else in the Arctic.
- Shown as
- Day-of-year comparison
- Baseline
- 1991-2020
- Region
- the Barents Sea, as OSI SAF's regional sea ice index defines it
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- 0.0 to 2.0 million km2 — values outside this are refused, not published
- Status
- Not live yet
Barents Sea surface temperature
Warm Atlantic water pushing north — the other half of atlantification.
- Shown as
- Day-of-year comparison
- Sources
- NOAA OISST v2.1 (US Government work — public domain (17 U.S.C. 105))
- Baseline
- 1991-2020
- Region
- 70°N to 80°N, 15°E to 60°E
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- -5.0 to 15.0 degC — values outside this are refused, not published
- Status
- Live
Bjornoya station temperature record not live yet
One weather station on one Arctic island, measured since 1920 — and this month against its own normal.
- Shown as
- Long record
- Baseline
- 1991-2020
- Region
- Bjørnøya weather station, MET Norway SN99710 (74.5°N, 19.0°E)
- Updates
- daily
- Allowed lag
- 3 day(s) past the next due observation before it is reported as stale
- Plausible range
- -40.0 to 25.0 degC — values outside this are refused, not published
- Status
- Not live yet
Greenland ice sheet surface mass balance, this season not live yet
Snow gained and melt lost across the ice sheet since 1 September, against the normal season.
- Shown as
- Cumulative season
- Baseline
- 1991-2020
- Region
- the Greenland ice sheet
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- -600.0 to 900.0 Gt — values outside this are refused, not published
- Status
- Not live yet
Greenland total ice mass change not live yet
The whole ice sheet weighed from orbit — how much has been lost since 2002.
- Shown as
- Trend
- Baseline
- none — this chart is not an anomaly
- Region
- the Greenland ice sheet, from GRACE and GRACE-FO gravimetry
- Updates
- monthly
- Allowed lag
- 120 day(s) past the next due observation before it is reported as stale
- Plausible range
- -6000.0 to 500.0 Gt — values outside this are refused, not published
- Status
- Not live yet
Arctic temperature anomaly, last 30 days
Where the Arctic ran warm or cold over the last 30 days.
- Shown as
- Anomaly map
- Baseline
- 1991-2020
- Region
- 66°N to 90°N, all longitudes
- Updates
- daily
- Allowed lag
- 10 day(s) past the next due observation before it is reported as stale
- Plausible range
- -30.0 to 30.0 degC — values outside this are refused, not published
- Status
- Live
Global
Global mean 2 m temperature, daily
Each year's daily global temperature, against the 1991-2020 normal. The anomaly against pre-industrial is a separate chart, still to come.
- Shown as
- Day-of-year comparison
- Baseline
- 1991-2020
- Region
- the whole globe
- Updates
- daily
- Allowed lag
- 7 day(s) past the next due observation before it is reported as stale
- Plausible range
- 5.0 to 25.0 degC — values outside this are refused, not published
- Status
- Live
The 1850-1900 reference cannot be computed from ERA5, which begins in 1940. Climatology is therefore built on the operational 1991-2020 baseline and the headline anomaly is expressed against pre-industrial by adding a fixed published offset (see preindustrial_offset_c). This is the spec's "ERA5 + offset", made explicit rather than implied.
Global mean 2 m temperature, monthly and 12-month running anomaly not live yet
The long global record since 1850, monthly and smoothed.
- Shown as
- Long record
- Baseline
- 1850-1900
- Region
- the whole globe
- Updates
- monthly
- Allowed lag
- 45 day(s) past the next due observation before it is reported as stale
- Plausible range
- 5.0 to 25.0 degC — values outside this are refused, not published
- Status
- Not live yet
Long-record datasets (HadCRUT5, GISTEMP, NOAAGlobalTemp) are re-referenced to 1850-1900 from their native baselines; ERA5 is carried across by the same fixed published offset used for the daily headline series, so the two halves of the chart share one reference period.
Global sea surface temperature, 60S-60N
Daily sea surface temperature across the ice-free ocean, year by year.
- Shown as
- Day-of-year comparison
- Sources
- NOAA OISST v2.1 (US Government work — public domain (17 U.S.C. 105))
- Baseline
- 1991-2020
- Region
- 60°S to 60°N, all longitudes
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- 15.0 to 25.0 degC — values outside this are refused, not published
- Status
- Live
Global mean sea level, satellite altimetry
Sea level measured from orbit since 1993, with the fitted long-term trend.
- Shown as
- Trend
- Baseline
- none — this chart is not an anomaly
- Region
- the global ocean, from satellite altimetry
- Updates
- monthly
- Allowed lag
- 120 day(s) past the next due observation before it is reported as stale
- Plausible range
- -50.0 to 200.0 mm — values outside this are refused, not published
- Status
- Live
Atmospheric CO2 at Mauna Loa
The Keeling curve — the longest direct record of the gas driving the warming.
- Shown as
- Long record
- Baseline
- none — this chart is not an anomaly
- Region
- Mauna Loa Observatory, Hawaii (19.5°N, 155.6°W); the growth-rate panel is NOAA's global marine-surface rate
- Updates
- monthly
- Allowed lag
- 45 day(s) past the next due observation before it is reported as stale
- Plausible range
- 300.0 to 500.0 ppm — values outside this are refused, not published
- Status
- Live
Global 2 m temperature anomaly, last 30 days
Where the last 30 days ran warm or cold against the 1991-2020 normal.
- Shown as
- Anomaly map
- Baseline
- 1991-2020
- Region
- the whole globe
- Updates
- daily
- Allowed lag
- 10 day(s) past the next due observation before it is reported as stale
- Plausible range
- -25.0 to 25.0 degC — values outside this are refused, not published
- Status
- Live
Tropics
Relative Niño 3.4 index
The central Pacific relative to the whole tropical ocean — the measure NOAA uses to call El Niño and La Niña. Observed only, no forecast.
- Shown as
- Threshold index
- Sources
- NOAA OISST v2.1 (US Government work — public domain (17 U.S.C. 105))
- Baseline
- 1991-2020
- Region
- 5°S to 5°N, 170°W to 120°W; relative to the ocean mean from 20°S to 20°N (see relative El Niño, above)
- Updates
- monthly
- Allowed lag
- 45 day(s) past the next due observation before it is reported as stale
- Plausible range
- 20.0 to 32.0 degC — values outside this are refused, not published
- Status
- Live
North Atlantic main development region SST
Sea surface temperature in the tropical Atlantic — the observed record only.
- Shown as
- Day-of-year comparison
- Sources
- NOAA OISST v2.1 (US Government work — public domain (17 U.S.C. 105))
- Baseline
- 1991-2020
- Region
- 10°N to 20°N, 60°W to 20°W, ocean only
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- 20.0 to 32.0 degC — values outside this are refused, not published
- Status
- Live
Editorial constraint. Observed framing only. No seasonal outlook, no hurricane forecast language, no implied prediction of activity. This is a temperature chart.
Europe
European mean 2 m temperature (land)
Daily temperature across European land, year by year.
- Shown as
- Day-of-year comparison
- Baseline
- 1991-2020
- Region
- 34°N to 72°N, 25°W to 45°E, land only
- Updates
- daily
- Allowed lag
- 7 day(s) past the next due observation before it is reported as stale
- Plausible range
- -30.0 to 35.0 degC — values outside this are refused, not published
- Status
- Live
European temperature anomaly, last 30 days
Where Europe ran warm or cold over the last 30 days.
- Shown as
- Anomaly map
- Baseline
- 1991-2020
- Region
- 34°N to 72°N, 25°W to 45°E, land only
- Updates
- daily
- Allowed lag
- 10 day(s) past the next due observation before it is reported as stale
- Plausible range
- -25.0 to 25.0 degC — values outside this are refused, not published
- Status
- Live
European monthly temperature anomaly, long record
Europe's monthly temperature since 1940, as a line and as stripes.
- Shown as
- Long record
- Baseline
- 1991-2020
- Region
- 34°N to 72°N, 25°W to 45°E, land only
- Updates
- monthly
- Allowed lag
- 45 day(s) past the next due observation before it is reported as stale
- Plausible range
- -30.0 to 35.0 degC — values outside this are refused, not published
- Status
- Live
Alpine glacier mass balance, reference glaciers not live yet
Cumulative ice lost from the Alps' long-monitored reference glaciers.
- Shown as
- Cumulative season
- Baseline
- none — this chart is not an anomaly
- Region
- the WGMS reference glaciers of the European Alps
- Updates
- annual
- Allowed lag
- 550 day(s) past the next due observation before it is reported as stale
- Plausible range
- -40.0 to 5.0 m w.e. — values outside this are refused, not published
- Status
- Not live yet
Mediterranean sea surface temperature
A near-enclosed sea that heats fast and holds it — daily, year by year.
- Shown as
- Day-of-year comparison
- Sources
- NOAA OISST v2.1 (US Government work — public domain (17 U.S.C. 105))
- Baseline
- 1991-2020
- Region
- 30°N to 46°N, 6°W to 36°E, ocean only, excluding the Black Sea, the Sea of Marmara and the Sea of Azov
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- 10.0 to 32.0 degC — values outside this are refused, not published
- Status
- Live
Contiguous US
Contiguous US mean 2 m temperature
Daily temperature across the lower 48, year by year.
- Shown as
- Day-of-year comparison
- Baseline
- 1991-2020
- Region
- 24°N to 50°N, 125°W to 66°W, land only
- Updates
- daily
- Allowed lag
- 7 day(s) past the next due observation before it is reported as stale
- Plausible range
- -35.0 to 40.0 degC — values outside this are refused, not published
- Status
- Live
Contiguous US temperature anomaly, last 30 days
Where the lower 48 ran warm or cold over the last 30 days.
- Shown as
- Anomaly map
- Baseline
- 1991-2020
- Region
- 24°N to 50°N, 125°W to 66°W, land only
- Updates
- daily
- Allowed lag
- 10 day(s) past the next due observation before it is reported as stale
- Plausible range
- -25.0 to 25.0 degC — values outside this are refused, not published
- Status
- Live
Contiguous US monthly temperature anomaly, long record
The US monthly temperature record, as a line and as stripes.
- Shown as
- Long record
- Baseline
- 1991-2020
- Region
- 24°N to 50°N, 125°W to 66°W, land only
- Updates
- monthly
- Allowed lag
- 45 day(s) past the next due observation before it is reported as stale
- Plausible range
- -35.0 to 40.0 degC — values outside this are refused, not published
- Status
- Live
Netherlands & sea level
Netherlands mean 2 m temperature
Daily temperature over the Netherlands, year by year.
- Shown as
- Day-of-year comparison
- Baseline
- 1991-2020
- Region
- 50.7°N to 53.6°N, 3.2°E to 7.3°E, land only
- Updates
- daily
- Allowed lag
- 7 day(s) past the next due observation before it is reported as stale
- Plausible range
- -25.0 to 35.0 degC — values outside this are refused, not published
- Status
- Live
De Bilt temperature record since 1901 not live yet
One Dutch station, measured continuously for over a century.
- Shown as
- Long record
- Baseline
- 1991-2020
- Region
- De Bilt weather station, KNMI (52.1°N, 5.2°E)
- Updates
- monthly
- Allowed lag
- 45 day(s) past the next due observation before it is reported as stale
- Plausible range
- -15.0 to 30.0 degC — values outside this are refused, not published
- Status
- Not live yet
Dutch coast sea level, six-station tide gauge composite
Sea level measured at the Dutch coast itself, from six gauges with long records.
- Shown as
- Trend
- Baseline
- 1991-2020
- Region
- six tide gauges on the Dutch coast: Vlissingen, Hoek van Holland, Den Helder, Delfzijl, Harlingen and IJmuiden
- Updates
- monthly
- Allowed lag
- 550 day(s) past the next due observation before it is reported as stale
- Plausible range
- -800.0 to 600.0 mm — values outside this are refused, not published
- Status
- Live
North Sea surface temperature
The shallow sea on the Dutch doorstep, daily and year by year.
- Shown as
- Day-of-year comparison
- Sources
- NOAA OISST v2.1 (US Government work — public domain (17 U.S.C. 105))
- Baseline
- 1991-2020
- Region
- 51°N to 61°N, 4°W to 9°E, ocean only
- Updates
- daily
- Allowed lag
- 4 day(s) past the next due observation before it is reported as stale
- Plausible range
- 0.0 to 25.0 degC — values outside this are refused, not published
- Status
- Live
Global versus Dutch sea level not live yet
Satellite-measured global sea level set against the Dutch coast gauges.
- Shown as
- Trend
- Baseline
- none — this chart is not an anomaly
- Region
- the global ocean from satellite altimetry, against six tide gauges on the Dutch coast
- Updates
- monthly
- Allowed lag
- 120 day(s) past the next due observation before it is reported as stale
- Plausible range
- -200.0 to 400.0 mm — values outside this are refused, not published
- Status
- Not live yet