Now built into the Stages SB200, the first hardware with OpenBikeControl in its firmware.Announcement

OpenBikeControl is an open protocol for controlling cycling trainer apps.

It defines how shifters, buttons, brake levers and other controllers report input to a training app, over Bluetooth Low Energy or the local network. The specification is published on GitHub, free to implement, and stewarded by OpenBikeControl UG.

Type
Open protocol specification
License
Free to implement, no fees
Transports
BLE GATT · mDNS + TCP
Message format
One binary format on both transports
Steward
OpenBikeControl UG
Reference implementation
BikeControl
Revision
2026-10

Protocol

A controller reports every press, release and analog change as a short binary message. Each control maps to a standard button ID, so any app that implements the protocol understands any controller that does.

Fig. 1 — Standard button IDs on a drop-bar cockpit. Every balloon is a standard button ID. Select one to see the packet it sends. Swipe the drawing sideways to see all parts.←→ step through parts

Parts list

Button IDs on this cockpit
ItemIDFunctionPartInput

Packet

Button State message

Sent as a notification on the Button State characteristic over BLE, or written to the TCP socket after mDNS discovery. The bytes are the same either way.

1.1Transports

A controller exposes OpenBikeControl over Bluetooth Low Energy, the local network, or both. Apps use whichever they can reach. The message format is identical on both.

BLE

One GATT service. Apps subscribe to button state notifications and may write haptic feedback and app information.

Service UUID
d273f680-d548-419d-b9d1-fa0472345229
BLE specification

mDNS & TCP

The device advertises itself on the local network and apps connect over TCP, Direct Connect-style. Suited to Wi‑Fi equipped hardware.

Service type
_openbikecontrol._tcp.local.
mDNS & TCP specification

1.2Button state message

Every press, release or analog change is reported as a button state message. The first byte identifies the message; each control then contributes a button ID followed by its state.

Byte layout of the button state message: byte 0 is message type 0x01, byte 1 is the button ID, byte 2 is the state, optionally followed by further ID and state pairs.Byte 0Byte 1Byte 2Byte 3 …0x01buttonIdstatebuttonId, state …Message typeStandard button IDButton stateFurther controls (optional)State byte0x000x010x020x650xC90xFFreleasedpressed1%100%200%analog
Fig. 2 — Button state message. Same bytes over BLE notifications and TCP. Swipe the figure sideways to see all bytes.Example [0x01, 0x01, 0x01] = Shift Up pressed
Note

Analog inputs such as the brake (0x1A) use the state byte as a strength value. 0x02 is 1%, 0x65 is 100% and 0xC9 is 200%. 0x00 still means released.

1.3Standard button IDs

IDs are grouped by function. A controller sends the ID that matches what the control does, not where it sits; the app decides what the action means.

RangeGroupExamples
0x01–0x0FGear shiftingShift Up, Shift Down, Gear Set, Chainring Set, Cassette Set
0x10–0x1FNavigationUp, Down, Select, Back, Steer Left/Right, Brake
0x20–0x2FSocialEmote, Push to Talk, Screenshot
0x30–0x3FTraining controlsDifficulty, Skip Interval, Pause, Lap, Cruise Control
0x40–0x4FView controlsCamera View, HUD Toggle, Map Toggle, Spectate
0x50–0x5FPower-upsPower-up 1–3
0x60–0xFFCustom / reservedApp-specific actions

Full button ID table

1.4Quick reference

The identifiers you will paste most often.

ServiceBLE · Primary service
d273f680-d548-419d-b9d1-fa0472345229
Button StateRead · Notify
d273f681-d548-419d-b9d1-fa0472345229
Haptic FeedbackWrite
d273f682-d548-419d-b9d1-fa0472345229
App InformationWrite
d273f683-d548-419d-b9d1-fa0472345229
mDNS service typeLocal network
_openbikecontrol._tcp.local.

Fitted to

Hardware that ships with OpenBikeControl in its firmware, and the trainer apps that read it. Anything added to the specification for one product is published for every implementer.

Stages SB200 indoor smart bike

Announced on 5 October 2026, the SB200 is the first hardware with OpenBikeControl built into its firmware, over both Bluetooth and Wi‑Fi. Its shifters, brake levers and ten customizable buttons reach every supporting app as standard button IDs.

“It’s the first piece of hardware to support the new OpenBikeControl protocol, which is an emerging standard to allow apps and hardware makers a single open standard again.”
— DC Rainmaker

Fitment record

Entry 001
StatusShipping · first hardware
ModelStages SB200 indoor smart bike
Announced5 Oct 2026
IntegrationOpenBikeControl in device firmware
TransportsBluetooth · Wi‑Fi
ControlsFull shifters, brake levers, 10 customizable buttons
App support at launchTrainingPeaks Virtual, natively with 37 mappable actions, and BikeControl. Through BikeControl the SB200 is compatible with most trainer apps.
Added to the spec
  • 0x04 0x05Front and rear gear reporting for 2x drivetrains
  • 0x1AAnalog brake strength
  • 0x3CCruise control
  • 0x18 0x19Steering, left and right

Manufacturers

Hardware makers that ship OpenBikeControl
ItemMarkManufacturerStatusNotes
1Stages CyclingImplementedStages SB200 indoor smart bike, in firmware over Bluetooth and Wi‑Fi
+More to comeBuilding hardware with OpenBikeControl? Get in touch to be listed here.

Trainer apps

Apps that implement OpenBikeControl, or plan to
ItemMarkApplicationStatusTransportsNotes
1TrainingPeaks VirtualImplemented
  • Bluetooth
  • Network
Network over Direct Connect (WFTNP), not mDNS & TCP. Native Stages SB200 support at launch
2MyWhooshImplemented
  • No Bluetooth
  • Network
3StrappoImplemented
  • Bluetooth
  • Network
4icTrainerImplemented
  • Bluetooth
  • No Network
5BiketerraImplemented
  • Bluetooth
  • No Network
6Ride CaveImplemented
  • Bluetooth
  • No Network
7VelotossImplemented
  • Bluetooth
  • Network
8GrimpaImplemented
  • Bluetooth
  • No Network
Runs in the browser (Web Bluetooth, Chrome and Edge)
RBikeControlReference implementation
  • Bluetooth
  • Network
Connects OpenBikeControl controllers to most trainer apps. bikecontrol.app

Implementation procedure

The same steps apply whether you are writing controller firmware or adding OpenBikeControl to a training app.

  1. Read the specification

    Start with the protocol overview, then the transport you are building for: BLE, with one GATT service and three characteristics, or mDNS & TCP for devices on the local network. Both carry the same binary messages.

  2. Simulate

    Use the BLE or mDNS simulator to emulate an OpenBikeControl controller. App developers can integrate before any hardware exists; firmware engineers can see exactly what an app expects to receive.

  3. Test with the implementation tester

    Connect the implementation tester to your device the way an app would, press every control, and confirm each one produces the expected button ID and state. The tester covers the BLE transport.

  4. Ship

    Release the firmware or app update, then get in touch so your product can be listed on the hardware page, where riders and app developers find it.