Streets that look right in every product.

A worldwide vector basemap, rendered in the browser, in five colour variants with labels in the visitor's language. The map is touring by itself; drag it to take over.

Where it lands in your product.

Nobody ships a tileset. They ship a store locator on a light map, an ops dashboard on a dark one, a listing page where the map is a quiet grey backdrop. This is what Streets looks like from the outside.

Central Paris in the light Streets style
  • The same Paris view in the light variant

    light

  • The same Paris view in the dark variant

    dark

  • The same Paris view in the grayscale variant

    grayscale

  • The same Paris view in the white variant

    white

  • The same Paris view in the black variant

    black

© OpenStreetMap contributors

One style, five colour variants.

Light for most products, dark for dashboards and night, grayscale and white as a quiet backdrop under your own data, black for the cinematic version. Same data, same labels, same session.

Relief on top of it
Central Tokyo with labels in Japanese© OpenStreetMap contributors
日本語language: local41 languages

Labels in the visitor's language.

Local names by default, so Tokyo reads as Tokyo does. Set one option and every label that has a translation switches, the rest fall back to the local name.

Same switch on static images

One visitor, one map, one hour

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

any style, any zoom
terrain and 3D included

One unit per map session.

A visitor opening a map is one unit, whatever they do in it for the next hour: pan, zoom, switch variants, turn on terrain. No tile counting, no map-load surprises.

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

const map = new Map({
  container: 'map',
  style: MapStyle.DARK, // STREETS · LIGHT · DARK · GRAYSCALE · WHITE · BLACK
  language: 'en',
  center: [139.73, 35.69], zoom: 12,
});

map.setLanguage('ja'); // same session, same unit

A drop-in map, sessions handled.

The SDK bundles the renderer, opens the session, refreshes the token before it expires and swaps styles without a reload. Bring your own MapLibre instead and the hosted style JSON works there too.

Read the styles guide

One session carries everything.

Opening a map issues one short-lived session. It signs every archive a map can draw from: the basemap, terrain, imagery, real 3D buildings. Switch styles all you like, it is the same session and the same unit.

How sessions work, in the docs ↗
one map session
  1. {
  2. "url": "https://cdn.rijwind.com/tiles/planet.pmtiles?token=…&expires=1789039007",// the worldwide vector basemap, signed for this session; every Streets variant draws from it
  3. "terrainUrl": "https://cdn.rijwind.com/tiles/terrain.pmtiles?token=…&expires=1789039007",// elevation for hillshade, contours and 3D, in the same session at no extra unit
  4. "satelliteUrl": "https://cdn.rijwind.com/tiles/satellite.pmtiles?token=…&expires=1789039007",// imagery, plus sibling archives for ocean, base and the high-resolution aerial layers
  5. "satelliteNlUrl": "…", "satelliteBaseUrl": "…", "satelliteOceanUrl": "…", "satelliteBesUrl": "…",
  6. "buildings": { "countries": ["NL"], "baseUrl": "https://cdn.rijwind.com/buildings", … },// real 3D building models, per covered country, growing
  7. "expiresAt": 1789039007// minutes away on purpose; the SDK fetches the next one before it lapses, still the same session, still one unit
  8. }

The short version.

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

Map sessionOne map instance, about an hour. Pan, zoom, restyle: still one.
1 unit
Colour variantsLight, dark, grayscale, white, black. One style underneath.
5
Label languagesLocal names by default; switch at runtime.
41, or local
CoverageCommunity-maintained data, rebuilt regularly.
worldwide
Terrain, 3D, imageryOutdoor, Satellite and 3D buildings add no unit.
same session
Live traffic layerOptional, official road-authority data.
+1 unit / session
Bring your own MapLibreHosted style JSON, standard vector tiles.
yes
Visual style editorEdit the style JSON. It is a normal file.
no
Free tierHard cap. No card, no sales call.
10,000 units / month
Paid plansOne unit pool across maps, geocoding and routing, plus a spending cap you set.
from €5 / month
ServingEuropean CDN for tiles, EU-issued sessions. DPA and sub-processor list published.
EU, end to end

Numbers as of September 2026. The pricing page has the full ladder.

Streets, answered.

What is the Streets map?

The general-purpose basemap: roads, water, land use, buildings, places and points of interest for the whole world, as vector tiles your browser renders. One style in five colour variants, so the same map fits a light product, a dark dashboard or a quiet backdrop under your own data.

How is it priced?

One unit per map session. A session is one map instance for about an hour: pan, zoom, switch variants, turn on terrain or 3D, and it stays one unit. Ten thousand sessions a month are free; paid plans start at five euros. There is no separate map-load, tile or monthly-active-user charge.

Which colour variants are there?

Light, the default; dark; grayscale; white; and black. They are variants of one style, not five styles, so labels, data and zoom behaviour are identical and a visitor can switch between them without the map reloading.

Which languages can labels be in?

Local names by default, so every place reads the way its residents write it. Set a language and labels switch to any of forty-one languages where a translation exists, falling back to the local name where it does not. You can switch at runtime, in the same session.

Do I have to use your SDK?

No. The SDK is a drop-in map that bundles the renderer and handles sessions and token refresh for you, but the styles are plain MapLibre style JSON at a public URL and the tiles are standard vector tiles, so any MapLibre map can use them with a short session helper.

Can I customise the style?

Yes. Fetch the style JSON, change colours, fonts, which layers show at which zoom, and serve your version. There is no visual style editor yet, which is the honest gap next to Mapbox Studio; what you get is the file, and it is a normal one.

How current is the data?

The basemap is built from the worldwide community-maintained map data and rebuilt regularly from fresh planet extracts. Edits made upstream show up after the next rebuild, not the same day.

Where is it weakest?

Very deep zoom in places with thin community coverage, where footprints and points of interest are sparse, and there are no transit or indoor styles. Terrain, satellite imagery and real 3D buildings are separate styles and layers on the same session, so they do not show in Streets itself.

Is there a free tier?

Yes. The free plan includes 10,000 units a month with no card and no sales call, which is 10,000 map sessions if that is all you spend them on. It is a hard cap, so a traffic spike cannot produce a bill.

Where are my visitors' requests served from?

Tiles come from a European CDN and the session is issued from the European Union, end to end. No part of the path touches a US-controlled provider, which is what makes the GDPR and data-residency conversation short. We publish a DPA and a full sub-processor list.

Put the map in your product.

Ten thousand sessions a month, free. The same key covers search, routing and static images when you get to them.

new Map({ style: MapStyle.DARK, language: 'en' })Get an API key
No credit card. No sales call. A spending cap you set yourself.Read the quickstart