Project-OSRM/osrm-backend is a Backend project on GitHub, written primarily in C++. It has 8.0k stars. Open Source Routing Machine - C++ backend
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
High performance routing engine written in C++ designed to run on OpenStreetMap data.
The following services are available via HTTP API, C++ library interface and NodeJs wrapper:
Nearest - Snaps coordinates to the street network and returns the nearest matches
Route - Finds the fastest route between coordinates
Table - Computes the duration or distances of the fastest route between all pairs of supplied coordinates
Match - Snaps noisy GPS traces to the road network in the most plausible way
Trip - Solves the Traveling Salesman Problem using a greedy heuristic
Tile - Generates Mapbox Vector Tiles with internal routing metadata
To quickly try OSRM use our demo server which comes with both the backend and a frontend on top.
For a quick introduction about how the road network is represented in OpenStreetMap and how to map specific road network features have a look at the OSM wiki on routing or this guide about mapping for navigation.
Related Project-OSRM repositories:
osrm-frontend - User-facing frontend with map. The demo server runs this on top of the backend
osrm-text-instructions - Text instructions from OSRM route response
osrm-backend-docker - Ready to use Docker images
Documentation
Full documentation
Hosted documentation
osrm-routed HTTP API documentation
Contact
Discord: join
BlueSky: profile
Support the Project
OSRM is built and maintained through a community effort. The most impactful way to support the project is to contribute your time and expertise.
The primary ways to help are to:
contribute patches and improvements
participate in discussions, issue triage, and code reviews
If you would also like to support the project financially, you can do so via GitHub Sponsors or PayPal.
Quick Start
The easiest and quickest way to setup your own routing engine is to use Docker images we provide.
There are two pre-processing pipelines available:
Contraction Hierarchies (CH)
Multi-Level Dijkstra (MLD)
We recommend using MLD by default except for special use cases such as very large distance matrices where CH is still a better fit for the time being.
In the following we explain the MLD pipeline.
If you want to use the CH pipeline instead replace osrm-partition and osrm-customize with a single osrm-contract and change the algorithm option for osrm-routed to --algorithm ch.
Using Docker
We base our Docker images (backend, frontend) on Debian Linux and make sure they are as lightweight as possible. Older backend versions can be found on Docker Hub.
Download OpenStreetMap extracts for example from Geofabrik
The flag -v "${PWD}:/data" creates the directory /data inside the docker container and makes the current working directory "${PWD}" available there. The file /data/berlin-latest.osm.pbf inside the container is referring to "${PWD}/berlin-latest.osm.pbf" on the host. Noting that this process can take a long time to complete with little changes on the terminal output, for example, a Mexico's OSM file of 550.7MB took around 30 minutes to finish extraction and generate edge-expanded graph representation.
Note there is no berlin-latest.osrm file, but multiple berlin-latest.osrm.* files, i.e. berlin-latest.osrm is not a file path, but a "base" path referring to a set of files and there is an option to omit this .osrm suffix completely (e.g. osrm-partition /data/berlin-latest).
Optionally start a user-friendly frontend on port 9966, and open it up in your browser
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
In case Docker complains about not being able to connect to the Docker daemon make sure you are in the docker group.
sudo usermod -aG docker $USER
After adding yourself to the docker group make sure to log out and back in again with your terminal.
We support the following images in the Container Registry:
Name
Description
latest
master compiled with release flag
latest-assertions
master compiled with with release flag, assertions enabled and debug symbols
latest-debug
master compiled with debug flag
<tag>
specific tag compiled with release flag
<tag>-debug
specific tag compiled with debug flag
Building from Source
Dependencies are managed with vcpkg in manifest mode.
The required tooling on Linux is minimal — only a C++20 compiler, CMake ≥ 3.29,
Ninja, and a handful of autotools packages that some vcpkg ports need to
bootstrap themselves:
sudo apt install build-essential git cmake ninja-build pkg-config \
autoconf automake libtool curl zip unzip tar
Bootstrap vcpkg once (anywhere on your machine) and point VCPKG_ROOT at it:
The first configure will build every dependency (boost, tbb, expat, bzip2,
lua, libosmium, …) from source. Subsequent configures reuse vcpkg's
binary cache.
Request Against the Demo Server
Read the API usage policy.
Simple query with instructions and alternatives on Berlin:
The Node.js bindings provide read-only access to the routing engine.
We provide API documentation and examples here.
You will need a modern libstdc++ toolchain (>= GLIBCXX_3.4.26) for binary compatibility if you want to use the pre-built binaries.
For older Ubuntu systems you can upgrade your standard library for example with:
An exemplary implementation by a 3rd party with Docker and Node.js can be found here.
Using the Python Bindings
The Python bindings provide read-only access to the routing engine via nanobind.
You can install the Python bindings from PyPI via
pip install osrm-bindings
We distribute abi3 wheels for CPython 3.12+ on Linux (x86_64), macOS (arm64, x86_64) and Windows (x86_64). On other platforms pip will fall back to building from source, which requires CPython 3.10+ and the OSRM build dependencies.
To build from source from this repository:
pip install .
Package docs
For usage details and examples have a look at the Python bindings README.
References in publications
When using the code in a (scientific) publication, please cite
@inproceedings{luxen-vetter-2011,
author = {Luxen, Dennis and Vetter, Christian},
title = {Real-time routing with OpenStreetMap data},
booktitle = {Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems},
series = {GIS '11},
year = {2011},
isbn = {978-1-4503-1031-4},
location = {Chicago, Illinois},
pages = {513--516},
numpages = {4},
url = {http://doi.acm.org/10.1145/2093973.2094062},
doi = {10.1145/2093973.2094062},
acmid = {2094062},
publisher = {ACM},
address = {New York, NY, USA},
}
How active is development on Project-OSRM/osrm-backend?
The most recent commit recorded on Project-OSRM/osrm-backend was 26 days ago, based on the GitHub push timestamp. The repository has 4.0k forks — one of the better signals of community interest.
How does Project-OSRM/osrm-backend compare to other Backend projects?
Project-OSRM/osrm-backend is tracked by TopGit in the Backend category, with 8.0k GitHub stars and written in C++. Browse the Backend topic page on TopGit to compare it against similar projects by stars and activity.
How many stars does Project-OSRM/osrm-backend have?
Project-OSRM/osrm-backend has 8.0k GitHub stars — refresh the page for the live number, or check github.com/Project-OSRM/osrm-backend. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What is Project-OSRM/osrm-backend?
Project-OSRM/osrm-backend (Project-OSRM/osrm-backend) is a C++ project on GitHub. From the project's own README: Open Source Routing Machine - C++ backend
What language is Project-OSRM/osrm-backend written in?
Project-OSRM/osrm-backend is written primarily in C++. GitHub's language field is based on the largest share of bytes in the default branch.
What topics is Project-OSRM/osrm-backend associated with?
Why is Project-OSRM/osrm-backend categorized under Backend?
TopGit places Project-OSRM/osrm-backend in the Backend category based on its GitHub topics and description (tagged: "c-plus-plus", "cpp", "cpp17"). Categories are assigned from real repository metadata, not editorial guesswork.
Read full README in the tab above.
Is osrm-backend worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of osrm-backend.