Auuki offers a unique take on structured indoor cycling workouts by running entirely in the browser as a progressive web app (PWA). It uses the Web Bluetooth API to connect directly to smart trainers and sensors without any native app installation or backend dependencies. This approach is fairly unusual — controlling cycling trainers over BLE from a web environment with ERG mode and grade simulation is a challenging technical feat.
What Auuki does and its architecture
Auuki is a browser-based PWA designed for indoor cycling enthusiasts who want to run structured workouts with smart trainer control. It supports connecting to smart trainers and sensors via the Web Bluetooth API using the FTMS (Fitness Machine Service) and FE-C (Fitness Equipment Control) protocols over BLE. This enables key workout modes like ERG mode, where the trainer automatically adjusts resistance to hit target power, as well as grade simulation.
The app can load Zwift .ZWO workout files, a widely used XML format for structured cycling workouts. It also records completed workout data in industry-standard .FIT files, including native RR interval data, which is valuable for advanced heart rate variability analysis.
One interesting architectural aspect is that Auuki keeps all user data on the device, with no backend storage, enhancing privacy and reducing dependencies. Integration with popular cycling platforms Intervals.icu and Strava is built-in, allowing seamless workout upload once the session is complete.
Under the hood, Auuki is built entirely with web technologies — JavaScript, HTML, and CSS — and leverages modern browser APIs. The Web Bluetooth API is central to its device communication, which is still a relatively niche but powerful browser feature.
The repo also mentions a suite of native Apple platform apps (iOS, iPadOS, tvOS, watchOS) in development, but the core experience currently revolves around the PWA.
Technical strengths and design tradeoffs
Auuki’s standout technical strength is its use of the Web Bluetooth API to directly communicate with smart cycling trainers and sensors. This opens up a zero-install, zero-dependency user experience running fully in-browser, which is rare among cycling software.
Implementing FTMS and FE-C protocols over BLE in JavaScript requires careful handling of asynchronous device interactions, protocol parsing, and real-time state updates. Supporting ERG mode and grade simulation means the app must send control commands reliably and respond to trainer state changes efficiently.
Recording workout data in the .FIT format with native RR intervals is another technically notable feature. The .FIT file format is complex and widely used in the fitness industry, so correctly generating these files client-side and including precise RR timing data adds significant value.
The choice to keep all data local on the device trades off convenience for privacy and simplicity. There’s no cloud storage, so users retain control over their data, but this also means syncing requires explicit upload to services like Intervals.icu or Strava.
On the flip side, relying on the Web Bluetooth API comes with limitations. Browser support for BLE is uneven, with the best support currently in Chromium-based browsers and some mobile platforms. This restricts the user base somewhat and requires users to run the app in compatible environments.
Building a PWA means the app cannot access some lower-level device features or background execution capabilities that native apps enjoy. Responsiveness and stability depend on the browser and device performance.
The repo’s architecture, using purely web tech and no native code, keeps the footprint small and development relatively straightforward, but some advanced trainer features might be harder to implement or optimize compared to native apps.
Explore the project
The repo’s README and documentation provide an overview of the supported devices, protocols, and workout file formats. Since there are no explicit installation or quickstart commands, the best way to try Auuki is to visit its hosted PWA URL (typically linked in the README or project homepage) using a compatible Chromium-based browser with Bluetooth enabled.
Developers interested in the codebase can explore the JavaScript source focusing on the modules handling BLE communication, workout parsing (.ZWO), and .FIT file generation. The integration with Intervals.icu and Strava appears to be handled client-side through their respective APIs.
Key resources in the repo include documentation on supported trainer models and Bluetooth characteristics, which are crucial to understanding how the app controls resistance and captures workout data.
Verdict
Auuki is a practical solution for indoor cycling enthusiasts who want a no-install, privacy-conscious workout app that runs fully in the browser. It handles structured workouts with smart trainer control via Web Bluetooth, supports standard workout files, and records detailed workout metrics in industry-standard formats.
Its main limitations stem from browser BLE support and the inherent constraints of a PWA versus native apps. Users on non-Chromium browsers or platforms with limited Web Bluetooth support might face issues.
For developers, Auuki is an interesting example of pushing web technologies to interface with physical fitness hardware in real-time, showing how far the Web Bluetooth API can be taken in a demanding use case.
Overall, Auuki is worth exploring if you value zero-install convenience, privacy, and open web standards in your indoor cycling workflow.
Related Articles
- ElatoAI: running real-time voice AI agents on $5 ESP32 microcontrollers via edge function streaming — ElatoAI runs 100+ voice AI models on a $5 ESP32 with no PSRAM by streaming audio via secure WebSockets to edge functions
- Elato-Local: a local voice AI platform bridging desktop and embedded IoT on Apple Silicon — Elato-Local is a local voice AI platform combining Whisper ASR, local LLMs, and ESP32-S3 firmware flashing from a Tauri
- mhabit: a cross-platform Flutter micro habit tracker with self-hosted WebDAV sync — mhabit is a Flutter/Dart app for micro habit tracking across 5 platforms, featuring WebDAV sync, Material3 dynamic themi
- Blinko: an open-source, privacy-first AI note-taking app with RAG-powered local search — Blinko is a self-hosted AI note-taking app using RAG for natural language search over local Markdown notes. Cross-platfo
- claude code viewer: a pragmatic web UI for managing Claude Code agent sessions — Claude Code Viewer provides a web UI for real-time monitoring and managing Claude Code sessions with dual authentication
→ GitHub Repo: dvmarinoff/Auuki ⭐ 878 · JavaScript