-
BikeControl v0.2.6
Stable🚴 Build and Test BikeControl / Workspace tests (push) Successful in 16m34sBuild & Release / Run tests (push) Successful in 6m32s🚴 Build and Test BikeControl / Android compile check (push) Successful in 3m36sBuild & Release / Build Linux (deb + AppImage) (push) Successful in 16m14sBuild & Release / Build Arch package (push) Successful in 31m49sBuild & Release / Build Android APK (push) Successful in 20m33sBuild & Release / Create release (push) Successful in 19sreleased this
2026-08-27 18:23:32 +00:00 | 0 commits to master since this releaseBikeControl v0.2.6
Downloads
Platform File Install Debian/Ubuntu *.debsudo dpkg -i BikeControl_0.2.6_amd64.debFedora/RHEL *.rpmsudo rpm -i BikeControl-0.2.6-1.x86_64.rpmAndroid (arm64) bikecontrol-release.apkadb install bikecontrol-release.apk, or sideloadNo AppImage this time —
linuxdeployfailed during bundling. The.deband.rpmare
the same binary.
The release that found out which pod actually works.
The
+pod is the controller now. The−pod stops reporting
buttons about fifty seconds into every session — its link stays up, its
battery keeps arriving, and it silently refuses to send another press
until Zwift blesses it again. The+pod does not do this. Measured on
the bench, both pods minutes apart: 51 seconds against 133 seconds and
still going, no status flip, no key offers. Its paddle shifts up andY
shifts down, which is a whole shifter, so the app pairs it and the−
pod is the substitute. If you have been reconnecting a Click every minute
all year, that is why, and it stops now.The trainer connects again on Android. The device scanner opened a
discovery session every 2.9 s — ten starts per thirty seconds, twice
Android's limit, after which the platform silently stops returning
results. It now holds one session for twenty seconds and samples it four
times a second, so the list is quicker while the radio starts a seventh
as often. A rider whose pods woke first was spending the pods' search
window pushing the app over that limit, and then the trainer could not be
found — not because it was not advertising, but because the app was no
longer allowed to hear it.A trainer that drops mid-ride comes back. Its supervisor's own
reconnects never suspended the device scan, and on Android a GATT link
discovering services while a scan runs is killed by the platform. Only
that window is protected now — not the fifteen-second search, and not the
backoff between attempts, both of which an earlier fix took out and
starved every other device of discovery in the process.A wedged pod recovers. A link that carried sixty presses and then went
mute was exempt from the recycler for life, because the test was "never
carried a button" rather than "carried none lately". And the shifter tile
offers Reconnect, because the automatic recovery is deliberately slow and
the rider knows immediately.The pair cannot be joined by accident. Connecting both pods is what
stops the−pod reporting its own paddle. The scan path always declined
it; an explicit request walked straight past and housekeeping closed the
link a second later, which is not the same thing. Both paths refuse now,
and the UI no longer offers it.Also: rider setup, effort zones and imperial units from 0.2.0 are
unchanged; the+/−pod chip on the ride screen no longer reports the
intended configuration as a fault; and the device log stopped burying
connect failures under 274 identical lines in five minutes.Known: the Click v2's key exchange is documented in REQUIREMENTS §2.3.3
and not implemented. The−pod's fifty-second cliff is a deliberate
gate, not a bug we can route around, and closing it needs a capture of a
real Zwift unlock that nobody here has. It no longer matters for riding,
which is why this release ships without it.Downloads