Loading myWindsock...
Course or Activity
How to begin
Use the map to draw your route, or select a pre-defined course or activity from the list below.
Departure Date & Time
Day
Hour
0 3 6 9 12 15 18 21 24
Performance Settings
Custom Options
Custom Options
System 80 kg · Crr 0.005 · 97% efficiency
Physiology CP 250 W · VO2 300 W · W' 20 kJ
Custom Options
Other 0 kph start on · Junction luck 50%
Extensions

Customise with extensions. Extensions allow you to add new features and functionality to the platform. Add from the library or create your own.

Weather Override

Replace selected forecast values across the full route.

N E S W
Extensions

Customise with extensions. Extensions allow you to add new features and functionality to the platform. Activate community extensions from the library, or use Premium to create your own.

|
Relative Wind Direction
Tailwind Headwind
Untitled Course
·
--:--
--
·
--:--
| |
|
--:--:--

MyWindsock Prediction Moving Time

Distance
52:33
Elevation
Weather
--:--:--
Your time as we add each model layer.

Welcome back

What are we riding today?

Customise with your own Segments.
00:00:00 / 0

Stored settings

Settings captured with this result.

Timeline Settings

Timeline tracks help you identify and manage segments along the route. Choose which tracks and how they display.

Distance spaces the timeline by route distance. Elapsed starts at 0. Local time shows the actual clock time.

Context Chart

Segmentations

Edit Map Profile

Name this profile and choose its saved map style and overlays.

Shown in the map profile switcher.

Map


Topology Friction


Wind

Wind display
Wind icons show speed in your chosen unit and follow the reported wind bearing.
Customise
Wind colour Circle fill and animated wind.
Wind colour mode
Icon line and text colour Speed text, circle outline, stick and barbs.
Icon colour
100%

Markers

Customise
32px
10px

Profile Defaults

Each activity has one default. Enable it here to replace that activity's current default with this profile.

Topology Friction

Local visual settings for this device.

7px
1 px
60%
2.0

Connect Strava

Bring your Strava rides, routes and favourite segments into myWindsock.

What you'll get

Access your activities
Quickly open recent rides for wind and performance analysis.
Use your routes
Analyse planned routes before you ride.
Find starred segments
Quickly load the segments you care about most.
Add stats to Strava
Optionally add myWindsock insights to your activity descriptions.

You'll be redirected to Strava to approve access. You can disconnect at any time.

Strava settings

myWindsock insights for your activities

Activity descriptions

Included metrics

Notifications

Connection

Connected

Connected apps

Manage services connected to your myWindsock account.

Ride with GPS
Checking connection...
Reset password
K
Komoot
Checking connection...

Ride with GPS

Connect or update your Ride with GPS login.

Customise Group Metrics

Choose which metrics display.

Customise Group Metrics

Choose which metrics display.

Available Data

Add Elements to Data Panel

Format your data how you like it.

AI Compose Panel

Describe the data panel you want to create.

Segment settings

Customise segment parameters.

System
Power (W)
CdA (m²)

Add marker to

Choose each route occurrence this marker should apply to.

Ride Markers and Events

Add info or stops to the plan.

Timeline position
Distance
-
Time
-
Visibility

Load an existing plan?

We have found these plans, select to continue editing an existing plan. Or create a new plan.

Save new plan

Do you want to save this ride plan?

About the planner

Return to this plan at a later date, save to your planner.

Group plan changed

This group plan has updates since you made your editable copy. Choose any changes to bring into your version.

Edit group plan?

Should your changes apply to the group?

Create planner group

Share a planner with riders you train, coach or organise with.

Share group

Anyone with this link can view the group planner. Logged-in riders can join the group from the link.

Share via

Private group plan

This plan is from a private group. You will need to be invited to the group to view this plan.

Join planner group?

Join this group to keep it in your planner list.

Group members

Editors can add, update and remove rides in this group planner.

Loading members...

Timeline chart settings

Customise timeline chart data.

Chart settings

Customise chart data.

Edit preset

Rename this preset or remove it from your saved presets.

Performance Suggestions Settings

Control ride-history warnings for the selected performance profile.

Sign in

Save forecasts, revisit routes and keep your planning work in one place.

Create your free account

Start designing routes, connecting your services, and optimising your cycling analysis.

Plan faster rides with wind, CdA and power modelling

Unlimited helps you understand how weather, position and pacing affect your ride before you set off — and what cost you time afterwards.

BikeRadar
Top Apps 2026
By BikeRadar
GCN Tech
Contributor
As featured with GCN Tech
Favourite reasons to upgrade
We asked our customers what features they value most, and these were the top answers.
Plan rides and races around wind and weather
Use forecasts, route conditions and power targets to decide when and how to ride.
≈43% of customers aligned with this reason
Understand and improve your aerodynamics
Measure and analyse CdA to understand what helps you ride faster.
≈35% of customers aligned with this reason
Learn from every ride and improve performance
Use ride analysis, reports, power, pacing and segment data to find practical improvements.
≈33% of customers aligned with this reason
Loading price...
No commitment, cancel anytime.

