Docs
What every number in this app means, how the model computes speed and power, and — importantly — which parts are Zwift's actual values versus estimates. Two badges flag every quantity:
actual Zwift's own value — not a guess. estimated a model stand-in for a value Zwift doesn't publish.
The physics model
Cycling speed is a balance of forces. To hold a steady speed v, your
legs must supply enough power to overcome gravity (on a climb), rolling resistance,
and air drag:
P = ( m·g·sin θ + Crr·m·g·cos θ + ½·ρ·CdA·v² ) · v / drivetrain_efficiency
- gravity
m·g·sin θ - Mass × gravity × the slope. Dominates on climbs — this is why a light bike matters uphill.
- rolling resistance
Crr·m·g·cos θ - Tyre-on-road friction, proportional to weight. Small but constant.
- air drag
½·ρ·CdA·v² - Grows with the square of speed — so it dominates on flats and descents, and barely matters on a slow steep climb. This is where aero equipment helps.
Zwift runs this in two stages:
- Stage 1 — steady-state solve actual constants
- Given your power and the gradient, solve the balance above for the target speed. The app inverts it both ways (power→speed and speed→power).
- Stage 2 — motion smoothing actual
- Your avatar doesn't jump to the target speed instantly — it ramps toward it, capped at +15 km/h per second accelerating and −10 km/h per second slowing (Zwift eases you down gently — a smooth coast). The steady-state charts here show the settled speed, so this mainly affects transitions.
Aerodynamics & CdA
- CdA estimated (rider) + actual (equipment)
- Drag area = drag coefficient (Cd) × frontal area (A), in m². The single number for "how much air you push." Bigger CdA → more drag → you need more watts for the same speed. It's the biggest lever for flat speed. Your total CdA = rider base + equipment biases.
- Rider base CdA estimated
- Your body is ~70–80% of total drag. Zwift computes this from your height & weight, but doesn't publish the exact function — so the app estimates it: it anchors a 175 cm / 75 kg rider at ~0.40 m² and scales by the DuBois body-surface-area ratio (bigger body → more frontal area). The "rider CdA calculation" expander on the main page shows the arithmetic.
- Equipment CdA bias actual
- Each frame, wheelset, and helmet adds a small CdA correction, added on top of the rider base. Negative = more aero = faster. These are Zwift's actual per-item values. Most of the aero lives on wheels and helmets; road frames are mostly 0 (differentiated by class, not a per-frame number).
- Air density (ρ) actual
- 1.226 kg/m³ — the fixed value Zwift uses in the drag term. Higher density = thicker air = more drag.
- Frontal-area scale / draft mechanism magnitude
- Zwift scales the whole aero term by a "frontal-area scale" factor — the same one it uses for
drafting and power-ups. Draft in this app multiplies air drag by
(1 − draft%): a 25% draft removes a quarter of your air resistance. The effect is real; the percentage is yours to set — Zwift's own draft curve (how rider count and gap map to a %) is computed on Zwift's servers and isn't published.
Weight & resistance
- System mass actual
- Everything gravity and rolling resistance act on: rider weight + frame + wheels + helmet, plus a fixed 200 g wheel offset Zwift adds. Frame/wheel/helmet weights are Zwift's actual grams.
- Rolling resistance (Crr) actual
- 0.004 — the tarmac value. Zwift varies Crr by road surface and by wheel type — see Road surfaces & wheel choice. The ride simulator applies that per surface along a route; the calculator here uses the flat tarmac value, since a gradient sweep has no specific route (and so no surface).
- Drivetrain efficiency estimated
- 0.975 (97.5%) — the chain/drivetrain loss. Zwift doesn't publish a number for this, so 0.975 is a typical estimate.
- Gravity & slope
- Slope / gradient is rise ÷ run as a percent (5% = 5 m up per 100 m along). Gravity is per-world in Zwift; the app uses 9.81 m/s².
Equipment
What the columns on the Equipment list mean.
- CdA bias actual
- The item's aerodynamic correction in m² (negative = faster); it adds to the rider's height/weight base CdA. Frame biases are mostly 0 (bikes differ by discipline and weight); a TT frame switches to its time-trial aero. Weights are the item's own grams (wheels also carry Zwift's fixed 200 g offset in the calculator).
- Class, unlock level & Drops actual
- Class (ENTRY / MID_RANGE / HIGH_END / CONCEPT), unlock level and Drop Shop price come from Zwift's bike config. “—” level means no level gate (special/reward/paid); “—” Drops means not purchasable with Drops (e.g. the climb-unlock concept bike). Drops are derived (config price × 71) and match ZwiftInsider's listed prices within rounding.
Road surfaces & wheel choice
Zwift's worlds aren't all smooth tarmac. The game models eight road surfaces,
and each one has its own rolling resistance (Crr) — the tyre-on-ground drag from
the Crr·m·g·cos θ term above. Grass drags many times more than pavement; a boardwalk,
cobbles or dirt sit in between. And your wheels matter: Zwift sorts wheelsets into
three families, and each family has a different Crr on every surface.
- The three wheel families actual
- Road — the default for almost every wheelset. Gravel — a handful of wheelsets Zwift classes for mixed terrain (Zwift Gravel, Roval Terra, ENVE G23, Zipp 303 XPLR, Cadex AR35, Reserve 25 GR, …). Mountain — the Zwift Mountain wheel. Which family a wheel belongs to is Zwift's own classification, not a guess.
Lower Crr = less drag = faster. Here's the full recovered table — the fastest wheel for each surface is bold:
| Surface | Road wheels | Gravel wheels | Mountain wheels |
|---|---|---|---|
| Pavement / tarmac | 0.004 | 0.008 | 0.009 |
| Brick | 0.0055 | 0.008 | 0.009 |
| Wood (boardwalk) | 0.0065 | 0.008 | 0.009 |
| Cobbles | 0.0065 | 0.008 | 0.009 |
| Snow / ice | 0.0055 | 0.006 | 0.014 |
| Gravel | 0.012 | 0.009 | 0.009 |
| Dirt | 0.016 | 0.009 | 0.010 |
| Grass | 0.025 | 0.016 | 0.014 |
The pattern is a clean trade-off:
- On tarmac, road wheels win — decisively. A road wheel's 0.004 is half a gravel wheel's 0.008, so on a paved route the gravel/mountain penalty is real and constant.
- Off-road, they flip. On dirt a gravel wheel (0.009) has almost half the rolling drag of a road wheel (0.016); on grass, road wheels (0.025) are punishing while a mountain wheel (0.014) sails. This is where the "gravel" family earns its name.
- Gravel wheels are the all-rounder. Never worse than 0.016, only a 2× tarmac penalty, and tied-best on true gravel — which is why they're the popular pick for mixed routes.
- Snow is the trap. Mountain wheels are the worst choice on snow (0.014) — the one surface where the knobbly-tyre model works against you.
So the right wheel depends on the route's surface mix. A course that's mostly dirt rewards gravel wheels enough to overcome their tarmac penalty; a mostly-paved route with one short gravel sector usually doesn't. The route and simulate pages now show each route's surface breakdown — a colour ribbon under the elevation profile, and a Grade / Surface toggle on the map — so you can see how much of a ride is off-road before you pick a bike.
actual the per-surface Crr values and the wheel-family assignments are Zwift's own, and the ride simulator applies them: pick a route or segment and each off-road sector actually slows you, with the picked wheels' tier setting the rolling resistance. The simulator also shows what every tier would cost or save on that route, so you can see when gravel or mountain wheels are worth their tarmac penalty. The plain speed calculator stays tarmac-only (a gradient sweep has no route, so no surface).
Positions & modes
- TT / aero mode actual
- Time-trial frames are a genuinely lower-drag, faster state in Zwift, and the rider is locked in the aero position (no sitting up, no draft benefit). This app identifies TT frames from Zwift's own bike classification, so picking a TT frame switches the readout to aero: TT. Note: unlike real cycling, Zwift road bikes have no user-selectable "hoods vs drops" that changes speed — hand position is cosmetic there.
- Rubberbanding / Pace Partner handicap actual
- When you ride with a Pace Partner (RoboPacer) or in a "keep-together" group, Zwift applies a hidden climb handicap so the group doesn't shatter on hills. It's a slope-ramped drag multiplier — 1.12× at flat, ramping to 6.0× at ≥10% gradient — that Zwift applies internally. It is not applied to normal solo riding. Toggle "Pace Partner group" on the main page to see it slow your climbs. Caveat: rubberbanding also has a second power-scaling handicap that isn't modeled here, so on the very steepest climbs the real slowdown is a bit larger than shown.
- Sandbagging & power caps actual
- Zwift has anti-sandbagging (multiplies a flagged rider's power by 0.7) and W/kg power caps for competitive events. These only apply when you're flagged in a race/event, so they're not part of this solo calculator — real Zwift behaviour, just out of scope here.
The charts
- Speed vs slope
- Hold your entered power constant and see the steady speed at each gradient. The classic "how fast will I go up this?" curve.
- Power vs slope
- Hold your entered speed constant and see the power needed at each gradient. On descents it clamps at 0 W (you're coasting).
- Speed vs power (flat)
- The core power→speed relationship on flat ground, swept across a watt range — good for comparing setups at a glance.
- Configs A–F
- Add multiple configs to overlay different riders/bikes on the same charts and compare.
Descents are approximate. The model is a pure force balance with no descent speed cap or coasting/braking model, so the steep-downhill end won't match in-game feel.
Actual vs estimated
| Quantity | Status | Value / note |
|---|---|---|
| Per-item aero (CdA bias) & weight | actual | Zwift's own per-item values |
| Air density ρ, rolling resistance Crr | actual | 1.226, 0.004 (tarmac) |
| Per-surface Crr (8 surfaces × 3 wheel families) | actual | Zwift's own per-surface values |
| Route surface segmentation | actual | which stretches are dirt / gravel / cobble / … |
| Per-surface Crr applied in the ride sim | actual | route & segment sim; the calculator stays tarmac |
| Equipment combination rules | actual | as Zwift combines them |
| TT flag, wheel weight offset | actual | TT class, 200 g |
| Motion accel / decel caps | actual | +15 / −10 km/h·s⁻¹ |
| Rubberbanding climb handicap | actual | 1.12× → 6.0× |
| Rider base CdA from height/weight | estimated | DuBois BSA model |
| Drivetrain efficiency | estimated | 0.975 |
| Draft percentage | estimated | you set it; the effect is real |
| Bike upgrade levels | not modeled | values are base / un-upgraded |
The equipment option lists don't print the raw grams/CdA numbers, though a determined user could still back them out of the compute endpoint — this is obscurity, not secrecy.