# Cycling power speed estimator

- Human page: https://happytails.ai/en/calculators/cycling-power-speed-estimator/
- Markdown: https://happytails.ai/en/calculators/cycling-power-speed-estimator.md
- Structured JSON: https://happytails.ai/agents/en/calculators/cycling-power-speed-estimator/index.json
- Visibility: public

## Tool capabilities

| Property | Value |
| --- | --- |
| Tool ID | `cycling-power-speed-estimator` |
| Category | calculators |
| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |
| Browser execution | Automatic updates after valid input or file selection. |
| Browser processing | Browser; see tool notes for network behavior. |
| HTTP API | Not callable through HTTP. |
| Browser-agent interface | run_current_tool |

### Implementation notes

Calculated on your device with the standard steady-state drag, rolling resistance and gravity model. Speeds and powers are estimates from your inputs.

### Inputs and settings

No free-text input is required. Use the file inputs and/or settings below.

| Setting | Meaning | Control type | Default | Constraints |
| --- | --- | --- | --- | --- |
| `mode` | Calculate | select | "Speed from power" | Allowed: Speed from power, Power from speed |
| `power` | Rider power (W) | number | 200 | min=1 max=3000 step=any |
| `speedUnit` | Speed unit | select | "km/h" | Allowed: km/h, mph, m/s |
| `speed` | Road speed | number | 30 | min=0 step=any |
| `massUnit` | Mass unit | select | "kg" | Allowed: kg, lb |
| `riderMass` | Rider mass | number | 75 | min=0 step=any |
| `bikeMass` | Bike and equipment mass | number | 9 | min=0 step=any |
| `grade` | Road grade (%) | number | 0 | min=-30 max=30 step=any |
| `wind` | Headwind | number | 0 | step=any |
| `cda` | Drag area CdA (m²) | number | 0.32 | min=0 step=any |
| `crr` | Rolling resistance coefficient (Crr) | number | 0.005 | min=0.001 max=0.05 step=any |
| `efficiency` | Drivetrain efficiency (%) | number | 97 | min=50 max=100 step=any |
| `airMode` | Air density from | select | "Altitude above sea level" | Allowed: Altitude above sea level, Air density |
| `altitudeUnit` | Altitude unit | select | "m" | Allowed: m, ft |
| `altitude` | Altitude | number | 0 | step=any |
| `density` | Air density (kg/m³) | number | 1.225 | min=0 step=any |
| `distanceUnit` | Distance unit | select | "km" | Allowed: km, mi |
| `distance` | Ride distance (optional) | number | "" | min=0 step=any |

### Browser-agent workflow

1. Open the human page in a browser that supports WebMCP.
2. Discover the interface exposed by that page; use its actual schema.
3. Select files on the page first when the tool requires files.
4. Call `run_current_tool` with valid input and settings.
5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.

Calls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.

### Planning specification

Power 1 to 3,000 W, speed above 0 and up to 108 km/h, rider mass 20 to 250 kg, bike mass 3 to 100 kg, grade -30 to 30%, headwind or tailwind up to 25 m/s (90 km/h), CdA 0.1 to 1.5 m², Crr 0.001 to 0.05, drivetrain efficiency 50 to 100%, altitude -500 to 6,000 m or air density 0.5 to 1.5 kg/m³, ride distance up to 10,000 km. Calculated on your device; download a JSON report and a CSV of results.

This describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.

### Complete machine-readable capability record

