Hiking maps built on OpenStreetMap trail data
Waymarked routes with their shields, nine separate path layers, contour lines and four passes of hillshading. One style URL, no API key, no sign-up.
map.setStyle("https://styles.maptoolkit.org/hiking.json");
Built to put the trail first
The Hiking style carries 132 layers: six for waymarked routes and their shields, nine for paths, three for contours and four for hillshading.
Waymarked routes and shields
Six layers are dedicated to hiking routes, including the numbered shields. A waymarked long-distance route reads as one continuous line carrying its own reference, not as a chain of unrelated path segments.
Nine path layers
Paths, tracks and footways are drawn across nine layers, separated by type and by whether they run in a tunnel or over a bridge, so a via ferrata does not look like a forest road.
Difficulty grades in the data
sac_scale, mtb_scale and
via_ferrata_scale come through on the road layer.
A generic free basemap does not carry them, which is the whole argument for
using this one.
Contours and four hillshade passes
Three contour layers and four hillshade passes, plus rock texture on steep ground and a bathymetry layer for water depth. All in the style, with no extra source to configure.
Walking node networks
Numbered walking node networks, the junction-to-junction system used across the Benelux and parts of Germany, get their own label layer, so the numbers stay legible at the zooms people plan routes at.
Aerialways all year
Gondolas, cable cars and chair lifts render with labels in summer as well as winter, which matters when a route starts at a lift station.
Every map using these tiles keeps the Maptoolkit logo and the copyright line visible. The attribution guide covers the exact requirement and the drop-in plugins for MapLibre and Leaflet.
Filter paths by how hard they are
The difficulty grades sit on the road layer as ordinary fields, so
styling by them takes one filter expression. The Hiking style deliberately does
not colour by difficulty: that is a product decision, and it is yours.
// Pick out anything above SAC T3, so an easy-walking audience
// is not sent up something that needs hands.
// sac_scale comes through as T1 to T6.
map.addLayer({
id: 'hard-paths',
type: 'line',
source: 'mtk',
'source-layer': 'road',
filter: ['in', ['get', 'sac_scale'], ['literal', ['T4', 'T5', 'T6']]],
paint: {
'line-color': '#9E4130',
'line-dasharray': [2, 2],
'line-width': 1.6
}
});
// via_ferrata_scale is graded A to E, so the same filter shape
// separates a walk-up from a route that needs a harness.
The full field list, the values each grade takes and the network membership tags are in the outdoor tags reference.
Put your routes on top
This is a plain MapLibre style, so your own tracks are a GeoJSON source and a line layer. Nothing about the tiles constrains what you draw over them, and converting GPX to GeoJSON is a client-side step.
map.addSource('my-route', { type: 'geojson', data: routeGeoJson });
map.addLayer({
id: 'my-route-line',
type: 'line',
source: 'my-route',
layout: { 'line-cap': 'round', 'line-join': 'round' },
paint: { 'line-color': '#E8551A', 'line-width': 4 }
});
Make it your trail map
Open the Hiking style in MapMaker and change the path colours, the contour weight or the whole palette. Easy Mode works through the design system with no JSON involved, Expert Mode opens the style code directly. In our opinion MapMaker is among the best map style editors available right now, and it is free to use with these tiles.
Frequently asked questions about Maptoolkit Hiking
Which trails actually show up?
Anything mapped in OpenStreetMap as a path, track or footway, plus waymarked route relations. Routes get their own layers and shields, so a long-distance trail reads as one continuous line with its number on it rather than a chain of unrelated paths.
Is trail difficulty available?
Yes, in the data. The road layer carries
sac_scale, mtb_scale and
via_ferrata_scale straight from OpenStreetMap, so you can
filter or recolour by grade. The shipped Hiking style does not colour by
difficulty; that decision is left to you.
Can I draw a GPX track over it?
It is a normal MapLibre style, so add a GeoJSON source and a line layer. Nothing about the tiles restricts what you draw on top.
Are cable cars and lifts on the hiking map?
Yes. Aerialways render year round in every outdoor style, with labels, which matters for routes that start or finish at a lift station.
Do I have to use the Hiking style to get contours?
No. Summer and Cycling carry the same three contour layers. What Hiking does differently is push paths and route shields forward, hold the road network back, and use four hillshade passes instead of one.
Is the path surface in there?
The surface tag comes through on the road layer,
so you can tell a gravel forest track from a paved lane. Coverage depends
on what OpenStreetMap contributors have tagged in that area, which is
uneven.
How current is the trail data?
Weekly. A path or route mapped in OpenStreetMap today reaches the tiles within the week, with no pipeline of your own to maintain.
What are the rate limits?
Unregistered traffic gets 120 tiles per second sustained and 200 in burst per website, with a 40 tiles per second cap per visitor IP. Cached tiles do not count, and the edge cache absorbs most requests. There is no SLA on the community service, so it is not the right choice behind anything life-safety or billing-critical.
The rest of the outdoor range
Ski and winter maps
Colour-coded piste difficulty, nordic trails, eight lift types and run numbers.
All seven styles
Summer, Winter, Hiking, Cycling, Street, Light and Dark, each with a 3D variant and 13 language versions.
3D terrain
Add -3d to the style name for terrain, already configured
against the same elevation model.