GraphHopper is a routing engine for OpenStreetMap. It can be used as a Java library or as a standalone web server.

Please refer to the official documentation on how to use the web server’s API.


License information can be found here


First of all, start with creating a directory for GraphHopper and enter it:

[isabell@stardust ~]$ mkdir ~/graphhopper
[isabell@stardust ~]$ cd ~/graphhopper
[isabell@stardust graphhopper]$

Before actually installing GraphHopper, a .osm.pbf map file must be downloaded into this directory. Such files can be found at Geofabrik (more information), for example. In order to minimize resource usage, please choose only a small map, preferably at district level.


A map of Berlin will be used as an example. Please replace the map names according to your needs. Choose small maps in order to not overuse the shared resources.

[isabell@stardust graphhopper]$ wget
[isabell@stardust graphhopper]$

Next, you should download the default configuration file.

[isabell@stardust graphhopper]$ wget -O config.yml
[isabell@stardust graphhopper]$

In order to make GraphHopper work with Uberspace web backends, change the bind_host setting in the server section of this configuration file from localhost to Additionally, you should set the setting graph.dataaccess to MMAP in order to reduce RAM usage. Feel free to make further changes as you see fit.

Finally, you can download the actual GraphHopper Java archive:

[isabell@stardust graphhopper]$ wget
[isabell@stardust graphhopper]$

Setup Daemon

Create the file ~/etc/services.d/graphhopper.ini with the following content:


Remember to use your own username instead of isabell and adjust the file names according to the used version and map.

command=java -Ddw.graphhopper.datareader.file=berlin-latest.osm.pbf -jar graphhopper-web-4.0.jar server config.yml

After creating the configuration, tell supervisord to refresh its configuration and start the service:

[isabell@stardust ~]$ supervisorctl reread
SERVICE: available
[isabell@stardust ~]$ supervisorctl update
SERVICE: added process group
[isabell@stardust ~]$ supervisorctl status
SERVICE                            RUNNING   pid 26020, uptime 0:03:14
[isabell@stardust ~]$

Setup Web Backend


GraphHopper is running on port 8989.

To make the application accessible from the outside, configure a web backend:

[isabell@stardust ~]$ uberspace web backend set / --http --port <port>
Set backend for / to port <port>; please make sure something is listening!
You can always check the status of your backend using "uberspace web backend list".
[isabell@stardust ~]$

Map Tiles

A map interface should now be available at You will probably see messages that your map tiles API key is invalid. In case you only need to use the GraphHopper Routing API, you can ignore this warning. In the upper right-hand corner, there’s a layer button, where you can choose the map tiles provider. The option “OpenStreetMap” likely works without further configuration. Further information on map tiles configuration can be found in a guide by GraphHopper.



Check the update feed regularly to stay informed about the newest version.

To update GraphHopper, follow the installation procedure described above.

Tested with GraphHopper 4.0, Uberspace 7.11.5

Written by: Thomas S. <>