Nit-Picking Magistrate

    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/osrm package

    5.26.0 • Public • Published

    Open Source Routing Machine

    Linux / macOS Windows Code Coverage
    Travis AppVeyor Codecov

    High performance routing engine written in C++14 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 this guide about mapping for navigation.

    Related Project-OSRM repositories:


    Full documentation


    • IRC:, channel: #osrm (Webchat)
    • Mailinglist:

    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 and make sure they are as lightweight as possible.

    Download OpenStreetMap extracts for example from Geofabrik


    Pre-process the extract with the car profile and start a routing engine HTTP server on port 5000

    docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf

    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.

    docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/berlin-latest.osrm
    docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-customize /data/berlin-latest.osrm

    Note that berlin-latest.osrm has a different file extension.

    docker run -t -i -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld /data/berlin-latest.osrm

    Make requests against the HTTP server

    curl ",52.517037;13.385983,52.496891?steps=true"

    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 ''

    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 on Docker Cloud:

    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

    The following targets Ubuntu 16.04. For instructions how to build on different distributions, macOS or Windows see our Wiki.

    Install dependencies

    sudo apt install build-essential git cmake pkg-config \
    libbz2-dev libxml2-dev libzip-dev libboost-all-dev \
    lua5.2 liblua5.2-dev libtbb-dev

    Compile and install OSRM binaries

    mkdir -p build
    cd build
    cmake ..
    cmake --build .
    sudo cmake --build . --target install

    Request Against the Demo Server

    Read the API usage policy.

    Simple query with instructions and alternatives on Berlin:

    curl ",52.517037;13.385983,52.496891?steps=true&alternatives=true"

    Using the Node.js Bindings

    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.20) 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:

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update -y
    sudo apt-get install -y libstdc++-5-dev

    You can install the Node.js bindings via npm install osrm or from this repository either via

    npm install

    which will check and use pre-built binaries if they're available for this release and your Node version, or via

    npm install --build-from-source

    to always force building the Node.js bindings from source.

    For usage details have a look these API docs.

    An exemplary implementation by a 3rd party with Docker and Node.js can be found here.

    References in publications

    When using the code in a (scientific) publication, please cite

     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 = {},
     doi = {10.1145/2093973.2094062},
     acmid = {2094062},
     publisher = {ACM},
     address = {New York, NY, USA},




    npm i osrm

    DownloadsWeekly Downloads






    Unpacked Size

    4.98 MB

    Total Files


    Last publish


    • dennisosrm
    • mapbox-admin
    • mapbox-npm