Virtual shifting for Wahoo KICKR trainers — even in riding apps that do not offer it.
Virtual Gears puts an iPhone between your trainer and the app you ride with. Your riding app still controls the route and its hills; Virtual Gears adds the gears. Because it appears as a normal FTMS trainer, the riding app does not need to know anything about virtual shifting.
Leave the bike in a quiet, straight chain line and shift virtually instead. Nothing moves on the bike, so shifting is silent and cannot drop the chain.
Because the bike stays in that one gear all ride, Virtual Gears asks you once which gear it is. That ratio is what every virtual gear is scaled from, so the app recommends the quietest gear that works and you confirm it in a tap.
Wahoo brought native virtual shifting to newer trainers but has said the KICKR V5 will not receive it. Native shifting also depends on support inside the riding app. Virtual Gears fills both gaps: it gives a KICKR gears and makes them available to ordinary FTMS riding apps without changing their route data.
Read Wahoo's compatibility statement
| Requirement | |
|---|---|
| iPhone | iOS 17 or later |
| Trainer | A compatible direct-drive Wahoo KICKR |
| Riding app | An app that can connect to an FTMS trainer |
| Shifting | Large iPhone buttons; optional original Zwift Click |
| Fan | Optional Wahoo KICKR HEADWIND |
Virtual Gears was built and physically tested with a KICKR V5. Other direct-drive KICKR models are expected to work but have not yet been physically tested. The KICKR SNAP, KICKR BIKE and trainers from other brands are not supported.
On the riding-app side, FulGaz on macOS and Windows, plus RealVelo and MyWhoosh on Windows, have been ridden end to end. Other FTMS riding apps are expected to work but have not been tested.
Detailed compatibility information
- Wake the KICKR by turning the pedals.
- Open Virtual Gears on the iPhone. It finds the KICKR, connects and makes it available to your riding app.
- Tell the required first-run setup what is physically on the bike: chainrings, and either a cassette or a Zwift Cog/other single sprocket. Your first ride uses Standard 24 virtual gears automatically.
- Move the chain to the quiet, reachable gear Virtual Gears recommends and confirm it.
- In your riding app, connect to the trainer named Virtual Gears. Some apps may show the iPhone's name instead.
- Tap Start Shifting, then shift with the large Easier and Harder buttons.
Virtual Gears is a transparent trainer connection as soon as the KICKR is ready. The physical fact it cannot guess is the gear the bike is parked in, because a wrong guess would quietly make every gear wrong. Start Shifting engages the gears; Stop Shifting removes them without disconnecting or stopping the ride in your riding app. If it finds more than one trainer, it asks you to choose yours by name.
The iPhone screen stays awake while the trainer proxy is available. This keeps Virtual Gears discoverable to riding apps on Windows and other computers before they connect.
The same rule applies to optional equipment: one Click or Headwind is used automatically; if several are found, Virtual Gears asks instead of guessing.
No trainer nearby? Tap Try Demo on the looking-for-trainer screen. Demo Mode is clearly marked as simulated and lets you try the ride controls, gear ladder, gear choices, Settings and example accessory controls. It does not scan, connect, advertise or send Bluetooth commands, and it does not change saved equipment. Demo Mode shows how the app works; it does not prove compatibility with physical hardware.
- Ready-made virtual gears, in ladders of 24 with extra range for climbing.
- App-independent shifting for FTMS riding apps that have no virtual gears of their own.
- Real groupsets, from Shimano, SRAM and Campagnolo, or your own chainrings and cassette if your bike is not listed.
- Gears that shift the way an electronic groupset shifts, one cog at a time with the front change folded in, so there are no dead shifts and no invented gaps.
- On-phone shifting with large controls in portrait and landscape.
- Accessible ride controls with VoiceOver gear feedback, adjustable gear control and support for larger text.
- Persistent equipment statuses that keep the trainer, Click, fan and riding app visible independently, including while the riding app is waiting.
- Automatic optional-equipment discovery for an original Zwift Click and Wahoo KICKR HEADWIND.
- Optional Zwift Click shifting from the handlebar.
- Headwind control with Automatic, Off, 25%, 50%, 75% and 100% settings.
- Mid-ride changes to the trainer, gears, Click or Headwind.
- Ride continuity when you answer a call or briefly switch apps.
- A Bluetooth-free Demo Mode for exploring the app without equipment.
Ride and shift |
Control the Headwind |
Virtual Gears acts as a Bluetooth FTMS trainer for the riding app and as a controller for the real KICKR. It passes the riding app's commands and trainer data through, then applies the selected gear by changing the wheel circumference configured on the KICKR.
Every gear change waits for confirmation from the trainer.
How the gears work · Safety details · Accessibility
- ERG workouts are not supported. ERG mode controls target power, while Virtual Gears controls how hard a gear feels.
- The riding app cannot display the selected gear. Bluetooth FTMS has no message for reporting it, so the gear is shown on the iPhone.
- This is not Zwift's native virtual shifting. It works independently of the riding app. Virtual Gears supplies and displays the gears itself.
- Virtual Gears cannot read the trainer's current wheel circumference. It uses the optional Wheel circumference saved in Settings, or the 2105 mm (700×25 road) default, unless the riding app supplies another size. Common wheel-size shortcuts and direct millimetre entry are available. If you use a custom value in the Wahoo app, enter the same value in Virtual Gears before shifting.
- A riding app on Windows may not reconnect on its own after a Bluetooth drop. If the wireless link between your phone and the computer times out mid-ride, some Windows riding apps do not scan for the phone again by themselves; you may need to restart the riding app to see Virtual Gears once more. This is the riding app's own reconnect behaviour, not something Virtual Gears controls.
Questions go in Q&A discussions; bugs go in Issues. The support page lists the common problems and their answers first.
Virtual Gears is not affiliated with Wahoo Fitness or Zwift. Wahoo, KICKR, HEADWIND, Zwift and Zwift Click are trademarks of their respective owners.
The FulGaz-on-Windows compatibility investigation was informed by the outward Bluetooth behavior of QZ (qdomyos-zwift), an independent GPL-3.0 project. Virtual Gears implements the standard Bluetooth services independently; no QZ source code is copied or bundled.
Copyright © 2026 Stefan Broenner. All rights reserved.
The source is public so it can be read and checked, but it is not open source. Redistribution and publishing derived applications are not permitted. See LICENSE for the exact terms.
