In progress.

This work is in the product, and it is not available to use yet. There is no promised date.

20 updates

November 2026

RecordedPlatformNewIn progress

Compare unmap with Mapbox, Google Maps and HERE, and four Canadian search tutorials

A new alternatives section compares unmap with Mapbox, Google Maps and HERE using each provider's published prices, and four new tutorials cover bilingual place search, Alberta legal land lookup, Inuktitut place names and Canadian geocoding.

  • unmap.dev/alternatives has a page each for Mapbox, Google Maps and HERE: when unmap fits better, when the other provider does, and how the two bills count what you use, with every price linked to the provider's own pricing page and the date it was checked.
  • The Mapbox, Google Maps and HERE migration guides were corrected where they had fallen behind, and the code converter now writes the unmap call for Mapbox and Google matrix requests and for Mapbox optimization and map matching requests.
  • Build a bilingual place search: one record carries the English and French names, so a search returns Montréal or Montreal from the same result, and the map labels follow the same language.

RecordedPlatformNewIn progress

GET /geoip: where an IP address is, to the city

A new endpoint turns an IPv4 or IPv6 address into a country, region, city and coordinate, worldwide, with the caller's own address as the default, and a matching unmap.geoip.locate() in the SDK.

  • GET /geoip?ip=8.8.8.8 returns the country, region, city and [lng, lat] for an address, from DB-IP City Lite. Leave ip off and it locates the caller.
  • It answers worldwide. Every other unmap API stays Canada-first; this one is the exception.
  • Accuracy is city level at best and often only the country. Private and reserved addresses are 400 invalid_ip. A public address the database does not list is 200 with found: false.

AvailabilityThe endpoint is deployed with the gateway. It answers 503 until the first DB-IP release has been published.

RecordedMapsNewIn progress

Ski: stable ids for every run and lift

GET /ski/areas/{id}/features lists an area's runs and lifts, one per OpenStreetMap element, each with an id that stays the same from one release to the next. The ski tiles carry the same ids.

  • GET /ski/areas/{id}/features returns every run and lift in the area with id, kind, name, piste_type, difficulty, aerialway, GeoJSON geometry, length_m and an osm reference.
  • An id is way-<n> or relation-<n>: the OpenStreetMap element. It does not change while the element exists. A lift's id is the one /lifts-3d already gives it.
  • The runs and lifts features of the ski tiles carry the same id, and the style sets promoteId: "id", so a map can colour a run by your own data with feature-state.

AvailabilityBehind the Ski add-on, like the other /ski endpoints. Live once the release is published and SKI_RELEASE names it.

RecordedPlatformNewIn progress

Team accounts: invite people to one account, with roles and an audit log

An account can now have several people, admins and members, with an audit log of changes. Everyone signs in once more after this release.

  • An admin can invite people by email. An invitation lasts 7 days and works once. Teams are free on every plan, with no seat limit.
  • Members manage keys and data and read usage, but not billing, settings, invitations, roles or the audit log. Those are for admins.
  • The audit log records who changed keys, plans, settings, data and webhooks, and cannot be edited or deleted.

AvailabilityNot live yet. It ships with the next gateway deploy.

RecordedSDKsImprovedIn progress

The map-controls 3D button works on every style

map-controls' terrain button now lifts any of the fifteen styles, base included, through the gateway's terrain=on, and the map item takes terrain and exaggeration props. Turned on in unmap Maps, Trail Explorer, the elevation explorer block and the elevation profile example.

  • <MapControls terrain /> (Vue: <UnmapMapControls terrain />) shows its 3D button on every style. A style with its own elevation (outdoor, atlas, swiss, winter) lifts in place, as before; any other reloads with terrain=on
  • <Map terrain exaggeration={1.5} /> (Vue: <UnmapMap terrain :exaggeration="1.5" />) starts a map on 3D terrain, and map-context's useMapTerrain() lets your own control ask for it
  • unmap Maps and Trail Explorer have the 3D button, and so do the elevation explorer block and the elevation profile example
RecordedMapsNewIn progress

3D terrain on any style: terrain=on

Add terrain=on to a style URL, or terrain: true in the SDK, to draw any of the fifteen styles on 3D terrain, with an exaggeration from 0.1 to 5.

  • GET /styles/{style}?terrain=on adds an unmap_terrain raster-dem source and a top-level terrain to the style, so MapLibre draws it in 3D when you tilt the map. Any style, flat ones included.
  • exaggeration scales the relief from 0.1 to 5, default 1.
  • In the SDK: createMap({ style: "winter", terrain: true, exaggeration: 1.5 }), and the same options on new Unmap(), styleUrl and unmapStyle.

AvailabilityAvailable once this gateway release and the next @unmap package release ship.

RecordedMapsNewIn progress

Ski add-on: /ski/areas and the ski layer

