← Back to all sparks
G

GraphHopper

DEVOPS
Velocity0.0

Fast open source routing engine and navigation API

GraphHopper finished moving vehicle profiles into custom models, then went back to OSM tags.

routingopenstreetmapcustom-modelsnavigationgraph-storageprofiles
Current state
GraphHopper ships a major roughly every six months, with 11.0 in October 2025 the most recent. The architectural work happened in 9.0, which moved vehicle encoded values into the custom model, removed the built-in vehicle parsers' name property and the wheelchair parsers, allowed external encoded values in custom models, and blocked built-in custom model filenames. 10.0 then spent itself on storage layout — byte-based edge storage, a Map-based KVStorage API, wider georef fields — and 11.0 is almost entirely OSM tag interpretation: maxspeed=none handling, separate foot and bike road access, cycleway oneway combinations, toll parsing moved into a country-aware parser.
Where it's heading
The configuration model is settled and the effort has moved to routing quality. Nearly every change in 11.0 is about reading OSM tags more faithfully for a specific mode — bicycle handling on living streets, foot instructions at junctions, MTB speeds on compacted surfaces, HGV tolls by country — which is the long tail of work that separates a routing engine that runs from one people trust. Turn restrictions are the recurring source of real bugs, appearing across 9.0, 10.0, 10.1 and 11.0 with via-way handling repeatedly needing correction. The new POST /navigate endpoint accepting a GraphHopper request is the one API-surface addition in this window.
Prediction
Expect continued profile-level tuning driven by OSM tagging edge cases rather than architectural change, since three consecutive majors have narrowed in that direction. Turn restriction handling with multiple or overlapping via-ways is the most likely source of the next bugfix release, given its record across every version here.

Recent moves

  1. 9mo ago

    11.0 refines mode-specific OSM tag handling and adds POST /navigate

    A release almost entirely made of routing quality work: maxspeed=none parsing, separate foot_road_access and bike_road_access, cycleway oneway tag combinations, country handling moved into the toll parser, and MTB speeds on compacted surfaces. The new POST /navigate endpoint accepting a GraphHopper request is the only API addition.

    View source ↗
  2. 1y ago

    10.2 fixes an import failure on recent OSM turn restriction data

    A bugfix release for 9.x and 10.0 throwing errors during import when turn restrictions are enabled against recent OSM data. Version 10.1 was skipped, making this the effective successor to 10.0.

    View source ↗
  3. 1y ago

    10.1 cherry-picks a via-way turn restriction fix

    A single cherry-picked commit correcting via-way restrictions with multiple from and to ways. It was superseded three days later by 10.2 and the version was effectively skipped.

    View source ↗
  4. 1y ago

    10.0 reworks edge storage layout and turn cost computation

    The storage-focused major: byte-based edge storage, a Map-based KVStorage API, wider georef fields removing the factor-4 workaround, three-byte elevation and pillar counts, and a higher maximum edge count for edge-based contraction hierarchies. Mostly invisible to users, but it raises the ceiling on graph size.

    View source ↗
  5. 2y ago

    9.1 is a bugfix release with no documented changes

    A bugfix release whose notes contain only a diff link and a pointer back to the 9.0 release page. Nothing is stated about what it fixes.

    View source ↗
  6. 2y ago

    Vehicle profiles collapse into custom models in GraphHopper 9

    ⚡ SPARK

    The release that settled GraphHopper's configuration model: vehicle encoded values move into the custom model, external encoded values are accepted, and the built-in file-name shortcuts are removed. Everything in 10 and 11 is built on the assumption this migration is done.

    View source ↗