```json
{
  "id": "cycling-power-speed-estimator",
  "category": "calculators",
  "built": true,
  "requirements": "Power 1 to 3,000 W, speed above 0 and up to 108 km/h, rider mass 20 to 250 kg, bike mass 3 to 100 kg, grade -30 to 30%, headwind or tailwind up to 25 m/s (90 km/h), CdA 0.1 to 1.5 m², Crr 0.001 to 0.05, drivetrain efficiency 50 to 100%, altitude -500 to 6,000 m or air density 0.5 to 1.5 kg/m³, ride distance up to 10,000 km. Calculated on your device; download a JSON report and a CSV of results.",
  "implementation": {
    "fields": [
      {
        "key": "mode",
        "label": "Calculate",
        "value": "Speed from power",
        "type": "select",
        "values": [
          "Speed from power",
          "Power from speed"
        ]
      },
      {
        "key": "power",
        "label": "Rider power (W)",
        "value": 200,
        "type": "number",
        "min": 1,
        "max": 3000,
        "step": "any",
        "help": "Power at the pedals, as a power meter shows it.",
        "showWhen": {
          "mode": [
            "Speed from power"
          ]
        }
      },
      {
        "key": "speedUnit",
        "label": "Speed unit",
        "value": "km/h",
        "type": "select",
        "values": [
          "km/h",
          "mph",
          "m/s"
        ]
      },
      {
        "key": "speed",
        "label": "Road speed",
        "value": 30,
        "type": "number",
        "min": 0,
        "step": "any",
        "showWhen": {
          "mode": [
            "Power from speed"
          ]
        }
      },
      {
        "key": "massUnit",
        "label": "Mass unit",
        "value": "kg",
        "type": "select",
        "values": [
          "kg",
          "lb"
        ]
      },
      {
        "key": "riderMass",
        "label": "Rider mass",
        "value": 75,
        "type": "number",
        "min": 0,
        "step": "any"
      },
      {
        "key": "bikeMass",
        "label": "Bike and equipment mass",
        "value": 9,
        "type": "number",
        "min": 0,
        "step": "any"
      },
      {
        "key": "grade",
        "label": "Road grade (%)",
        "value": 0,
        "type": "number",
        "min": -30,
        "max": 30,
        "step": "any",
        "help": "Rise over run. Use a negative value for a descent."
      },
      {
        "key": "wind",
        "label": "Headwind",
        "value": 0,
        "type": "number",
        "step": "any",
        "help": "Wind against you along the road. Use a negative value for a tailwind."
      },
      {
        "key": "cda",
        "label": "Drag area CdA (m²)",
        "value": 0.32,
        "type": "number",
        "min": 0,
        "step": "any",
        "help": "Drag coefficient times frontal area. 0.32 m² is an editable example for a road bike ridden on the hoods."
      },
      {
        "key": "crr",
        "label": "Rolling resistance coefficient (Crr)",
        "value": 0.005,
        "type": "number",
        "min": 0.001,
        "max": 0.05,
        "step": "any",
        "help": "0.005 is an editable example for road tyres on smooth asphalt."
      },
      {
        "key": "efficiency",
        "label": "Drivetrain efficiency (%)",
        "value": 97,
        "type": "number",
        "min": 50,
        "max": 100,
        "step": "any",
        "help": "Share of pedal power that reaches the rear wheel. 97% is an editable example for a clean chain."
      },
      {
        "key": "airMode",
        "label": "Air density from",
        "value": "Altitude above sea level",
        "type": "select",
        "values": [
          "Altitude above sea level",
          "Air density"
        ]
      },
      {
        "key": "altitudeUnit",
        "label": "Altitude unit",
        "value": "m",
        "type": "select",
        "values": [
          "m",
          "ft"
        ],
        "showWhen": {
          "airMode": [
            "Altitude above sea level"
          ]
        }
      },
      {
        "key": "altitude",
        "label": "Altitude",
        "value": 0,
        "type": "number",
        "step": "any",
        "showWhen": {
          "airMode": [
            "Altitude above sea level"
          ]
        }
      },
      {
        "key": "density",
        "label": "Air density (kg/m³)",
        "value": 1.225,
        "type": "number",
        "min": 0,
        "step": "any",
        "showWhen": {
          "airMode": [
            "Air density"
          ]
        }
      },
      {
        "key": "distanceUnit",
        "label": "Distance unit",
        "value": "km",
        "type": "select",
        "values": [
          "km",
          "mi"
        ]
      },
      {
        "key": "distance",
        "label": "Ride distance (optional)",
        "value": "",
        "type": "number",
        "min": 0,
        "step": "any",
        "help": "Leave empty to skip time and work for a distance."
      }
    ],
    "registrationFamily": "vehicle-and-cycling",
    "input": false,
    "live": true,
    "presentation": "metrics",
    "note": "Calculated on your device with the standard steady-state drag, rolling resistance and gravity model. Speeds and powers are estimates from your inputs.",
    "experience": {
      "automatic": true,
      "single": false,
      "inputMaxLength": 1000000,
      "inputMode": "text",
      "label": "Your text",
      "placeholder": "Type or paste your input…",
      "help": "Change the input or settings to update your result. Results update as you type. Up to 1,000,000 characters.",
      "action": null
    },
    "mode": "automatic",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}
```

## Page guide

Estimate road cycling speed from rider power, or the power a speed needs, from drag, rolling resistance, gradient and wind. See how much power each resistance takes.

How can we improve this tool?

Report a problem or share an idea.

Please leave out private information. Your message and the tool name go to our team via PostHog.

### How to use Cycling power speed estimator

1. Choose speed from power or power from speed, and enter the power or the speed.
2. Enter rider and bike mass, road grade and headwind.
3. Adjust drag area, rolling resistance, drivetrain efficiency and altitude or air density if you know them.
4. Add a ride distance for time and work, then review the breakdown and download the report.

## Useful next steps

- [Cycling cadence calculator](https://happytails.ai/en/calculators/cycling-cadence-calculator/) ([Markdown](https://happytails.ai/en/calculators/cycling-cadence-calculator.md))

- [Bicycle gear calculator](https://happytails.ai/en/calculators/bicycle-gear-calculator/) ([Markdown](https://happytails.ai/en/calculators/bicycle-gear-calculator.md))

- [Pace calculator](https://happytails.ai/en/calculators/pace-calculator/) ([Markdown](https://happytails.ai/en/calculators/pace-calculator.md))

## The model

Steady road cycling power balances air drag, rolling resistance and gravity: rider power × drivetrain efficiency = (m g sin θ + Crr m g cos θ + ½ ρ CdA (v + w) |v + w|) × v, where θ = arctan(grade) and w is the headwind, so a tailwind faster than the rider pushes. This is the model validated by Martin and others (Journal of Applied Biomechanics, 1998) and written out by Danek, Slawinski and Stanoev (arXiv 2103.09806, March 2021), both checked 16 October 2026. g is 9.80665 m/s² (NIST CODATA 2022).

### Assumptions

Speed is steady on a straight road, so acceleration, wheel inertia and bearing losses are left out. Air density from altitude follows ρ = 1.225 × exp(−0.0001186 × altitude in m), from the same paper. CdA, Crr and drivetrain efficiency are your inputs: 0.32 m², 0.005 and 97% are editable examples. With those, 200 W carries a 75 kg rider on a 9 kg bike at about 33.4 km/h on flat road in still air. Speed from power is solved by bisection because power rises steadily with speed.

### Limits

Power 1 to 3,000 W, speed up to 108 km/h, rider 20 to 250 kg, bike 3 to 100 kg, grade -30 to 30%, wind up to 90 km/h either way, CdA 0.1 to 1.5 m², Crr 0.001 to 0.05 and altitude -500 to 6,000 m. Results are physics estimates; they say nothing about safe speeds or what a rider can sustain.
