// the find
mthh/routingpy
🌎 Python library to access all public routing, isochrones and matrix APIs in a consistent manner.
routingpy is a Python client that wraps eight routing service APIs (Valhalla, OSRM, Graphhopper, ORS, Mapbox, Google Maps, OpenTripPlanner, IGN) behind a single consistent interface for directions, isochrones, and distance matrices. It's for GIS developers and data scientists who need to compare or swap routing backends without rewriting call code. Think geopy but for routing instead of geocoding.
1. The abstraction is genuinely useful: same `directions(locations, profile)` call works across all providers, and provider-specific params pass through unchanged — you don't lose access to advanced features to get the common interface. 2. Local FOSS routers (Valhalla, OSRM, ORS) work by just swapping `base_url`, so you can go from hosted API to self-hosted without touching your code. 3. Built-in `dry_run` mode and configurable `retry_over_query_limit` / `skip_api_error` are practical additions that save you from writing boilerplate around rate-limit handling. 4. Good test coverage per provider with mocked responses, and CI runs against CPython 3.9–3.14 and PyPy3.
1. Sync-only via `requests` — no async support. If you're doing bulk matrix requests across multiple providers concurrently, you're writing your own thread pool. 2. Provider list is thin and showing age: HERE, TomTom, Pelias, Bing Maps, and Azure Maps are all missing. Eight providers in 2026 is not a commanding position. 3. The project just changed maintainers in June 2025 with a vague 'reviewing the codebase' update and a November 2025 release target that has already passed — unclear whether that release shipped or the project stalled again. 4. Response objects expose a subset of fields (`geometry`, `duration`, `distance`) and the rest lives in `.raw`, which means for anything beyond the basics you're back to parsing provider-specific JSON yourself.