A Ski add-on gates Canadian ski areas from OpenStreetMap: GET /ski/areas, GET /ski/areas/{id}, and a ski catalog layer. The first release (226 areas, OSM as of 2026-09-17) is served; the add-on cannot be bought yet.

  • GET /ski/areas lists Canadian downhill and nordic ski areas, filterable by province, activity, bbox and name (q, ignoring case and accents). GET /ski/areas/{id} returns one.
  • Every response carries meta.data_version and the OpenStreetMap attribution: the data is ODbL.
  • Both sit behind the new Ski add-on (US$39 a month or US$390 a year), and a paid key without it gets 403 addon_required naming addon-ski (a dev-plan key gets dev_only from a production origin, or usage_limit_reached past its monthly premium calls). The winter style, when it ships, is in every plan.

AvailabilityServed to development and internal keys. Paid accounts can use it once the add-on's prices exist.

October 2026

RecordedSDKsNewIn progress

The API inspector from unmap Maps is a registry item

api-inspector lists every unmap API call a page makes, as it happens, with its status and latency, the @unmap/sdk line and the curl behind it, and the response. It is the inspector unmap Maps shows, now installable in React (shadcn) and Vue (shadcn-vue) as a development tool.

  • <ApiInspector> opens in your shadcn Sheet from any element you give it; <ApiInspectorPanel> docks the same content in your layout, and useApiCalls() returns the calls to render your own way. Vue: <UnmapApiInspector>, <UnmapApiInspectorPanel> and a useApiCalls composable
  • It records at window.fetch, so calls from your own client and from every registry item are listed. The key query parameter is never kept, and curl sends the key as a header. Tiles, glyphs and sprites are not listed
  • The recorder and the SDK and curl descriptions are api-calls, one plain TypeScript file shared by both lanes, so they can be used without the panel

RecordedRoutingNewIn progress

Transit stops and departures go national

