The build log
We built MapMap in stealth between January and July 2026. These are the notes we kept as we shipped each piece, published together now that we are out of stealth. Each post is dated to when the work happened rather than when it went up, so the feed reads in build order.
Every post is also served as raw markdown. Append .md to the URL. Feeds: RSS · JSON · Agents: /llms.txt

Introducing MapMap: out of stealth, still in beta
MapMap is a self-hostable navigation platform covering routing, guidance and vector maps, now out of stealth in beta with a free tier of 50,000 calls a month.

How we built London in 3D
LIDAR-derived heights for 10,473 buildings, a street-tree survey join, three Blender landmark bakes and facades generated at runtime with no image assets.

Static map images with no key, built for agents
mapmap.ai/api/static-map renders PNG, WebP or JPEG maps with route, GeoJSON or marker overlays, with no API key, rate-limited instead of metered.

Migrating from Google Maps: what changes and what does not
Google made Directions, Distance Matrix and Places legacy on 1 March 2025. The Routes API that replaced them has no truck mode. The honest endpoint mapping.

Autonomous agents built an EV charging app in under a day
Autonomous coding agents built a working EV charging app on the MapMap SDK in under a day, and the live app now runs on our Built with MapMap page.

x402 is live on mainnet, and agents have already paid
The hosted gateway now accepts x402 payments in USDC on Base and Solana, and the first mainnet settlements from a stock agent client are on-chain.

We built a full navigation app on MapMap
A complete turn-by-turn navigation app for iOS and Android, built from one Expo React Native codebase on our published SDKs. Run it, test it, fork it.

Sovereign navigation: run the whole stack yourself
The same MapMap stack runs as our hosted API or entirely on your hardware, air-gapped, on signed territory packages, for a licence plus a data subscription.

Maps for AI agents, with no human in the loop
MapMap's signup is an API call: POST /v1/keys returns a live key worth 1,000 calls over 72 hours, with no card, no CAPTCHA and no sales conversation.

Migrating from Mapbox: what changes and what does not
Most of a Mapbox Directions integration moves to MapMap with a URL and key swap: our compatible endpoint returns OSRM routes and Mapbox-shaped instructions.

Metered keys and pricing: prepaid only, no surprise billing
MapMap bills prepaid credit only: 50,000 free calls a month, then 0.05p a standard call and 1p a premium one, and a 402 or 429 instead of an invoice.

x402 machine payments: what is live, what is not
Every MapMap 402 carries the x402 wire body and the same quote arithmetic now settling on mainnet; the 402-versus-429 rules here are still the contract.

Skills are what an agent knows, tools are what it does
Ten MapMap agent skills install in one command and teach a coding agent the truck, ADR, maps and self-host knowledge that MCP tool schemas cannot express.

Seventeen MCP tools, one URL, no key to connect
The MapMap MCP server exposes seventeen tools over one URL with no key to connect, including a WCAG audit that lets an agent check its own map is readable.

The self-host distro: four services, one Compose file
The MapMap self-host distro is four Docker Compose services, two of them off by default, running air-gapped from a pre-built territory package on your own rack.

Signed territory packages, and only the delta over the air
Every MapMap territory package is ed25519-signed with BLAKE3 content-addressed layers, so a device downloads only the layers that changed, not the continent.

Offline turn-by-turn navigation, ADR rules included
MapMap's offline turn-by-turn runs routing, debounced rerouting and ADR tunnel enforcement on the device, so a tanker in a tunnel keeps its compliance rules.

Android, iOS and WASM from one Rust core
Android, iOS and @mapmap/core are three sets of generated bindings over one Rust core, published from sdk-v* tags, so device and server never disagree.

The navigation camera follows the snapped fix, not GPS
NavigationCamera in @mapmap/maps is a course-up chase cam with pitch 60, zoom 17 and a low-anchored puck, driven from the road-snapped fix, never raw GPS.

Lane diagrams from OSM turn:lanes, and when we omit them
MapMap draws lane diagrams in banner instructions from OpenStreetMap turn:lanes data, and omits the sub line where that tagging is absent rather than guessing.

Voice and banner instructions in the Mapbox shape
MapMap's compatible endpoint returns voiceInstructions and bannerInstructions in the Mapbox field shape, so an existing navigation UI parses our JSON unchanged.

Route optimisation over a truck-aware matrix
POST /optimise plans multi-vehicle fleets over a matrix from our own engine, so truck dimensions and ADR codes shape the plan. A request bills a flat 10 calls.

Map matching: which roads a vehicle actually drove
POST /trace_route snaps a noisy GPS trace into a displayable route and POST /trace_attributes returns the matched road segments, both at 0.05p per trace.

POST /matrix bills a call per started block of 25 elements
POST /matrix returns durations and distances for every source and target pair, billing one call per started block of 25 elements, capped at 10,000 per request.

Truck isochrones, billed one call per contour
POST /isochrone returns reachability contours as GeoJSON with truck limits enforced in costing, billed one call per contour and capped at 10 per request.

First-party geocoding: one engine, online and offline
MapMap serves GET /geocode and /geocode/reverse in-process from sn-geocode, our own tantivy engine, at 0.05p per Standard call, with Photon now a fallback.

The web maps SDK wraps MapLibre, it does not fork it
The @mapmap/maps package wraps MapLibre GL JS at version 0.1.0, adding tiles, styles, typed routing and a navigation camera without forking the renderer.

Studio: design a map style, and check it can be read
MapMap Studio designs a branded map style in the browser and publishes it as an immutable URL, with a WCAG contrast audit built into the theme engine.

Hosted vector tiles and styles, scoped to territories
The gateway serves Mapbox Vector Tiles, TileJSON 3.0 and a MapLibre style per territory at 0.05p a request, cut from the archives the routing engine uses.

Permissive licences only, enforced in CI, SBOM per release
Every MapMap distributable is permissive-licensed, enforced by cargo deny in CI on every push, with a CycloneDX 1.5 SBOM of 492 components per tagged release.

ADR tunnel compliance, enforced in costing
POST /adr/check returns the ADR 8.6.4 tunnel-entry verdict with its reasoning at 1p a call, and the same rules shape routes in costing before geometry exists.

Truck routing with dimensions enforced in costing
MapMap puts height, width, length and weight inside the cost model itself, so a 4.2 m trailer is never planned under a 4.0 m bridge. Truck calls cost 1p each.

Why we built our own routing core in Rust
MapMap runs one Rust routing core reaching Android, iOS and the browser, so a truck's height, weight and ADR tunnel code shape the route rather than filter it.