RULLO

An offline, open-source indoor-cycling app for Linux, macOS and Windows. It controls your smart trainer, rides real elevation profiles and structured workouts, and records every ride to a .fit file. No account, no cloud, no subscription.

Desktop AppOpen Source · GPL-3.0v0.1.02026
Rullo ride screen: power ring at 139 W, an ERG workout interval strip, cadence, heart rate, speed, distance and the route elevation profile
Ride screen: power against FTP, workout intervals, live metrics and the route profile.

The problem

Indoor training apps have moved to monthly subscriptions, mandatory accounts and always-online clouds. Riders who just want to follow a workout on their own trainer pay every month for features they don't use, and their ride data lives on someone else's server.

What we shipped

  • Smart-trainer control over Bluetooth (FTMS, Tacx FE-C, Wahoo KICKR on older firmware) and ANT+ FE-C, plus heart-rate straps, cadence sensors and power meters.
  • A deterministic physics model that turns your power into speed over real elevation profiles. Import any GPX route.
  • Structured workouts in ERG mode (.zwo, .erg, .mrc) and a built-in FTP ramp test that applies your new FTP in one click.
  • Ride summary with NP, IF, TSS, laps and zones; history, power curve and training load (fitness, fatigue, form).
  • A hand-written FIT encoder: export .fit or .tcx and upload straight to Strava or intervals.icu.
  • Standalone builds for Linux, macOS and Windows, tested in CI on all three.

Stack

Python 3.12, asyncio, bleak (Bluetooth LE), openant (ANT+), a self-contained offline web UI, PyInstaller builds and GitHub Actions CI on three operating systems.

← Back to What We've Shipped