Traffic on your map, in one line.

Roads coloured by how freely traffic flows, plus live incidents, roadworks and closures, from official national road-authority data. One flag on the map, one extra unit per session.

Layers
FreeModerateSlowJammed
Tip: tap any incident marker or line to see its details.
Verkeersdata © NDW

Where it lands in your product.

A dispatch screen that shows why the van is late, a store locator that warns about the closed exit, a dashboard that colours the ring road. This is what the layer looks like once it is on.

The Dutch motorway network between Amsterdam, Rotterdam and Utrecht coloured green, yellow, orange and red by live traffic flow, with incident and roadwork markers
freemoderateslowjammed

Roads coloured by how they flow.

Four levels, from free to jammed, computed per road segment from the measured speeds of the national road network. The geometry loads once; a small live-state file refreshes about once a minute and recolours the roads in place.

Watch it move on the map above
Roads between Den Haag, Rotterdam and Utrecht with roadwork, incident and restriction markers along them

Every roadwork, closure and incident.

Planned works with their dates, live incidents and lane closures, restrictions and open shoulders, as markers or striped stretches of road. Tap one and the layer hands your code the plain GeoJSON feature.

What one event looks like

One visitor, one map, traffic on, one hour

  1. 0:00map opens, first tiles load1
1unit for the basemap session

every refresh free
same pool as everything else

One extra unit per map session.

Traffic adds one unit to a map session, however long the visitor watches and however often the state refreshes. Same pool as maps, geocoding and routing; no traffic plan, no per-refresh metering.

See what a month costs
map.ts
import { Map, config } from '@rijwind/sdk';
import '@rijwind/sdk/style.css';

config.apiKey = 'rw_live_•••';

const map = new Map({
  container: 'map',
  center: [5.1, 52.1], zoom: 7,
  traffic: true, // roads take their colour, incidents appear
});

map.enableTraffic(false); // or behind your own toggle

One flag on the map.

The SDK opens the session with the traffic grant, loads the road geometry, keeps the live state fresh and draws the incidents. Switch it on at construction or behind your own button at runtime.

Read the traffic guide

Every event has the same shape.

Incidents, roadworks, closures, restrictions and open shoulders all arrive as GeoJSON features with the same handful of properties. Write the popup once and it holds for all of them, and for anything else that already speaks GeoJSON. This one is from tonight's file.

Every field, in the docs ↗
features[…] · one event
  1. {
  2. "type": "Feature",// plain GeoJSON: every incident, roadwork and closure is a feature you can filter, style or list
  3. "geometry": { "type": "LineString", "coordinates": [[4.873369, 51.630099], [4.874078, 51.629919]] },// a stretch of road, not a pin: the layer draws it as a striped line over the carriageway. Point events come as points
  4. "properties": {
  5. "id": "NDW18_00080b68-a067-45e1-8b65-b01375e2125f",// stable across refreshes, so you can tell a new event from one you have already shown
  6. "type": "roadwork", "subtype": "carriageway_closure",// five coarse types (incident, roadwork, closure, restriction, shoulder) and a finer subtype for the label
  7. "length_km": 0.2,
  8. "start": "2026-09-10T12:43:18.329864+00:00",
  9. "end": "2026-09-16T22:00:00+00:00"// planned works carry their window; live incidents carry only a start and drop out of the file when they clear
  10. }
  11. }

The short version.

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

CoverageGermany prepared, not yet live for customers.
Netherlands
Flow refreshRecoloured in place, no reload.
about 1 min
Flow levelsFree, moderate, slow, jammed, per monitored road segment.
4
Events in one snapshotMeasured 2026-09-10, 20:15 UTC: 1,589 roadworks, 175 incidents, 58 restrictions, 39 open shoulders, 7 closures.
1,868
CostOn top of the session's own unit. Refreshes free.
+1 unit / map session
FormatLevel and event type as properties; style them yourself.
GeoJSON features
Routing ETAsThe router uses free-flow speeds. A picture for people, not an input for the engine.
not traffic-aware
ProcessingIngested on our own servers in the Netherlands, served from a European CDN.
EU, end to end

Numbers as of September 2026, measured on the live layer.

Traffic, answered.

What does the traffic layer show?

Two things on top of the basemap. Flow: every monitored road segment coloured by how freely traffic is moving, in four levels from free to jammed, computed from measured speeds. Events: incidents, roadworks, closures, lane restrictions and open shoulders, as markers or as striped stretches of road, each with its details on tap.

Where does the data come from?

From the official open data of the national road authority, normalised into one consistent schema. It is measured by the road network itself, not by tracking phones or navigation apps, so it is privacy-friendly by construction and needs no consent from anyone.

Which countries are covered?

The Netherlands, today. The German motorway feed is wired up but not yet switched on for customers; it will appear on the same layer with no change to your code when it goes live. Other countries follow as their authorities publish usable open data.

How fresh is it?

The flow state refreshes about once a minute and the map recolours in place; there is no reload. Events are published as the authority publishes them, with the planned works carrying their start and end dates.

What does it cost?

One extra unit per map session on top of the session itself, so a map with traffic on is two units for the hour, however often the state refreshes and however long the visitor watches. It comes out of the same monthly pool as maps, geocoding and routing. There is no separate traffic plan and no per-refresh metering.

Do routes and ETAs use it?

No. Directions, matrices and isochrones are computed on the road network's free-flow speeds; the traffic layer is a live picture for people looking at a map, not an input to the router. If you need traffic-aware ETAs today, this is not the product for that, and we would rather say so than let you find out.

Can I style it myself?

Yes. The roads and the events are ordinary MapLibre layers with the level and the event type as feature properties, so you can change the colours, hide the categories you do not need, or draw your own markers. The SDK's defaults are what you see on this page.

Can I get the events as data?

The layer draws plain GeoJSON features and hands them to your click handler unchanged, so anything on the map is yours to list, filter or link. A query API for events and history is not available yet.

Where is it weakest?

Coverage stops at the Dutch border for now. Flow is measured on the monitored network, which is the motorways and the main roads: city streets carry events but not flow colours. Planned works occasionally outlive their real end date until the authority closes them. And the routing engine does not use any of this, see above.

Where is it processed?

In the European Union, end to end: the feeds are ingested on our own servers in the Netherlands and the layer files are served from a European CDN. No end-user location is collected to draw it.

Switch it on.

One flag on the map. Ten thousand units a month free, and the same key covers maps, geocoding and routing.

new Map({ container: 'map', traffic: true })Get an API key
No credit card. No sales call. A spending cap you set yourself.Read the traffic guide