We have released version 11 of GraphHopper, the flexible and fast open source routing engine for OpenStreetMap. Read more about it on GitHub or try GraphHopper Maps.
The following contributors worked on over 45 pull requests and many more smaller changes:
michaz, easbar, otbutz, karussell, ratrun, OlafFlebbeBosch, tyrasd, james-willis, caspg, vasilybels, OsamaAlmaani, binora
Thanks a lot to all contributors!
Turn-by-Turn Navigation
We introduced a POST /navigate endpoint that accepts a GraphHopper request including a custom model, which makes it possible to use customized requests even for navigation. There are examples how this can be used in maplibre navigation SDK as well as ferrostar.
And several further improvements have been made to the /navigate endpoint.
Bike Improvements
Not only have we improved the bike instructions for the /navigate endpoint but there were many bug fixes and improvements related to the bike routing itself.
Flexible Turn Costs
A new feature landed that allows you to model turn penalties in the custom model without writing Java code. This function makes it possible, for example, to avoid turning left:
On the left, you can see the standard behaviour for car routing. On the right, a heavy penalty is introduced for left turns. Obviously this ‘extreme’ configuration it is not suited for production but shows what is possible.or reduce turns in general:
On the left side you see the standard behaviour for bike and on the right side most turns are avoided. Note that it still does not use the top left junction as right turns are forbidden there.When setting the new turn penalty feature it is possible to differentiate between right- and left-hand traffic, and between the road classes (highway tags) of the roads involved. Please note that this feature is not enabled in the GraphHopper API or for GraphHopper Maps.
Read more about it in the corresponding pull request.
Improved Avoidance of Private Roads
Interestingly, the turn penalty feature made it possible to resolve a long-standing issue regarding private and destination-only roads. These roads are now properly avoided, even if they are short, and no unusual detours will be produced if a destination is on such a road. Read more about it in the pull request. This works already for the GraphHopper API and for GraphHopper Maps:
On the left side you see the old behaviour that tries to avoid private roads despite the fact that the destination is on a private road. The new behaviour calculates the actual shortest path.🎉 This work was sponsored by OPTITOOL.
Public Transit
An additional solver for public transit queries was added from @michaz. It is much faster than the current solver, especially for profile queries (to get all routes that are optimal at some point in a time interval). It loads and pre-processes and runs national networks on laptops, and has been known to work for continental networks on bigger servers. Read more about this in the pull request.
Improved Performance
Last but not least: the isochrone calculation, routing queries and the import process are now faster.

Several noteworthy improvements have been made:
- Under ‘Settings’, you will now find the option to avoid motorways for cars, and the ‘ecargobike’ profile when you chose “racing bike”, among many other features. Previously this was already possible with a custom model, but a request with a pre-generated profile is faster. And the new “profile group” feature exposes many pre-generated profiles in a user friendly way.
- The map view will now stick to your current location if you click the “current location” button on the map.
- The hike profile now allows even more dangerous sac_scales but GraphHopper Maps marks them as very dangerous with an orange route hint icon.
- Requests with custom models are now faster as for longer routes a heuristical approximation is enabled.
- Hide the path while pressing ‘h’ to see the underlying network.
- Several bug fixes and improvements.
Happy routing and try GraphHopper Maps now!
.png)

