About RouteLab
RouteLab plans a bike route on the map and writes it out as a GPX or TCX with the cues you want on the day: the turns, when to eat, when to drink, and what power to hold on the long climb.
It runs entirely in your browser. There is no RouteLab server, no account, and no upload. Routes are kept in this browser's IndexedDB and go nowhere else. It is a sibling of CritLab and CrossLab, and the three share their settings, your FTP and weight, and the intervals.icu key.
Drawing a route
- Click the map to add a point. The route follows the road network to it.
- Drag a point to move it; only the two legs that touch it are re-routed.
- Drag the line to pull the route through somewhere new.
- Click a point to select it, then Remove (or press Delete).
- Close loop routes back to the start; Out & back returns the way you came.
- Undo and redo cover every edit, cues included (Ctrl+Z / Ctrl+Shift+Z).
Routing comes from BRouter. Straight line draws exactly what you click, for trails the router doesn't know. Changing the terrain re-routes the whole route, except any imported track, which keeps its line; undo puts it back.
Terrain and skill
- Paved roads: the fastest tarmac.
- Quiet roads & bike paths: bike paths and quiet roads, including smooth unpaved paths.
- Smooth gravel: gravel roads and good tracks where they fit, pavement where they don't.
- Rough gravel & dirt: actively looks for unpaved roads and tracks.
- Mountain bike, beginner to expert: trails by their OpenStreetMap
mtb:scale grade.
- Beginner rides S0–S1: smooth singletrack, roots and small rocks.
- Intermediate goes up to S2: bigger rocks, steps, tight switchbacks.
- Advanced goes up to S3, and Expert up to S4.
sac_scale) are treated the same way. A trail tagged for foot traffic only is avoided at every level.
At every level, RouteLab never routes on a sidewalk, a footway crossing without bike access, or anything tagged as closed to bikes. That also means a click beside a road attaches to the road, not the pavement next to it. The gravel levels treat a main road with a bike lane like a quiet street, so they take the lane rather than zig-zag through the side streets around it. On the gravel and quiet-road levels a corner costs more too, so the route sticks to the through road unless a detour is really worth it.
On the gravel and mountain-bike levels the dirt stands out: unpaved stretches of your route are striped brown, and dirt roads and tracks are drawn on the map (solid for a dirt road, dashed for a track). Turn them off in the layers menu or Settings.
Trail ratings
With the trail overlay on (the layers button on the map), rated trails are drawn in the colour of their sign:
- IMBA ratings (
mtb:scale:imba): white circle, green circle, blue square, black diamond, double black diamond. - S-scale only (
mtb:scale): S0 is drawn green, S1 blue, S2 black, S3 double black and S4 and up orange ("pro"), and labelled as an S grade, not as a sign.
Hover a trail for its name and grade. Trails closed to bikes are faded and
dashed. The rated trails your route rides are listed under the route,
with the hardest one; they're shown as a band along the elevation profile,
and Add trail cues puts one at the start of each (BLK Wood Rat).
The router itself can't use IMBA grades (BRouter doesn't read that tag); the skill levels steer by the S-scale. Ratings come from OpenStreetMap's Overpass service, which can take half a minute for a new area and is sometimes too busy to answer. RouteLab keeps trying in the background and keeps what it gets for a month.
The grades are only as good as the map: plenty of trails have no
mtb:scale at all and are treated as rideable. Under the stats you
can see what the route actually uses: how much is paved, gravel or trail, and
the hardest graded trail on it. Check that before you trust a line through
unfamiliar woods.
You can also start from something you already have: drop in a .gpx,
.tcx or .fit, or, with intervals.icu connected, trace one of
your past rides. An imported track keeps its exact line. Waypoints and course
points already in the file come in as cues.
Cues
Custom cues are anchored by distance from the start. "Eat every 20 km" is about distance, not about whichever corner you happen to be at, so if you change the route the cues stay at their kilometre marks. A cue that ends up past the finish after an edit is flagged and left out of the export.
- One cue: eat, drink, a note, danger, summit or a water stop, at a distance you type, pick on the map, or click on the elevation profile.
- Repeating: every N km from one distance to another. The series is added as ordinary cues, so you can move or delete one, or remove the whole series.
- Power target: hold so many watts (or % of FTP) from one distance to another. You get a cue where it starts (
260W 8km) and one where it ends. On every climb… finds every climb of 2 km or more at 3% or steeper and puts the target on each.
Turn cues come from the router and follow the road, so they move whenever the route does. Sharp turns, U-turns and roundabouts are included by default; slight turns and keep-left/right are optional in Settings.
The time estimate
Each cue shows an ETA, and the preview for a repeating cue shows roughly how much time is between them. The estimate comes from physics, not an average speed. On every stretch of road it finds the speed at which your power balances gravity on that gradient, rolling resistance and air drag. The power is the target of any power cue covering that stretch, and otherwise a share of your FTP (70% unless you change it). Downhill speed is capped at 55 km/h. Mass, CdA and rolling resistance are the shared values CritLab uses, so if CritLab has fitted your CdA, RouteLab uses it too.
Exporting
Every cue becomes a point exactly on the track: its position is interpolated along the line and inserted as a track point. A waypoint that is merely near the line can be ignored by a head unit, or placed at distance zero so it fires at the start.
- GPX: the track, plus a
<wpt>for each cue with a short name, the full text in the comment and description, and a type (Food, Water, Left, Right, Summit, Danger, Generic). Many apps and head units read these as cues; Garmin Connect makes course points from them only some of the time. - TCX: a Garmin course with real CoursePoints, using Garmin's own types. This is the reliable choice for a Garmin Edge. Names are cut to Garmin's 10-character limit, which is why power cues read
260W 8km. - Cue sheet: a CSV with distance, ETA, type and text, to print or tape to the stem.
- JSON: the whole route, legs, cues and all, to load back into RouteLab.
Copy link makes a link that opens the route in RouteLab, cues and all.
The route is packed into the link itself (the part after #, which
browsers never send to a server), so nothing is uploaded. Whoever opens it
gets their own copy, saved in their browser; editing it doesn't change yours.
The roads are routed again when it opens, with the same terrain, so the line
is the same unless the map has changed there since. An imported track is
carried exactly, which makes the link longer; for a very long one, send the
GPX instead.
Privacy
RouteLab asks other services for things, and each one sees only what it is asked about. Map tiles come from the OpenStreetMap community tile servers (OpenStreetMap, CyclOSM or OpenTopoMap), which see the area you are looking at. Routes come from brouter.de, which sees the two points of each leg. Open-Meteo is asked for elevation only on straight-line legs and on imports that have none. Nominatim sees what you type into the search box. The intervals.icu key goes only to intervals.icu, and only when you ask for a ride or your FTP.