What shipped, and when.

Verified dates are the day that release was available in production. Earlier records keep the day they were written, which is not a checked deployment date.

61 updates

October 2026

RoutingNew

Routes can carry written turn-by-turn steps

steps=true on /route, /match and /optimized-route adds written directions, one per maneuver, in English or French: each step's instruction, distance, duration, start point and its stretch of the route line, for a directions list in a web or mobile app. There is no voice narration.

  • Step types and modifiers are unmap's own names (turn, keep, exit, roundabout, transit...), so your code does not depend on the routing engine's numbering
  • geometryRange indexes the returned line, so a hovered step can be highlighted on the map without a second geometry
  • lang=fr writes French; without lang the gateway follows Accept-Language. The French comes from the engine's France French locale, so some phrasing reads as European French

RoutingFixed

Four BC transit agencies are back, 128 in all

West Kootenay, Whistler, Williams Lake and Port Alberni route again after a rebuild, and the build now refuses to drop an advertised agency without saying so.

  • All four returned a transit leg for 3 of 3 of our test rides on the live API
  • All 128 advertised agencies passed at least two of their test rides after the rebuild
  • Schedules only, no realtime, and depart_at is required
RoutingNew

Transit isochrones

/isochrone now takes mode=transit with a depart_at: the area you can reach by walking and scheduled transit within each time band, on the same graph and agencies as transit routes.

  • A transit band can be a MultiPolygon, because a ride drops you in areas you cannot walk between, and every one of them is kept
  • A centre with no scheduled transit nearby is a 422 outside_coverage rather than a walking-only polygon
  • Slower than road isochrones: about 1.8, 2.6 and 3.4 seconds for a single 30, 60 and 120 minute band from downtown Toronto

RoutingImproved

Transit routing for five more agencies

mode=transit now plans trips on London Transit, North Bay, Miramichi, Shawinigan and Middlesex County Connect. Four of them were in the graph but unusable until their feeds were repaired.

  • London Transit, Miramichi and Middlesex County Connect returned a transit leg for 8 of 8 of our test rides, Shawinigan for 8 of 8 and North Bay for 7 of 8
  • Four BC agencies (West Kootenay, Whistler, Williams Lake and Port Alberni) are temporarily out of the graph and no longer advertised, after a tooling failure on our side during the rebuild; they return at the next one
  • Schedules only, no realtime, and depart_at is required
RoutingImproved

Transit routing for VIA Rail, Orleans Express and Maritime Bus

mode=transit now plans trips on three intercity operators, 123 agencies in all. Long hops between distant stops often return no route, so shorter legs work best.

  • VIA Rail, Orleans Express and Maritime Bus return transit legs for stop pairs within about 80 km of each other
  • In our tests 4 of 8 VIA rides, 5 of 8 Orleans Express rides and 3 of 8 Maritime Bus rides returned a route
  • Schedules only, no realtime, and depart_at is required
RoutingImproved

Transit routing verified for 14 more agencies

mode=transit now plans trips on 120 agencies, up from 106. The 14 added were already in the graph; a first round of test rides had been too long to prove them.

  • Added: UP Express, BC Ferries, several BC Transit systems, Ontario Northland, Prince Albert, Rimouski and a few smaller Ontario systems
  • 12 agencies stay in the graph without being advertised, because fewer than two test rides returned a transit leg
  • Schedules only, no realtime, and depart_at is required
RoutingImproved

Transit routing verified for 106 Canadian agencies

mode=transit now plans trips on 106 agencies across the country, up from three. Each was checked with real rides against the live API before it was marked routable.

  • Every agency named here returned a transit leg for at least two of three rides built from its own schedule
  • 26 more agencies are in the graph but not yet advertised, because fewer than two rides came back with a transit leg
  • Schedules only, no realtime, and depart_at is required

RoutingNew

Transit routing in Montreal and Quebec City

mode=transit now plans trips on STM in Montreal and RTC in Quebec City, alongside TTC in Toronto. Schedules only, and depart_at is required.

  • Each ride returns walking and transit legs, and every transit leg names its agency
  • Served from a national graph built from 132 Canadian feeds; only TTC, STM and RTC are advertised as routable until each agency has a verified ride
  • No realtime, no arrive_by and no matrix, as before

September 2026

RoutingNew

Keep a route out of a drawn area

POST /route and POST /isochrone accept avoid_areas: a GeoJSON ring whose roads are removed from the search.

  • A polygon, MultiPolygon, or FeatureCollection of either, on route, isochrone, matrix, match and optimized-route
  • At most 8 rings, 100 vertices and 10 km of perimeter; a ninth ring is 400 from the gateway
  • A destination inside the ring is 422, not a route that crosses it

AvailabilityA destination inside the ring is rejected. Valhalla 3.8.3 can still snap a point across the polygon, so treat the ring as a strong exclusion, not a guarantee.

RoutingNew

TTC rides on a dedicated transit graph

mode=transit now answers TTC trips from a Canada graph that includes ingested GTFS. Other static feeds stay schedule-only.

  • A dedicated VALHALLA_TRANSIT container serves transit-current.json; the road graph is unchanged
  • depart_at is required; pedestrian-only answers fail the golden rides
  • /transit/agencies reports TTC routing as true and the other licence-cleared feeds as schedule-only

AvailabilityScheduled TTC trips only. depart_at is required. There is no arrive_by, matrix, isochrone, or realtime feed. Other agencies in /transit are schedules, not routing.

RoutingNew

Static transit data without pretending it is live

/transit serves scheduled agencies, stops, routes and departures from release 20260917-6579561c31c3. The five licence-cleared pilot feeds are Calgary Transit, TTC, OC Transpo, GO Transit and UP Express.

  • A versioned compiler turns licence-cleared staged GTFS feeds into immutable R2 artifacts with stable um:transit ids
  • Nearby stops use 0.1-degree shards followed by exact distance filtering and sorting, so the Worker never scans a national file
  • Departures preserve service after midnight, calendar exceptions, feed timezones and daylight-saving boundaries

AvailabilityEvery departure is scheduled, not realtime. A feed listed here is not necessarily routable.

SDKsFixed

The docs say what the API does, and two things the API did wrong are fixed

Every page of the developer docs was checked line by line against the gateway, the containers and the live API, in English and French. The audit also found two defects worth fixing rather than documenting.

  • Autocomplete takes the whole input box: every word but the last must match, the last is the prefix being typed. "Calgary Tow" finds Calgary Tower
  • Isochrones are capped at four contours of at most 120 minutes, as a 400 that names the rule, where five contours used to fail as an opaque 502
  • Newly documented: /geocode/nearby with the full category table, ?theme= and its 400, /terrain and /contours, the style document's shape, what counts as a metered call, and what a plan block looks like

Packages@unmap/sdk@0.1.0@unmap/core@0.1.0@unmap/maps@0.1.0@unmap/geocoding@0.1.0@unmap/vue@0.1.0