Weather that renders in the browser.

Rain radar, temperature, wind, gusts, pressure and cloud from five open European sources, one file per model run, drawn on the GPU. No tile server, no key for the data, free on every plan.

Loading forecast…
Rijwind · data © KNMI, CC-BY-4.0 · © OpenStreetMap contributors

Where it lands in your product.

A rain layer over a delivery map, wind over a sailing planner, a two-day forecast for the spot someone just clicked. This is what the files look like once a map is drawing them.

Temperature field and animated wind particles over the Netherlands and Germany on the weather map

Rain, wind and temperature, drawn on the GPU.

Colour fields, wind particles, arrows, isobars and plain grid values, each a MapLibre layer you can toggle, scrub through time and animate. The rain radar refreshes every five minutes with a two-hour nowcast.

The five sources
A point-forecast panel over the map with temperature, rain and wind for the next two days

A forecast for any point you click.

The same file that paints the map answers a point query: read one column of the grid and you have two days of temperature, rain and wind for that spot, without a second API.

Try it on the map above

One map session, every weather layer on

  1. map opens1 unit
1unit, weather included

five sources, every variable
on your own map: no key at all

Free on every plan.

On a Rijwind map the weather layers add nothing to the session: one unit, whatever you switch on. On your own map they need no key at all, because the files are served openly.

See what a month costs
weather.ts
import { VaneDataset, ColormapLayer, ParticlesLayer } from '@rijwind/vane';

const ds = await VaneDataset.openLatest(
  'https://weather.rijwind.com/knmi_harmonie_nl_latest.json',
);

map.addLayer(new ColormapLayer({ id: 'temp', dataset: ds, variable: 'temperature' }));
map.addLayer(new ParticlesLayer({ id: 'wind', dataset: ds }));

// any MapLibre map: no key, no tile server, one file per model run

Open source, top to bottom.

The file format, the reader, the render modes and the ingest pipeline are all Vane, the open-source project we started: PMTiles, but for gridded weather data. Apache-2.0, on any MapLibre map.

Vane on GitHub

One catalogue, every source.

A single public file lists every source, its newest run, its grid and how to decode each variable. Your map reads it, follows the pointer to the latest run, and never hard-codes a filename. This is the Dutch model's entry, as served tonight.

The live catalogue ↗
sources["knmi_harmonie_nl"]
  1. {
  2. "pointer": "knmi_harmonie_nl_latest.json",// a tiny file that always names the newest run, so your map never hard-codes a filename
  3. "latest": "knmi_harmonie_nl_20260910T1700Z.vane",// one immutable file per model run: every variable, every timestep, read over HTTP range requests
  4. "source_type": "model", "model_run": "2026-09-10T17:00:00Z",
  5. "updated_at": "2026-09-10T19:41:46Z", "update_interval_seconds": 3600,// published within minutes of the model: this run was live two hours and forty minutes after its analysis time, and a new one lands every hour
  6. "bbox": [0.0, 49.0, 11.281, 56.002],// the Netherlands, the North Sea and the neighbours; the European and global sources have their own
  7. "timestep_count": 49, "size_bytes": 49733583,// 49 hourly steps, seven variables, 47 MB for the whole run; the map only reads the bytes it draws
  8. "variables": {
  9. "temperature": { "unit": "celsius", "scale": 0.01, "offset": -50.0, "default_colormap": "thermal", "default_clim": [-10, 35] },// how to decode the integers on disk and how to colour them by default; override both in your own style
  10. "wind_u": { … "vector_group": "wind", "vector_component": "u" }, "wind_v": { … },// paired components make a vector field: this is what the particle layer animates
  11. "precipitation": { … }, "wind_gust": { … }, "cloud_cover": { … },
  12. "pressure_msl": { "unit": "hPa", "default_mode": "contours", "contour_interval": 4 }// a variable can say how it wants to be drawn: pressure asks for isobars every 4 hPa
  13. }
  14. }

The five sources.

All open data from the European weather services, licensed CC BY 4.0. Every run is ingested, repackaged and served openly from weather.rijwind.com. Use the files in your own project; a credit is appreciated.

