• v0.2.6 89920e782d

    BikeControl v0.2.6
    🚴 Build and Test BikeControl / Workspace tests (push) Successful in 16m34s
    Build & Release / Run tests (push) Successful in 6m32s
    🚴 Build and Test BikeControl / Android compile check (push) Successful in 3m36s
    Build & Release / Build Linux (deb + AppImage) (push) Successful in 16m14s
    Build & Release / Build Arch package (push) Successful in 31m49s
    Build & Release / Build Android APK (push) Successful in 20m33s
    Build & Release / Create release (push) Successful in 19s
    Stable

    dtourolle released this 2026-08-27 18:23:32 +00:00 | 0 commits to master since this release

    BikeControl v0.2.6

    Downloads

    Platform File Install
    Debian/Ubuntu *.deb sudo dpkg -i BikeControl_0.2.6_amd64.deb
    Fedora/RHEL *.rpm sudo rpm -i BikeControl-0.2.6-1.x86_64.rpm
    Android (arm64) bikecontrol-release.apk adb install bikecontrol-release.apk, or sideload

    No AppImage this time — linuxdeploy failed during bundling. The .deb and .rpm are
    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 and Y
    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
  • v0.2.0 9cbc5aa292

    BikeControl v0.2.0
    🚴 Build and Test BikeControl / Workspace tests (push) Successful in 13m53s
    Build & Release / Run tests (push) Successful in 6m40s
    🚴 Build and Test BikeControl / Android compile check (push) Successful in 3m41s
    Build & Release / Build Linux (deb + AppImage) (push) Successful in 16m44s
    Build & Release / Build Arch package (push) Successful in 32m53s
    Build & Release / Build Android APK (push) Successful in 21m20s
    Build & Release / Create release (push) Successful in 12s
    Stable

    dtourolle released this 2026-08-21 18:28:11 +00:00 | 14 commits to master since this release

    BikeControl v0.2.0

    Downloads

    Platform File Install
    Linux (any) *.AppImage chmod +x BikeControl*.AppImage && ./BikeControl*.AppImage
    Debian/Ubuntu *.deb sudo dpkg -i bikecontrol*.deb
    Arch *.pkg.tar.zst sudo pacman -U bikecontrol-*.pkg.tar.zst
    Android (arm64) bikecontrol-release.apk adb install bikecontrol-release.apk, or sideload

    Requirements

    Linux — BlueZ running (bluetoothd), and a Bluetooth adapter with BLE.

    Android — 7.0 (API 24) or newer, and Bluetooth LE. The app asks for
    the Bluetooth scan/connect permissions on first launch; on Android 11
    and older it asks for location instead, which is what the platform
    required for a BLE scan at the time.

    A Zwift Click v2 must have been unlocked once in the free Zwift app —
    see the README.

    Downloads
  • v0.1.0 5f0fe7b403

    BikeControl v0.1.0
    🚴 Build and Test BikeControl / Workspace tests (push) Successful in 10m18s
    Build & Release / Run tests (push) Successful in 6m47s
    🚴 Build and Test BikeControl / Android compile check (push) Successful in 3m36s
    Build & Release / Build Linux (deb + AppImage) (push) Successful in 15m30s
    Build & Release / Build Arch package (push) Successful in 29m17s
    Build & Release / Build Android APK (push) Successful in 19m41s
    Build & Release / Create release (push) Successful in 16s
    Stable

    dtourolle released this 2026-08-21 16:31:36 +00:00 | 21 commits to master since this release

    BikeControl v0.1.0

    Downloads

    Platform File Install
    Linux (any) *.AppImage chmod +x BikeControl*.AppImage && ./BikeControl*.AppImage
    Debian/Ubuntu *.deb sudo dpkg -i bikecontrol*.deb
    Arch *.pkg.tar.zst sudo pacman -U bikecontrol-*.pkg.tar.zst
    Android (arm64) bikecontrol-release.apk adb install bikecontrol-release.apk, or sideload

    Requirements

    Linux — BlueZ running (bluetoothd), and a Bluetooth adapter with BLE.

    Android — 7.0 (API 24) or newer, and Bluetooth LE. The app asks for
    the Bluetooth scan/connect permissions on first launch; on Android 11
    and older it asks for location instead, which is what the platform
    required for a BLE scan at the time.

    A Zwift Click v2 must have been unlocked once in the free Zwift app —
    see the README.

    Downloads