100% OFFLINE · OPEN-SOURCE

Structured ERG workouts.
Your trainer, your data.

Connect your smart trainer over Bluetooth, run .zwo workouts in ERG mode, and review every session. No account, no subscription.

Windows & Linux desktop · free & open-source (GPL v3)

What it is

Just your structured ERG sessions.

OpenCycling does one thing and does it well: it drives your smart trainer's target power through a structured workout, samples every second, and lets you review the result. No avatars, no virtual worlds, no monthly fee — and everything stays on your machine.

ERG mode only — no SIM / free-ride / manual resistance

Everything you need to train efficiently

And nothing you don't.

Core features

Everything an indoor session needs, on by default.

Automatic BLE scanning

Scans on launch with separate status for the trainer and the heart-rate monitor. The trainer is required to start; the HRM is optional.

.zwo workouts

Reads workouts from a folder you choose. Supports Warmup, SteadyState, IntervalsT and Cooldown blocks, with target watts computed from your FTP.

ERG control per block

Sends each block's target power every second and follows linear ramps for warmups and cooldowns. A keep-alive resends the target so the trainer never drops resistance.

FTP ramp test

A built-in ramp test that rises every minute in ERG and watches for exhaustion: when you can no longer hold the target it counts down and prompts you to stop, then estimates your new FTP from your best 1-minute power and applies it in one click.

Recording & history

Power, heart rate and cadence stored every second in a local SQLite database. Browse past sessions for stats, a power graph and zone breakdowns.

Optional features & third-party integrations

Off by default, enable what you want.

Aero position detection · optional, webcam

A webcam tells aero from upright. A live indicator shows your position during the session and your time in aero is saved with it. Runs fully offline and is off until you enable it.

Strava upload · optional, manual setup

Export sessions as TCX and push them to Strava as Virtual Rides. No shared account: you bring your own free Strava app and run a small auth proxy (about two minutes, see the setup guide).

A clean, focused desktop app

Light, fast, and out of your way.

Live session
Live session
Device connection
Connection
Workout library
Workout library
Workout detail
Workout detail
Session history
Session history
Session detail
Session detail
Settings
Settings

Works with standard BLE devices

OpenCycling speaks standard FTMS (trainers) and HRS (heart rate), so any compliant device should work. Only the hardware below has been verified.

DeviceTypeProtocolStatus
Decathlon D500Smart trainerFTMS (0x2AD2)✓ Tested
Polar (H9 / H10 / OH1…)Heart rate monitorHRS (0x2A37)✓ Tested
Other FTMS trainersSmart trainerFTMS (0x2AD2)○ Should work
Other HRS strapsHeart rate monitorHRS (0x2A37)○ Should work

Get started in minutes

Download, set your .zwo folder and FTP, connect your trainer, and pedal.

On macOS? Build it from source with pnpm tauri build.