Thanks for upgrading

PayPal is confirming your subscription. What is the first thing you are excited to try or use more of?

A sentence or two is perfect. Your words help decide what gets improved next.

Unlock Weather Trends

Premium turns your ride history into weather intelligence, so you can see how wind, temperature, rain and air density shape your performance over time.

Track changing conditions

Compare weather trends across weeks, months and seasons from your recorded activities.

Connect weather to performance

Use power duration and Power vs CdA views to understand when you are holding power and aero position well.

Find your weather outliers

Spot the rides with the toughest headwinds, wettest conditions and biggest air penalty.

Weather Trends

Aggregated weather from your recorded activities over time.

Loading weather trends...

Wind Speed

Performance

Processing queue

Activities waiting to have their performance data recomputed.

Current demand Low
Loading queue...

Make Surface your default?

Open myWindsock in Surface by default for the newer map, route planning and cycling-specific wind modelling experience.

Keep Surface as your default experience?

Choosing No will switch you back to the Classic myWindsock experience, which is still available. You can always switch back to Surface later.

Edit planned ride

Update the ride details or remove it from your planner.

Repeat settings

Choose how this planned ride repeats.

Edit profile

Update your personal details below.

Units and Preferences

Manage measurement units, road matching, and data tuning.

Edit course details

Update the course name and description, or delete it permanently.

Extension developer guide

Start with an idea, then go as deep into the code as you want.

You do not need to be a programmer

Use Vibe Code to describe what you want in ordinary language. The editor lets you understand, adjust and test the result. Experienced developers can work directly in both files.

1. An extension has two files

extension.lua

Optional calculation and simulation logic. It reads model values, can publish results, and can change supported model inputs.

meta.json

The name, description, applicable modelling modes, user-adjustable parameters and declarative UI components.

A UI-only extension needs no calculation. Its Lua file can contain one comment while the UI binds directly to an existing stream.

2. A small working example

This publishes a Yes/No climbing status using an adjustable threshold.

extension.lua
export("guideClimbing", "status", "", "Climbing")

local threshold = tonumber(extensionParameters.climbThreshold) or 0.03
local validSlope = type(slope) == "number"
    and slope == slope
    and slope > -math.huge
    and slope < math.huge

guideClimbing = validSlope and slope >= threshold
meta.json
{
  "schemaVersion": 3,
  "name": "Climbing status",
  "description": "Shows when the route is climbing.",
  "modes": {
    "analysis": true,
    "prediction": true
  },
  "parameters": [{
    "key": "climbThreshold",
    "label": "Climb threshold",
    "description": "Decimal gradient; 0.03 means 3%.",
    "type": "number",
    "defaultValue": 0.03,
    "min": 0, "max": 0.3, "step": 0.005,
    "unit": "", "unitGroup": "",
    "refreshRequired": true,
    "options": []
  }],
  "ui": { "components": [] }
}

modes.analysis and modes.prediction state where the extension is relevant. Set either flag to false to keep its Lua and UI out of that mode. Missing or non-boolean flags default to true, so older extensions remain available in both modes.

Important: slope is decimal rise/run. 0.05 means 5%; 5 means 500%.

3. Add presentation without JavaScript

ui.components describes presentation using route streams, parameters or genuine Lua exports.

pointA marker or map label.
rangeA route section, overlay, route style or timeline swimlane.
mapLineA styled map line using coordinates from a stream.
chartOverlayA suggested series, reference line or value band.
widgetA suggested metric, status, progress display or table.
alertA notice or recommendation triggered by route data.
  • Use an existing stream directly when it already contains the value.
  • For markers, content.label is visible on the map and timeline; content.description appears in details.
  • Map lines accept a coordinate-pair stream through source.geometry, or separate numeric source.latitude and source.longitude bindings.
  • Chart and Data Panel items are suggestions which the user chooses to apply. They do not silently replace formatting.
  • Bindings use canonical stored values. A unit label never changes a number's scale.
Common streams and user units

Exact keys include distanceM, utcTimeSeconds, altitudeM, speedMs, powerWatts, slope, temperatureC, windSpeedMs, wPrimeBal and yaw. Map-line geometry may also bind to the decorator-runtime stream latlng_offset, which follows the displayed offset route and falls back to the original route when no offset is active. Do not invent stream names.

Templates can use selected units, for example {{occurrence.value|unit:distance}}. Groups are distance, altitude, speed, windSpeed and temperature.

Map-line decorator example

This metadata fragment describes presentation only. It follows the decorator-runtime latlng_offset coordinate stream and colours each segment from a numeric braking-severity stream; it does not define or request an extension which calculates braking severity.