/transit/* will serve stops, routes and scheduled departures for every routable Canadian feed whose licence is cleared for republication: 80 feeds in seven provinces in the first national build, up from eight. It ships when the weekly static transit build publishes and promotes it.

  • In scope: the feeds transit routing serves whose terms are an open licence or read as permitting redistribution, as found in the Mobility Database and Transitland on 2026-10-09
  • 44 routable feeds are held because neither catalog gives their terms, and Laval, Lévis and Whitehorse are left out because their terms restrict redistribution or commercial use
  • VIA Rail Canada stays off: it publishes headways in frequencies.txt, and a headway cannot be stated as an exact departure without inventing precision

RecordedRoutingNewIn progress

Alberta joins road events, and brings the road surface with it

511 Alberta is wired into /incidents, /closures and /road-conditions. It is a second dialect rather than a second Open511, and it publishes something British Columbia does not: a winter-roads feed with actual surface conditions.

  • Two provinces now. Alberta needs an API key; without one the jurisdiction is skipped with a stated reason and the response names it, rather than being requested without credentials
  • Alberta states closure explicitly with a boolean. British Columbia has no such field, so closure there is still read from the road state
  • Alberta's 1,237 winter-road segments are what make /road-conditions answer at all: Open511 reports lane availability, not the surface

RecordedRoutingImprovedIn progress

Static transit schedules refreshed

/transit reads release 20261006-937ba168faa9 once this Worker config is deployed. Eight agencies, not five.

  • Calgary Transit, TTC, OC Transpo, GO Transit, UP Express, TransLink, STM and BC Ferries, fetched 2026-10-06
  • TransLink, STM and BC Ferries join the static departure boards
  • OC Transpo's published calendar now ends 2026-10-25

September 2026

RecordedRoutingImprovedIn progress

National transit feeds registered for the next graph

The transit routing registry now includes every active Canadian GTFS feed the Mobility Database lists. Static /transit/* stays the eight-pilot release.

  • 135 active feeds and 3 watch feeds, after a 614 MB national Valhalla measurement
  • Licence rows record Mobility Database terms, not a per-agency legal review
  • A failed download or a quarantined feed no longer stops prepare-routing

AvailabilityNot on the graph that is serving. /transit/* is still the eight-pilot static release, and only TTC is routing-ready.

Availability unverified.

These records stay up. This page does not claim they are available or unavailable. A production check is still missing.

September 2026

RecordedGeocodingImprovedAvailability unverified

EV charging, and what happens north of sixty

Charging stations were already a Places category, so this is a measurement rather than a feature. We ran a QA sample across major cities, the Trans-Canada and the North: Yellowknife and Iqaluit return nothing.

  • category=ev charger on /places/nearby. No separate EV API, which is what the plan asked for and what already existed
  • Measured 2026-09-17 within 25 km of a downtown anchor: major cities hit the result cap, Banff 16, Swift Current 3, Kenora 2, Whitehorse 2, Yellowknife 0, Iqaluit 0
  • No network, connector type, power rating, port count, access or status: the corpus has no columns for them, so they are absent rather than null

AvailabilityAvailability was not re-checked against production for this record. The 2026-09-17 sample used category=ev charger on /places/nearby, with no connector, power, or status fields. Yellowknife and Iqaluit returned nothing.

RecordedGeocodingNewAvailability unverified

Places, and the fields we do not have

/places/search, /places/nearby and /places/{id} over the points of interest the geocoding corpus already carries. /geocode/nearby is unchanged. The plan asks for phone numbers and opening hours; we do not have them, so they are absent from the response rather than null.

  • /places/search returns places, where /geocode/search returns whatever best matches and for Calgary that is the city
  • /places/{id} is new capability rather than a rename: the geocoder had no by-id lookup, so a client that stored a result had no way to refresh it
  • A malformed id is a 404, not a 400. From a caller's side that is the same answer, and distinguishing them would leak our storage type into the contract

AvailabilityAvailability was not re-checked against production for this record. Phone, hours, website, accessibility, and operator are absent from the corpus, not returned as null.

RecordedRoutingNewAvailability unverified

Road closures, for one province

GET /incidents, /closures and /road-conditions over DriveBC's Open511 feed. One province of thirteen, and the reason it is one province is that 511 Alberta wants an API key nobody has registered for.

  • Polled live behind a 60 second cache, not ingested: a road event that is an hour old is worthless, and a cached snapshot hides its own age
  • A closure means the publisher said closed. The event category says why a road is affected, never whether it is shut, and several construction events describe brief closures in prose while reporting all lanes open
  • The publisher's description comes back verbatim. Our categories are a lossy projection of theirs, and the sentence a driver needs is in the prose

AvailabilityAvailability was not re-checked against production for this record. The note covers British Columbia provincial events from DriveBC. Routing does not avoid them.

RecordedPlatformNewAvailability unverified

Report a wrong result

POST /feedback files a data-correction report against any product, and every live example in the docs now carries a control that opens one. Authenticated like everything else and never metered: telling us our data is wrong must not cost you a call.

  • POST /feedback, and POST /places/{id}/feedback for a report about one place
  • Your request is attached only if you tick the box. The API refuses context without include_context: true rather than dropping it silently, and the dialog shows you the exact bytes first
  • Ten categories, narrowed to the ones that make sense for the product you are reporting on, and a free-text field that is stored exactly as you write it

AvailabilityAvailability was not re-checked against production for this record. Reports are not metered. You cannot read your reports back yet.

RecordedGeocodingFixedAvailability unverified

Why Victoria used to be a hamlet

Searching a provincial capital by name returned somewhere else of the same name. The cause was a unit error in the loaders that had been sitting in the corpus since the first build, and finding it took building the national benchmark that now guards it.

  • Victoria, Fredericton, Charlottetown, Kingston, Windsor and Waterloo return the city you meant
  • A 4,032-query benchmark across all thirteen jurisdictions, stratified by province, settlement size, language and query type, runs on every geocoder change
  • A leading number in a query now means an address lookup, with an exception for the Cariboo road houses that are named for their mileage

AvailabilityAvailability was not re-checked against production for this record. The measured ranks came from a local restore of the corpus, not from a serving rebuild.

RecordedRoutingImprovedAvailability unverified

Cycling and walking routes know about hills

The Canada graph is rebuilt over our own 30 m national elevation model, so every edge carries a grade and bicycle and pedestrian times reflect the climb. Driving times are unchanged: Valhalla's auto and truck costing have no grade term, which is why use_hills is a 400 on those modes rather than a no-op.

  • bicycle and pedestrian durations and isochrones now account for terrain, with no parameter needed
  • use_hills from 0 (avoid climbs even for a longer route) to 1 (indifferent), on bicycle and pedestrian only
  • Grades come from NRCan MRDEM-30 at 30 m to 85 degrees north, the same model the outdoor styles shade with; SRTM, which most engines use, stops at 60

AvailabilityAvailability was not re-checked against production for this record. The note says bicycle and pedestrian times use grade, and use_hills is rejected on driving modes.

RecordedRoutingImprovedAvailability unverified

Highway preference, without a second router

use_highways on /route and /isochrone is Valhalla's existing auto and truck costing option on the Canada OSM graph. Industry and remote routing stay experimental: no winter-road graph, no resource-road costing.

  • use_highways from 0 (avoid motorways and trunks) to 1 (prefer), on auto, car, and truck only
  • bicycle and pedestrian reject the flag with a 400 that names the allowed modes
  • Docs on /docs/apis/routing and /docs/reference/coverage say what the graph does not model

AvailabilityAvailability was not re-checked against production for this record. use_highways applies to auto, car, and truck. There is no winter-road graph.