Skip to content

50,000 free calls a month, card-free. Get an API key →

Products / Web SDKs

Drop-in web maps, on your own tiles.

Three packages over one engine: a MapLibre map with MapMap tiles and routing wired in, LiDAR point clouds in the same WebGL context, and the routing logic itself in WASM.

50,000 free calls a month, card-free.

Install it, then draw a route.

@mapmap/maps needs an snk_ API key, issued card-free in the quickstart, and a container with a real height. The example below routes a hazmat truck: ADR tunnel restrictions are a first-class routing parameter, not an afterthought.

bash
npm install @mapmap/maps maplibre-gl pmtiles
html
<div id="map" style="height: 480px"></div>
ts
import "maplibre-gl/dist/maplibre-gl.css";
import { createMap, RouteLayer } from "@mapmap/maps";

const map = createMap({
  container: "map",
  apiKey: "snk_...", // from the quickstart
});
await map.whenReady();

const routes = new RouteLayer(map);
const route = await routes.route(
  { lon: -0.1278, lat: 51.5074 }, // London
  { lon: -1.8904, lat: 52.4862 }, // Birmingham
  { profile: "truck", truck: { heightM: 4.0, weightT: 40, hazmat: true, tunnelCode: "C" } },
);

route.distanceM; // total distance, metres
route.durationS; // total duration, seconds
route.geometry;  // GeoJSON LineString, already drawn on the map

Alternatives, ferry legs, turn-by-turn guidance, a chase camera and day/night styling are all in the same package. See the full SDK reference.

Restyle it in Studio. The SDK just renders the result.

A theme designed in Studio is a hosted style document: palette, building tones and light presets. Pass it to createMap and the map renders your brand without touching client code.

The same York street scene rendered twice: a default light style beside a crimson brand style, both real hosted Studio styles
Palette

One street, two brands

Recolour the palette slots in Studio and every map that loads the style changes with it. No client-side patching required.

The same Manchester street scene rendered twice: a light daytime style beside a dark night style
Light presets

Day and night, from the same style

Switch light and dark automatically with ThemeScheduler, dependency-free and offline-capable.

3D & globe

3D buildings and the globe projection

Toggle 3D buildings at runtime with map.setBuildings3d(true), no restyle or reload needed. See maps & styling for the full options.

Your points, clustered. Your reach, coloured in.

PlacesLayer takes a GeoJSON FeatureCollection of points and gives you clustered pins with count badges, popups and nearest-place answers, entirely client-side. IsochroneLayer renders reachability rings from the gateway in one call.

A dark-themed locator app clustering hundreds of real UK sites with count badges, search and filter chips, built on @mapmap/maps
PlacesLayer

Thousands of pins, clustered natively

Nearby-place search answers by name, brand or category, nearest first with distances in metres. This locator app is built on exactly this stack.

See the showcase →
A real eight-minute scooter reachability polygon over central London, shaded blue over a MapMap map
IsochroneLayer

What’s reachable, drawn in one call

Reachability zones computed on the real road network, not a circle drawn on a postcode. This is a real eight-minute scooter zone from a Soho kitchen.

Read the custom-data guide →

Issue a key and put a map on the page.

Card-free, with 50,000 free calls a month. Bring your own data or start from the quickstart and add routing, styling and clustering as you need them.