Workout
Structured intervals in ERG mode. The app drives the trainer to each step's wattage against your FTP; you hold the cadence. Sweet Spot, Threshold, VO2, or anything you build.
Free, open-source indoor cycling for Android, Sailfish OS and soon iPhone
Ride structured workouts, real-world routes, or just ride. Workouts and routes come from repositories that riders maintain, and the app itself asks for nothing: no account, no subscription, no Google.
Three ways to ride
Every ride connects to your trainer over standard Bluetooth (FTMS), saves to your phone as a file, and counts towards your streaks and rider level. And every mode works on whatever your machine can be told: a trainer with ERG but no road simulation rides routes as the wattage the road asks for, and a smart bike that only takes a resistance level is held on a workout's wattage by the app.
Structured intervals in ERG mode. The app drives the trainer to each step's wattage against your FTP; you hold the cadence. Sweet Spot, Threshold, VO2, or anything you build.
A real GPX road in simulation mode. The trainer sets resistance from the gradient, your watts set your speed, and virtual gears shift like a real bike's: the change you feel is the ratio between the two gears, on the flat and on a climb. Map, elevation profile and live gradient on the HUD.
No plan. Start at 40% of your FTP, dial the power up or down with the buttons or a Zwift Click, stop when you're done. Saved and counted like any other ride.
Community repositories
There is no central catalogue to gatekeep. A repository is a folder of
plain JSON files and a small manifest.json, hosted on any
HTTPS web space: Codeberg, GitHub Pages, your own site. Coaches publish
plans, clubs share their winter block, tinkerers curate the intervals
they swear by.
In the app you browse a repository, keep the workouts and routes you want, and each one becomes a local file on your phone. Follow a repository and the home screen tells you when it publishes something new.
In the registry today
Editor & tools
Both tools run on this site with no install and no sign-up. What you make travels to the app as a QR code or a URL; no cloud sits in between.
Workout editor
Durations, %FTP and repeat groups as coloured blocks. Tap “Send to phone” and scan from the app. Tools can also open the editor pre-loaded with one URL, no API key required.
Open the editorRoute tool
Turn any GPX track into a route the app can ride, ready to add to your own repository or send straight to your phone.
Open the route toolInstall
One shared core and a native app on each platform, free and open source on all of them.
Any phone, with Google or without it.
Signed APKs and automatic updates straight from our releases. No store account.
Download the latest release and sideload it.
For phones that do have Google. Same app, same zero dependencies, updated by the store.
New to ObtainX? Install it, tap Add App, and paste
https://codefloe.com/SnappTechnology/IndoorCyclingApp
Sailfish OS 5.1 on an aarch64 phone, such as the Jolla C2.
The app installer for Sailfish OS that installs Indoor Bike from our releases and keeps it up to date.
The packages Harpoon installs, to look at or install by hand.
Sailfish OS is in early development. Expect bugs and frequent updates, so install it now only if you are happy to put up with teething problems. Eventually it will be in the Jolla Store for everyone. Bug reports are welcome.
New to Harpoon? Install it, tap Add app, and paste
https://codefloe.com/SnappTechnology/harbour-indoorbike
The same app, on the same shared core.
Coming soon.
Any Android
The Android app uses standard Android Bluetooth APIs and nothing proprietary: no Firebase, no crash reporters, no analytics. So it runs on phones that have no Google on them at all.
The deal
No price, no premium tier, no ads, no trial. Everything you record stays on your phone unless you choose to send it somewhere: Intervals.icu and FitTrackee sync exist, off by default. Even this page loads no third-party resources.
Privacy policyQuestions
Any smart trainer or smart bike that speaks the standard Bluetooth LE FTMS profile. The Wahoo Kickr Core is the first-class target; Tacx, Saris, Elite and other FTMS trainers should work, and so do smart bikes and spin bikes that report through FTMS alone. The app asks the machine what it can do and fills the gaps, so every ride mode works even on one that only takes a resistance level; the trainer's settings sheet says how yours is driven. Heart-rate straps and the Zwift Click v1 pair the same way.
No. The app is fully functional offline with no sign-up, and it uses no Google Play Services, so it runs on /e/OS, GrapheneOS and other de-Googled phones. It is also on Google Play, for convenience only: it is the same app.
From community repositories: static JSON files a maintainer hosts anywhere. Browse the in-app registry, paste a manifest URL, scan a QR from the editor, or import a file. Everything you add becomes a local copy.
Write a small manifest.json pointing at your workout and route files and host both on any HTTPS web space. Riders add it by URL or QR; open a pull request to appear in the registry. The publishing guide walks through it.
Yes. Encode a workout in an editor URL and show it to your user. No registration, no keys, no server calls. See the Editor API quick start and the machine-readable llms.txt.
Yes. Your program decides what road the rider is on and the phone decides what that road feels like, over a WebSocket on the local network. No account, no SDK, and nothing to sign up for. There is a packaged skill for building one with a coding agent. See the Companion API.
Yes, as an early version. It runs the same shared core as the Android app, with a native Silica interface, on Sailfish OS 5.1 phones such as the Jolla C2. It is in early development: bugs are expected and updates are frequent, so install it now only if you are happy to put up with teething problems. It is installed and updated with Harpoon, from the Sailfish releases. Eventually it will be in the Jolla Store for everyone. Bug reports are welcome.
Soon. The iPhone app runs the same Kotlin Multiplatform core as the Android and Sailfish OS apps, and its release is close.
Install, set your FTP and weight, pair the trainer, ride. About a minute, no sign-up screens.