Proposal:MTB Trail Features
| MTB Trail Features | |
|---|---|
| Proposal status: | Draft (under way) |
| Proposed by: | Pkoby |
| Tagging: | mtb:feature:jump=*
|
| Applies to: | |
| Definition: | Skill features on trails for mountain biking |
| Statistics: |
|
| Draft started: | 2026-06-25 |
Problem Statement
Mountain biking often involves trail features (a.k.a. "skill features", "technical trail features" (ttf)) that test skills, enhance the experience, and can be great fun to ride. Up to now, there has not been a clear method for mapping or tagging these features in OpenStreetMap. Adding them to the OSM database would help mountain bikers plan ahead for their rides in new areas, provide an accurate representation of MTB trails, and also allow other trail users (hikers, horse riders) to know about obstacles. Trail features can change, but tend to be permanent enough that they're worth mapping.
Proposal
This proposal puts forward mapping and tagging guidelines for adding MTB trail features to OSM. At the time of proposal, there are very few elements mapped (at least as discoverable by searching for similar keys and values). mtb:feature=* has 43 uses worldwide, mtb_ttf=* has 26, and 0 for mtb_feature=* or mtb=feature . There are a few elements tagged mtb=jump(9), mtb=gap_jump(6), etc., but as mtb=* is used for access, these are confusing. cycling=dirtjump is tagged on ways only, so seems to refer to a riding style, not a feature.
Instead of any of these options, I propose using mtb:feature:*=*, where :* denotes the type (e.g. jump, skinny, rock garden). The value can be yes to denote the presence of a single feature without further detail. If there is more than one feature at a single point on the trail, the side relative to the direction of the way should be tagged, e.g. =*. Values can be left, right, or middle.
Additionally, if it is possible to avoid the feature(s) without leaving the trail (i.e. if above your skill level), tag the feature with mtb:feature:bypass=*. Values can be yes to denote that avoiding is possible, or left, right, inside (between features), outside (around outer edges of feature(s)), or combinations like inside;outside (if you can go around on both sides and in between features) or left;inside (if you can go around on the left and in between features, but not on the right).[1]
Features should be mapped as nodes connected to the highway=* in most cases, or as part of the highway=* split at the start and end if they are longer features like rock gardens, berms, skinnies, or wall rides.
Rationale
Per discussions with other mappers on OSMUS Slack (see link below), the mtb:feature:*=* was considered more flexible than mtb:feature=* because the latter only allows one feature at a single point on the trail (unless separated with semicolons, which is not as easy for consumers to parse). Presets for each feature type could add all relevant tags at once including the "top-level" tag of what type it is, so with mtb:feature:*=* you don't have to semicolon-ize manually for each type. While multiple : levels can be overwhelming, this method allows for limitless detail for each feature. If desired, one could tag the color, difficulty level, height, width, length, material, surface, etc.
Mapping the point (or short way) as part of the trail way could be used in future to provide routing notes for mountain biking. For example, plotting a mountain biking route could list the features that would be ridden. If points were separate from the highway=*, further analysis would be needed to associate the features with the trail.
Tagging
| Key | Importance | Value(s) | Example |
|---|---|---|---|
mtb:feature:*=* |
! Required | yes to show presence, left, right or middle to show side of the trail relative to way direction |
mtb:feature:jump=left
|
mtb:feature:bypass=* |
‽ Important | yes or no to show presence, left, right, inside (between features), or outside (around features) to show side of the trail relative to way direction |
mtb:feature:bypass=right
|
mtb:feature:*:oneway=* |
? Optional | yes, no, or -1 based on direction of way |
mtb:feature:jump:oneway=yes
|
mtb:feature:*:description=* |
? Optional | Human-readable description of a feature | mtb:feature:jump:description=Two foot tall dirt jump
|
mtb:feature:*:height/width:length=* |
? Optional | Dimensions of a feature. Measurements should ideally be in meters, but see https://wiki.openstreetmap.org/wiki/Units for other options. | mtb:feature:jump:height=0.7
|
| Type | Element | Description | Useful Tags | Example |
|---|---|---|---|---|
| Jump | A simple jump made of one ramp with a landing on the same level, aka 'trail jump', 'takeoff'. _/\_ |
mtb:feature:jump:height=*mtb:feature:jump:width=*mtb:feature:jump:surface=*
|
||
| Gap Jump | A jump made of a launch ramp and a landing ramp with a gap in between. aka 'double'.
_/\_/\_ |
mtb:feature:gap_jump:height=*mtb:feature:gap_jump:width=*mtb:feature:gap_jump:length=* distance between tops of rampsmtb:feature:gap_jump:surface=*
|
||
| Tabletop | A jump with a ramp up and ramp down with a flat section at the top.
_/‾‾\_ |
mtb:feature:tabletop:height=*mtb:feature:tabletop:width=*mtb:feature:tabletop:length=* distance along topmtb:feature:tabletop:surface=*
|
||
| Step-Up | A gap jump with a short takeoff leading to a higher landing.
ʌ_/\ |
mtb:feature:stepup:height=* height of taller rampmtb:feature:stepup:width=*mtb:feature:stepup:length=* distance between tops of rampsmtb:feature:stepup:surface=*
|
||
| Step-Down | A gap jump with a tall takeoff leading to a shorter landing.
/\_ʌ |
mtb:feature:stepdown:height=* height of taller rampmtb:feature:stepdown:width=*mtb:feature:stepdown:length=* distance between tops of rampsmtb:feature:stepdown:surface=*
|
||
| Dropoff | A jump from a high level to a lower level.
‾\_ |
mtb:feature:dropoff:height=*mtb:feature:dropoff:width=*mtb:feature:dropoff:surface=*
|
||
| Berm | A raised edge of the trail, often made of dirt, to allow faster turning around a corner. | mtb:feature:berm:height=*mtb:feature:berm:length=*mtb:feature:berm:surface=*
|
||
| Skinny | A narrow, usually elevated segment like a log, rock, or boardwalk that requires balance and precise riding to follow, aka 'log ride' in some instances. | mtb:feature:skinny:width=*mtb:feature:skinny:height=*mtb:feature:skinny:length=*mtb:feature:skinny:surface=*
|
||
| Bridge | A bridge-like feature that doesn't necessarily (but can) go over anything. | mtb:feature:bridge:height=*mtb:feature:bridge:width=*mtb:feature:bridge:length=*mtb:feature:bridge:surface=*
|
||
| A-Frame | A tall, usually wooden structure shaped like a capital A. | mtb:feature:aframe:height=*mtb:feature:aframe:width=*mtb:feature:aframe:length=*mtb:feature:aframe:surface=*
|
||
| Rock Garden | An area of large rocks along the path. Requires picking a good line to roll smoothly. | mtb:feature:rock_garden:length=*
|
||
| Teeter-Totter | A narrow hinged platform that pivots after you cross the middle. | mtb:feature:teeter:height=*mtb:feature:teeter:width=*mtb:feature:teeter:length=*mtb:feature:teeter:surface=*
|
||
| Wall Ride | A curved wall (basically a large berm) that you can ride up to hit fast corners. | mtb:feature:wall_ride:height=*mtb:feature:wall_ride:length=*mtb:feature:wall_ride:surface=*
|
||
| User-defined | Some features don't fall into these classifications. If you have another name for something here, try to fit it in, but feel free to create your own types. |
| Key | Description |
|---|---|
mtb:feature:*:colour=*
|
Notable color of a feature, e.g. a painted wall. |
| ... | etc. |
Examples
|
|
mtb:feature:berm=leftmtb:feature:bypass=rightmtb:feature:berm:length=3mtb:feature:berm:surface=dirt
|
|
Unresolved Questions
Please discuss these points on the discussion page.
- Should the tag be
mtb:feature:*=*, or wouldmtb:*=*ormtb_feature:*=*make more sense? - Is it called a "drop" or "drop-off"?
- Surface of drop/off: is it the top, bottom, or ~vertical face?
Impact on Data Consumers
There should be no impact because there is not a tagging scheme in use so far.
Features/Pages affected
External discussions
https://wiki.openstreetmap.org/wiki/Talk:Mountain_biking#Skills_area_-_how_to_tag
https://osmus.slack.com/archives/CKC0HGF4H/p1774532976037549
Comments
Please comment on the discussion page.
- ↑ Please discuss if left/right/middle is sufficient for feature position. Edge cases might have more than three features. In those cases, it's probably better to map individual paths to each feature. Also, a hypothetical situation could be bypass|feature|bypass|feature|feature|bypass, which cannot be reflected in tags only. Solutions could be again to split up the path or just tag
mtb:feature:bypass=yesand let people figure it out in person.
