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
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.
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 without touching the bike. 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 toolAny Android
The 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.
Install
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.
New to ObtainX? Install it, tap Add App, and paste
https://codefloe.com/SnappTechnology/IndoorCyclingApp
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 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. 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. A Play Store listing is coming for convenience only.
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.
Not yet. The shared core is Kotlin Multiplatform, so a port is planned once the Android release is polished.
Install, set your FTP and weight, pair the trainer, ride. About a minute, no sign-up screens.