SourceCoverageGridUpdates
KNMI HarmonieNetherlands + North Sea2 kmhourly, 60 h ahead
KNMI rain radarNetherlands + North Sea1 kmevery 5 min, +2 h nowcast
DWD ICON-D2Central Europe2.2 kmevery 3 h, 48 h ahead
DWD ICON-EUEurope7 km4× daily, 120 h ahead
ECMWF IFSGlobal25 km4× daily, 240 h ahead

Data © KNMI, DWD and ECMWF, CC BY 4.0. Grid sizes and cadences as published by the sources, September 2026.

The short version.

Everything a developer scans a product page for, in one place, without the adjectives.

SourcesNational, regional, European and global models plus the rain radar.
5
VariablesTemperature, wind (two components), gusts, rain, pressure, cloud cover.
7
Finest gridNetherlands and the North Sea. 25 km for the global model.
1 km radar · 2 km model
Horizon60 h for the Dutch model, two hours for the radar nowcast.
up to 240 h
RefreshRadar every five minutes, the Dutch model every hour, the rest every 3 to 6 hours.
5 min · hourly
Cost on a Rijwind mapOne unit per map session, weather included, on every plan.
0 extra units
On your own mapFiles served openly; attribution to the source is required.
no key
In the SDKAdd the Vane layers to any MapLibre map, a few lines. A one-liner is planned.
not yet
LicenceData from the weather services; the format, reader and render modes are open source.
CC BY 4.0 · Apache-2.0
HostingEuropean CDN, pipeline on our own servers in the Netherlands.
EU

Numbers as of September 2026, read from the live catalogue.

Weather, answered.

What is on the weather map?

Temperature, rain, wind (as particles and as arrows), wind gusts, sea-level pressure as isobars and cloud cover, from five open sources: the Dutch national model and rain radar, two German models for central Europe and Europe, and the global European model. Pick a source top-right, toggle layers at the bottom, scrub the time slider, click anywhere for a point forecast.

Where does the data come from?

From the open-data programmes of the European weather services: KNMI, DWD and ECMWF, all under the CC BY 4.0 licence. Every model run is ingested within minutes of publication, repackaged into one file, and served from our CDN. The radar nowcast updates every five minutes.

How fresh is it?

As fresh as the source. The Dutch model runs hourly and looks 60 hours ahead, the radar every five minutes with a two-hour nowcast, the German models every three to six hours, the global model four times a day out to ten days. The catalogue carries the exact run time and publish time of every source, so your map can show its own age.

How does it render without a tile server?

A forecast is one compact file on a CDN with every variable and every timestep inside. The map asks for exactly the byte ranges it needs with HTTP range requests and draws them on the GPU as MapLibre layers: colour fields, particles, contours. Static hosting plus range requests, nothing running in the middle.

Can I use these layers on my own map?

Yes, on any MapLibre map. Install the open-source Vane library, open the latest run from weather.rijwind.com and add the layers you want. The files are served openly, so no API key is involved; a 'weather data hosted by Rijwind' credit is appreciated, and the CC BY attribution to the source is required.

Is it in the Rijwind SDK?

Not yet as a one-liner. Today you add the Vane layers to a Rijwind map the same way you would to any MapLibre map, which is a few lines. A weather option on the SDK's map is planned; there is no date on it.

What does it cost?

Nothing extra. On a Rijwind map the weather layers add no units to the session, on every plan including Free. On your own map there is no key and no bill at all. It runs on Vane, the open-source project we started, and is a showcase of what open data plus a CDN can do.

Can I get a forecast for one location as data?

The same file that paints the map answers a point query client-side: read one column of the grid and you have the full series for that spot, which is what the click-for-forecast panel does. There is no separate point-forecast API; if you need one server-side, the files are plain enough to read from any language.

Where is it weakest?

The global model is 25 km per grid cell, so it is a synoptic view, not a local forecast: for street-level detail you want the national and regional models, which cover the Netherlands and central Europe only. There is no historical archive yet, only the latest runs, and no severe-weather warnings or lightning. It is a rendering of the models as published, not a forecast product of our own.

Where is it hosted?

The files are served from a European CDN and the pipeline runs on our own servers in the Netherlands. The map itself does nothing but fetch bytes: no account, no cookies, no tracking.

Weather on your own maps.

The layers you just played with, on any MapLibre map, from open files on a CDN. The same key covers maps, geocoding and routing when you get to them.

knmi_harmonie_nl_latest.jsonGet an API key
Free on every plan. Open source, Apache-2.0.Vane on GitHub