About MoveMyBikeFit
MoveMyBikeFit is an open-source gravel and road bike geometry comparison and fit tool. Select any two bikes to overlay their silhouettes at scale, enter your fit measurements to find stem and saddle combinations that match your position, and compare frame geometry side by side.
How it works
Geometry overlay
Bike frames are drawn from the published geometry table — stack, reach, head tube angle and length, seat tube angle and length, chainstay, BB drop, and wheelbase. All measurements are in the manufacturer's coordinate system with the bottom bracket at the origin.
Fit triangle
Three measurements define your riding position as a triangle between the bottom bracket, saddle, and hoods:
- BB → Saddle — measured along the seat tube axis from the BB centre to the top of the saddle rails.
- Saddle → Hoods — straight-line distance from the saddle nose to the centre of the hoods.
- Hoods → BB — straight-line distance from the centre of the hoods back to the BB centre.
The calculator solves for the stem length and angle that places the hoods at the intersection of the saddle-distance circle and the BB-distance circle, accounting for spacers, stem height, bar reach, and hood length.
Fit suggestions
For each bike, the tool searches across all combinations of stem length (40–140 mm), stem angle (±17°), spacer stack (0–30 mm), and saddle setback (−10 to +35 mm), scoring each by how closely the resulting hood position matches your triangle measurements. The best matches are shown as a ranked table; clicking a row applies those values to the bike.
Measuring your inseam
Inseam height (also called pubic bone height or PBH) is the vertical distance from the floor to your crotch. This is not a trouser inseam — it is measured standing flat-footed, without shoes.
- Stand with your back against a wall, feet about 15 cm apart and flat on the floor.
- Slide a hardback book, spine upward, snugly between your legs — held level and pressed firmly up as a saddle would be.
- Have someone mark the wall at the top of the book spine.
- Measure from the floor to the mark. That is your inseam height.
To account for cycling shoe soles (typically 10–20 mm), add that amount before entering the value. The "show" checkbox next to the inseam field draws a horizontal guide on the canvas at your inseam height above the ground plane.
Standover clearance
Clearance is inseam − standover. If you enter your inseam, each size is checked against its standover height. Sizes with negative clearance (standover taller than inseam) are excluded from auto-size selection, and sizes below the minimum comfort clearance (default 30 mm, adjustable in Settings) are penalised in the scoring. The Clearance row in the geometry table shows the gap in mm, coloured green, yellow, or red accordingly.
Auto size
When "Auto" is selected in the size dropdown, the tool picks the size whose optimal stem length and angle are closest to a neutral position (90 mm stem, 0° angle). If inseam is set, sizes with insufficient standover clearance are excluded first.
BB height and trail
BB height and trail are derived values, not read from the geometry table directly. They depend on tire size — changing the tire width in Settings updates both figures. The formula used is:
- BB height = rim radius (311 mm for 700c ISO 622) + tire width − BB drop
- Trail = (wheel radius × cos(HTA) − fork offset) ÷ sin(HTA)
Adding a bike
- Fork the repository on GitHub.
- Use the Add Bike page to generate a YAML file from the official geometry table.
- Drop the file in
_data/bikes/and open a pull request. Include the source URL (manufacturer geometry page) in the PR description.
All geometry values must come from official manufacturer pages. Community-sourced or estimated values are not accepted.
YAML schema
Each file in _data/bikes/ follows this structure (angles in degrees from horizontal, lengths in mm):
brand: Specialized
model: Crux
year: 2024
type: gravel # gravel | road | cx | adventure
sizes:
- label: "54"
stack: 560
reach: 388
ht_length: 130
ht_angle: 71.0
st_length: 510
st_angle: 74.0
tt_length: 580 # effective top tube
cs_length: 420
bb_drop: 65
wheelbase: 1004
standover: 790 # optional but recommended
front_center: 589
fork_length: 374
fork_offset: 47
Open source
MoveMyBikeFit is open source under the MIT licence. Contributions — new bikes, bug fixes, features — are welcome via pull request on GitHub.