{
  "id": "brakingLine",
  "type": "mapLine",
  "variant": "polyline",
  "source": {
    "mode": "binding",
    "geometry": { "source": "stream", "key": "latlng_offset" }
  },
  "appearance": {
    "color": "#22c55e",
    "colorBy": { "source": "stream", "key": "brakingSeverity" },
    "colorScale": [
      { "value": 0, "color": "#22c55e" },
      { "value": 0.5, "color": "#f59e0b" },
      { "value": 1, "color": "#7f1d1d" }
    ],
    "opacity": 0.9,
    "weight": 5,
    "lineStyle": "solid"
  },
  "placements": [{ "surface": "map", "mode": "line" }],
  "limits": { "maxPoints": 10000 }
}

source.geometry values may be [latitude, longitude] pairs or objects with lat and lng. Invalid points create a gap instead of joining unrelated positions. appearance.color is the fallback and fixed colour. When colorBy and colorScale are supplied, scale colours are linearly interpolated and applied per segment. Values outside the scale use its nearest end colour. Styling also supports opacity from 0 to 1, weight from 1 to 24, and lineStyle values solid, dashed or dotted.

4. Understand when Lua runs

The combined extension code runs before each route point is solved, often thousands of times per pass.

Current route inputs

distanceM, altitudeM, slope and distanceChange describe the point about to be solved.

Previous solved state

elapsedS, stepS, speedMs, airSpeedMs, temperatureC, humidity, precipitationProbability and precipitationIntensity come from the previous state. Current-point speed is not yet available.

An extension may calculate its own theoretical or estimated current-point value from the available inputs. Keep the calculation lightweight and bounded, explain important assumptions, and do not present the estimate as the main solver's actual current-point result.

routeContext provides bounded, static terrain and major-corner summaries calculated before modelling. Use routeIdx, currentTerrainSegmentNumber, nextCornerNumber and distanceToNextCornerM for efficient per-point access. Route indexes are zero-based, context arrays are one-based Lua arrays, and each endIdxExclusive is the first point outside its range. A corner remains next at its apex and advances on the following point; a corner number of 0 and distance of -1 mean none remains.

Each analysis or prediction starts clean. Globals persist between points during that pass; top-level local values are recreated every call. Prefix persistent globals because active extensions share the container.

5. Read, change and export values

Read supplied values

Examples include slope, power, cda, massKg, airDensity, criticalPower and wPrimeBal.

Change supported inputs

The model reads back power, cda, massKg, drivetrainEfficiency, crr, brakingForceN, wPrime, wPrimeTauMin, wPrimeTauRange and wPrimeTauSensitivity. Leave values unchanged outside the intended condition.

Export a new result

Declare it first with export(name, base, unit, displayLabel), then assign a finite number or boolean every call. The base is a UI group or category, never the source word stream.

6. Parameters and units

  • Parameters can be number, boolean or select.
  • Read them through extensionParameters.yourKey with a fallback matching the metadata default.
  • Use refreshRequired: true when a change reruns Lua or the model; use false only for presentation-only settings.
  • User-unit conversion expects canonical metres, metres per second or Celsius. Custom units use an empty unitGroup and remain labels only.

7. Keep hot-loop code safe and fast

  • Keep normal work constant-time.
  • Avoid growing arrays and route-length loops.
  • Guard missing values, division and invalid maths.
  • Give necessary loops a small fixed bound.
  • Never use a top-level return; it skips later extensions.
  • No external files, I/O or operating-system access.
  • Reuse supplied results, but use lightweight custom physics when the extension genuinely needs a theoretical value.
  • Check syntax before closing.

Before you finish

  1. Check every parameter and export has a purpose.
  2. Test active and inactive paths, zero values and the first route point.
  3. Confirm units and timing describe the value honestly.
  4. Close fullscreen to save the revision and refresh the model.

New Route

Choose how you want to start.

Load Data

Export Route

Send to your device or download locally

Download Course

Share

Choose what to share, then pick a platform

Share via

Extension Library

Choose a collection

Panel Library

New extension

Describe what you want, or start with a blank Lua editor.

Clarify extension

Edit extension

Update the name and description shown in the app.

Make revision

Describe how you want AI to change this extension. The result will be saved as a new revision.

Untitled extension

Extension revisions

Review saved versions or open their action menu.

Untitled extension

Revision code


            

Update active data panel?

This extension suggests data for your active panel. Would you like DataPanel composer to add it while preserving the useful sections already there?

Generated extension

Course monitors

Loading active monitors…

Loading monitors…

Report an issue

Tell us what went wrong. The current page is included automatically.

Please avoid sensitive information such as passwords or payment details.

Map Appearance

Adjust the base map colours and visibility.

50%
95%
85%
90%