Valhalla is the routing layer people usually forget exists until a map product starts making decisions they cannot explain. A map tile can show roads. A geocoder can find a place. Routing is the harder middle problem: turn open road data into a graph, decide which edges are usable for a given traveler, price tradeoffs at request time, and return directions that an application can trust. Valhalla matters because it makes that layer open, inspectable, and operable on OpenStreetMap data rather than hiding it behind a proprietary directions endpoint.[1][3]

As of 2026-06-13T10:03:32Z UTC, the public valhalla/valhalla repository showed 5,806 stars, 908 forks, 899 open issues, and push activity at 2026-06-13T08:44:55Z; the latest GitHub release was 3.7.0, published on 2026-04-29.[2][10] Those numbers are only a maintenance signal. The engineering reason to look at Valhalla is more durable: the project is organized around routing-specific libraries for tile data, costing, elevation, graph building, location correlation, path generation, narrative generation, and HTTP service handling.[1]

Image context: the cover uses a real street-cycling photograph rather than a map screenshot or diagram. That is deliberate. Valhalla's product is not visual style. It is the routing layer that decides what a "good route" means when speed limits, turn restrictions, road classes, travel mode, elevation, access rules, and requested preferences all pull in different directions.[9]

The project is a routing engine, not a map app

The repository describes Valhalla as an open-source routing engine and accompanying libraries for OpenStreetMap data, with tools for routing, time-distance matrices, isochrones, elevation sampling, map matching, and tour optimization.[1] That scope is worth keeping intact. Valhalla is not trying to replace the whole mapping stack. It does not own cartographic design, address search, fleet UI, or the driver's phone screen. It owns the part where a transportation graph becomes a decision.

The turn-by-turn overview shows the practical surface clearly: Valhalla can provide routing and navigation for web or mobile applications, globally, across driving, walking, bicycling, multimodal, and transit-oriented requests, with maneuver directions along the route.[3] That makes it useful anywhere a product needs directions but does not want route behavior to be a mystery. A civic app, mobility startup, logistics tool, research workflow, trail product, or internal field-operations system can reason about the routing engine as software it can deploy and test.

The first adoption boundary is therefore simple. Valhalla is compelling when the route is part of the product's contract. If your application merely needs "directions" as a commodity feature, a hosted API may be enough. If your application needs to explain why a route avoided a road, preferred a bicycle lane, selected an arrival-time path, snapped noisy GPS to known streets, or generated a service-area polygon, Valhalla gives you a place to inspect the mechanics.[3][4][6]

Tiles are the operational unit

Valhalla's routing graph is tiled. The tile specification describes a hierarchy with three levels: highway roads at 4-degree tiles, arterial roads at 1-degree tiles, and local roads at 0.25-degree tiles.[5] That is more than a storage detail. It is how a global road network becomes something a machine can load, cache, update, and query without treating the planet as one enormous in-memory object.

The repository frames the tiled hierarchical data structure as a way to support smaller memory footprints, offline routing, regional extracts, and partial updates.[1] Those are the real-world reasons a routing engine cannot be judged only by a successful demo route. If a product covers one metro area, one country, or a fleet's operating region, it should not have to carry the same runtime shape as a worldwide navigation service. If a mobile or embedded use case needs routing when a network connection fails, the tile boundary becomes the deployment boundary.

Baldr, one of Valhalla's internal modules, makes that architecture explicit. Its docs describe route-data tiles, tile caching, hierarchical tile layout, and tile data members such as nodes, edges, and exits.[7] In plain terms, Valhalla's graph is not just "OSM imported into a database." It is a routing-specific representation whose parts are shaped for pathfinding and route attribution.

This is also where operational work enters. A team running Valhalla has to decide how tile data is built, where extracts come from, how often they are refreshed, whether elevation and transit inputs matter, how much disk and memory the target region needs, and how stale route data is allowed to be. The open-source gain is control, not the absence of maintenance.

Costing is where product policy enters

Valhalla's most important design choice may be runtime costing. The turn-by-turn API reference says route requests must include a costing model and may include optional parameters for that model.[4] In practice, that means "fastest route" is not baked into the graph as a universal truth. The request can ask for automobile, bicycle, pedestrian, truck, bus, taxi, scooter, motorcycle, or multimodal behavior, with options that change how the engine prices edges and maneuvers.[4]

That distinction matters because routing policy is product policy. A bicycle route that avoids hills, a truck route that respects restrictions, a pedestrian route that treats alleys differently, and a multimodal route that mixes walking and transit are not variations of one neutral path. They are different answers to the question "what costs should this traveler pay?" Valhalla's architecture keeps that question close to the request rather than hiding it inside one opaque route profile.[3][4]

