{
  "title": "Cycling power speed estimator",
  "human_url": "https://happytails.ai/en/calculators/cycling-power-speed-estimator/",
  "agent_url": "https://happytails.ai/agents/en/calculators/cycling-power-speed-estimator/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/calculators/cycling-power-speed-estimator.md",
  "content": "Cycling power speed estimator\nEstimate 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.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use Cycling power speed estimator\nChoose speed from power or power from speed, and enter the power or the speed.\nEnter rider and bike mass, road grade and headwind.\nAdjust drag area, rolling resistance, drivetrain efficiency and altitude or air density if you know them.\nAdd a ride distance for time and work, then review the breakdown and download the report.\nUseful next steps\nCycling cadence calculator\nBicycle gear calculator\nPace calculator\nThe model\nSteady 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).\nAssumptions\nSpeed 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.\nLimits\nPower 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.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "Cycling cadence calculator",
      "url": "https://happytails.ai/en/calculators/cycling-cadence-calculator/"
    },
    {
      "name": "Bicycle gear calculator",
      "url": "https://happytails.ai/en/calculators/bicycle-gear-calculator/"
    },
    {
      "name": "Pace calculator",
      "url": "https://happytails.ai/en/calculators/pace-calculator/"
    }
  ],
  "tool": {
    "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"
    }
  },
  "markdown": "# Cycling power speed estimator\n\n- Human page: https://happytails.ai/en/calculators/cycling-power-speed-estimator/\n- Markdown: https://happytails.ai/en/calculators/cycling-power-speed-estimator.md\n- Structured JSON: https://happytails.ai/agents/en/calculators/cycling-power-speed-estimator/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `cycling-power-speed-estimator` |\n| Category | calculators |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Automatic updates after valid input or file selection. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nCalculated on your device with the standard steady-state drag, rolling resistance and gravity model. Speeds and powers are estimates from your inputs.\n\n### Inputs and settings\n\nNo free-text input is required. Use the file inputs and/or settings below.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `mode` | Calculate | select | \"Speed from power\" | Allowed: Speed from power, Power from speed |\n| `power` | Rider power (W) | number | 200 | min=1 max=3000 step=any |\n| `speedUnit` | Speed unit | select | \"km/h\" | Allowed: km/h, mph, m/s |\n| `speed` | Road speed | number | 30 | min=0 step=any |\n| `massUnit` | Mass unit | select | \"kg\" | Allowed: kg, lb |\n| `riderMass` | Rider mass | number | 75 | min=0 step=any |\n| `bikeMass` | Bike and equipment mass | number | 9 | min=0 step=any |\n| `grade` | Road grade (%) | number | 0 | min=-30 max=30 step=any |\n| `wind` | Headwind | number | 0 | step=any |\n| `cda` | Drag area CdA (m²) | number | 0.32 | min=0 step=any |\n| `crr` | Rolling resistance coefficient (Crr) | number | 0.005 | min=0.001 max=0.05 step=any |\n| `efficiency` | Drivetrain efficiency (%) | number | 97 | min=50 max=100 step=any |\n| `airMode` | Air density from | select | \"Altitude above sea level\" | Allowed: Altitude above sea level, Air density |\n| `altitudeUnit` | Altitude unit | select | \"m\" | Allowed: m, ft |\n| `altitude` | Altitude | number | 0 | step=any |\n| `density` | Air density (kg/m³) | number | 1.225 | min=0 step=any |\n| `distanceUnit` | Distance unit | select | \"km\" | Allowed: km, mi |\n| `distance` | Ride distance (optional) | number | \"\" | min=0 step=any |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nPower 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.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"cycling-power-speed-estimator\",\n  \"category\": \"calculators\",\n  \"built\": true,\n  \"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.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"mode\",\n        \"label\": \"Calculate\",\n        \"value\": \"Speed from power\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Speed from power\",\n          \"Power from speed\"\n        ]\n      },\n      {\n        \"key\": \"power\",\n        \"label\": \"Rider power (W)\",\n        \"value\": 200,\n        \"type\": \"number\",\n        \"min\": 1,\n        \"max\": 3000,\n        \"step\": \"any\",\n        \"help\": \"Power at the pedals, as a power meter shows it.\",\n        \"showWhen\": {\n          \"mode\": [\n            \"Speed from power\"\n          ]\n        }\n      },\n      {\n        \"key\": \"speedUnit\",\n        \"label\": \"Speed unit\",\n        \"value\": \"km/h\",\n        \"type\": \"select\",\n        \"values\": [\n          \"km/h\",\n          \"mph\",\n          \"m/s\"\n        ]\n      },\n      {\n        \"key\": \"speed\",\n        \"label\": \"Road speed\",\n        \"value\": 30,\n        \"type\": \"number\",\n        \"min\": 0,\n        \"step\": \"any\",\n        \"showWhen\": {\n          \"mode\": [\n            \"Power from speed\"\n          ]\n        }\n      },\n      {\n        \"key\": \"massUnit\",\n        \"label\": \"Mass unit\",\n        \"value\": \"kg\",\n        \"type\": \"select\",\n        \"values\": [\n          \"kg\",\n          \"lb\"\n        ]\n      },\n      {\n        \"key\": \"riderMass\",\n        \"label\": \"Rider mass\",\n        \"value\": 75,\n        \"type\": \"number\",\n        \"min\": 0,\n        \"step\": \"any\"\n      },\n      {\n        \"key\": \"bikeMass\",\n        \"label\": \"Bike and equipment mass\",\n        \"value\": 9,\n        \"type\": \"number\",\n        \"min\": 0,\n        \"step\": \"any\"\n      },\n      {\n        \"key\": \"grade\",\n        \"label\": \"Road grade (%)\",\n        \"value\": 0,\n        \"type\": \"number\",\n        \"min\": -30,\n        \"max\": 30,\n        \"step\": \"any\",\n        \"help\": \"Rise over run. Use a negative value for a descent.\"\n      },\n      {\n        \"key\": \"wind\",\n        \"label\": \"Headwind\",\n        \"value\": 0,\n        \"type\": \"number\",\n        \"step\": \"any\",\n        \"help\": \"Wind against you along the road. Use a negative value for a tailwind.\"\n      },\n      {\n        \"key\": \"cda\",\n        \"label\": \"Drag area CdA (m²)\",\n        \"value\": 0.32,\n        \"type\": \"number\",\n        \"min\": 0,\n        \"step\": \"any\",\n        \"help\": \"Drag coefficient times frontal area. 0.32 m² is an editable example for a road bike ridden on the hoods.\"\n      },\n      {\n        \"key\": \"crr\",\n        \"label\": \"Rolling resistance coefficient (Crr)\",\n        \"value\": 0.005,\n        \"type\": \"number\",\n        \"min\": 0.001,\n        \"max\": 0.05,\n        \"step\": \"any\",\n        \"help\": \"0.005 is an editable example for road tyres on smooth asphalt.\"\n      },\n      {\n        \"key\": \"efficiency\",\n        \"label\": \"Drivetrain efficiency (%)\",\n        \"value\": 97,\n        \"type\": \"number\",\n        \"min\": 50,\n        \"max\": 100,\n        \"step\": \"any\",\n        \"help\": \"Share of pedal power that reaches the rear wheel. 97% is an editable example for a clean chain.\"\n      },\n      {\n        \"key\": \"airMode\",\n        \"label\": \"Air density from\",\n        \"value\": \"Altitude above sea level\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Altitude above sea level\",\n          \"Air density\"\n        ]\n      },\n      {\n        \"key\": \"altitudeUnit\",\n        \"label\": \"Altitude unit\",\n        \"value\": \"m\",\n        \"type\": \"select\",\n        \"values\": [\n          \"m\",\n          \"ft\"\n        ],\n        \"showWhen\": {\n          \"airMode\": [\n            \"Altitude above sea level\"\n          ]\n        }\n      },\n      {\n        \"key\": \"altitude\",\n        \"label\": \"Altitude\",\n        \"value\": 0,\n        \"type\": \"number\",\n        \"step\": \"any\",\n        \"showWhen\": {\n          \"airMode\": [\n            \"Altitude above sea level\"\n          ]\n        }\n      },\n      {\n        \"key\": \"density\",\n        \"label\": \"Air density (kg/m³)\",\n        \"value\": 1.225,\n        \"type\": \"number\",\n        \"min\": 0,\n        \"step\": \"any\",\n        \"showWhen\": {\n          \"airMode\": [\n            \"Air density\"\n          ]\n        }\n      },\n      {\n        \"key\": \"distanceUnit\",\n        \"label\": \"Distance unit\",\n        \"value\": \"km\",\n        \"type\": \"select\",\n        \"values\": [\n          \"km\",\n          \"mi\"\n        ]\n      },\n      {\n        \"key\": \"distance\",\n        \"label\": \"Ride distance (optional)\",\n        \"value\": \"\",\n        \"type\": \"number\",\n        \"min\": 0,\n        \"step\": \"any\",\n        \"help\": \"Leave empty to skip time and work for a distance.\"\n      }\n    ],\n    \"registrationFamily\": \"vehicle-and-cycling\",\n    \"input\": false,\n    \"live\": true,\n    \"presentation\": \"metrics\",\n    \"note\": \"Calculated on your device with the standard steady-state drag, rolling resistance and gravity model. Speeds and powers are estimates from your inputs.\",\n    \"experience\": {\n      \"automatic\": true,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Your text\",\n      \"placeholder\": \"Type or paste your input…\",\n      \"help\": \"Change the input or settings to update your result. Results update as you type. Up to 1,000,000 characters.\",\n      \"action\": null\n    },\n    \"mode\": \"automatic\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nEstimate 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.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use Cycling power speed estimator\n\n1. Choose speed from power or power from speed, and enter the power or the speed.\n2. Enter rider and bike mass, road grade and headwind.\n3. Adjust drag area, rolling resistance, drivetrain efficiency and altitude or air density if you know them.\n4. Add a ride distance for time and work, then review the breakdown and download the report.\n\n## Useful next steps\n\n- [Cycling cadence calculator](https://happytails.ai/en/calculators/cycling-cadence-calculator/) ([Markdown](https://happytails.ai/en/calculators/cycling-cadence-calculator.md))\n\n- [Bicycle gear calculator](https://happytails.ai/en/calculators/bicycle-gear-calculator/) ([Markdown](https://happytails.ai/en/calculators/bicycle-gear-calculator.md))\n\n- [Pace calculator](https://happytails.ai/en/calculators/pace-calculator/) ([Markdown](https://happytails.ai/en/calculators/pace-calculator.md))\n\n## The model\n\nSteady 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).\n\n### Assumptions\n\nSpeed 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.\n\n### Limits\n\nPower 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.\n"
}