The repository's module layout reinforces the point. Sif handles graph-node and edge costing; Loki correlates input locations to graph entities; Thor generates paths through the graph hierarchy; Odin generates maneuvers and narrative; Tyr handles HTTP requests and formats API output.[1] Those names are easy to skim past, but the separation is useful. It means location matching, cost policy, path search, and written directions are different responsibilities.

The failure mode is overconfidence. Runtime costing does not magically solve missing map tags, poor local speed assumptions, closed roads, bad GPS, or a product that has not defined its own route preference. Valhalla gives teams a place to encode and test policy. It does not remove the need to know what the policy should be.

Map matching widens the use case

Routing starts with planned movement. Map matching starts with observed movement. Valhalla's map-matching API can match coordinate traces, such as GPS locations, to roads and paths in OpenStreetMap.[6] The docs distinguish trace_route, which returns a shape snapped to the road network with narrative directions, from trace_attributes, which returns detailed attribution along the matched route.[6]

That is a different class of product value. A transit analyst can align a vehicle trace to the road graph. A cycling app can turn noisy phone GPS into a route-like record. A logistics team can compare actual traveled paths against expected paths. A road-safety workflow can attach attributes to observed movement rather than only to planned itineraries. Once a route engine can also interpret traces, it becomes part of a feedback loop between plan and reality.

The map-matching docs also note that service requests should use POST because shapes or encoded polylines can be large.[6] That small API detail is a reminder that route infrastructure has physical constraints. GPS traces are bulky. Full-region tiles take space. Multimodal routing needs data inputs beyond streets. A serious Valhalla deployment is therefore a data pipeline and service operation, not only a library linked into an app.

Why Valhalla is still a distinct OSS lane

Interline's overview usefully frames Valhalla as a multipurpose routing engine that originated in Mapzen's mobility work and is used across several mapping and mobility contexts.[8] That matters because the project sits in a middle lane: more specialized than a general graph library, more self-owned than a hosted directions API, and broader than a single-mode shortest-path demo.

It also occupies a different lane from adjacent projects already familiar to open-source map teams. OpenStreetMap provides the data commons. Renderers and tile stacks show the map. Geocoders turn text into places. Valhalla turns the transportation graph into route decisions. Confusing those layers is how teams end up blaming the wrong system when a navigation product behaves badly.

The best pilot is narrow. Pick one region, one or two travel modes, and a route class where the current answer is painful. Build or acquire the tiles. Run known origin-destination pairs. Compare route choices, ETA behavior, avoid/prefer settings, map-matched traces, and isochrones against human expectations. Then inspect the misses: missing OSM tags, outdated local speed assumptions, costing knobs, tile freshness, or product policy. That process is slower than pasting in a hosted API key, but it produces a better engineering question every time.

Valhalla is a strong fit when route behavior is strategic enough to own: offline navigation, custom bicycle or truck preferences, local mobility analysis, research-grade isochrones, field-service territory planning, or applications where map matching is as important as route planning.[1][4][6] It is a weaker fit when the team wants a finished consumer navigation product, live traffic operations without owning data pipelines, or a support model where somebody else explains every routing anomaly.

The cleanest way to remember Valhalla is this: it makes routing a graph-costing problem you can operate. The map still matters, but the route is not the screenshot. The route is the result of tiles, costs, correlated locations, path search, narrative generation, and data freshness meeting under one request. That is exactly the kind of infrastructure open source is good at making visible.

Sources

  1. GitHub, valhalla/valhalla - project repository, README scope, feature list, module layout, tiled hierarchy rationale, and OpenStreetMap data framing.
  2. GitHub API, valhalla/valhalla repository metadata sampled on 2026-06-13 - stars, forks, open issues, push timestamp, and repository status fields.
  3. Valhalla Docs, "Routing overview" - turn-by-turn service scope, global routing, supported travel modes, and maneuver-directions framing.
  4. Valhalla Docs, "Turn-by-turn API reference" - runtime costing requirement, costing models, request parameters, and route behavior controls.
  5. Valhalla Docs, "Tile Specifications" - graph tile purpose, three-level hierarchy, tile sizes, and road-class split across highway, arterial, and local levels.
  6. Valhalla Docs, "Map Matching service API reference" - coordinate-to-road matching, trace_route, trace_attributes, POST guidance, and route attribution behavior.
  7. Valhalla Docs, "Baldr" - routing data structures, route-data tiles, tile caching, hierarchical layout, nodes, edges, exits, and routing subproblem support.
  8. Interline Technologies, "Intro to Valhalla multi-purpose routing engine" - independent overview of Valhalla's origin, use cases, and position in the open-source routing ecosystem.
  9. Wikimedia Commons, "File:2009-03-07 Man with bicycle helmet.jpg" - source page for the real street-cycling photograph used as the article cover.
  10. GitHub API, valhalla/valhalla latest release metadata sampled on 2026-06-13 - release tag and publication timestamp for Valhalla 3.7.0.