Your ring. Your data. Kept close.
A local-first, open-source Flutter companion for the COLMI R12 smart ring.
Clear daily readings. Thoughtful details. No account or subscription in the current app.
Release 1.3.2 · Quick start · Ring compatibility · Supported data · Screens · Changelog · Contribute
Actual Flutter screens with deterministic fictional test data—not personal health records or evidence of sensor accuracy.
LibreRing brings sleep, movement, pulse and oxygen history into a warm, sage-green interface you can explore at your own pace. Inspect a night, compare recorded days, add your own context, and understand what each number can—and cannot—tell you.
- Your data stays close. Ring history, journal entries and preferences are stored on your phone. Export and sharing are explicit choices.
- Clarity next to the number. HRV, stress, energy, battery and sync have explanations in the app, not just in a manual.
- Details that feel considered. Inspectable charts, green sleep stages, restrained native haptics, persistent tab position and reduced-motion support.
- Honest when data is missing. Gaps stay gaps. Firmware estimates are labelled. Unsupported measurements do not become made-up health scores.
- No account to create. The supported COLMI R12 path connects over Bluetooth. The current app has no billing or paid tier; it also has no LibreRing cloud account, cloud backup or cross-phone sync.
Status: development preview / source release. Version 1.3.2 (13) has been built, installed and launched on an owned iPhone using development signing. This is not App Store, Play Store or TestFlight distribution; there is no public IPA to install. See the release record for what was checked and what still needs hardware testing.
26-second screenshot tour · fictional fixtures on the production UI path · click for MP4. Sync progress is simulated; this is not a physical-ring or live-measurement recording. Media provenance
- Pull to refresh the saved view. Today, Vitals, Trends and reading details reload local phone data, even on short or empty pages. Existing readings stay visible if a reload fails. Sync remains the separate Bluetooth action that fetches ring history.
- Newly saved readings appear immediately. A reproduced clock-cache delay is fixed; a successful sync updates Today and previously visited Vitals without another pull. This is a specific display fix, not a claim that every possible missing-ring-data issue is solved.
- A more tactile interface. Navigation, chart selections and actual save/refresh outcomes have restrained haptics. Disabled controls and passive updates stay quiet; sleep feedback follows stage boundaries.
- Inspection stays trustworthy. Historical dates remain selected after refresh. Changed chart samples cannot leave an old value selected, and Trends keeps the chosen calendar day across midnight.
- Live means live. The pulse page explains saved readings versus on-demand acquisition. Live pulse and oxygen remain unavailable in production until usable physical readings and safe stop/cancel behaviour are verified.
The release builds on green sleep scrubbing, staged sync feedback, a separate last-reported ring-battery label, safe introduction replay, and daily suggestions with a visible Why this? explanation. HRV and stress firmware indexes never drive those suggestions.
Full changelog · Refresh and haptics QA · In-app explanation guide
Only the maintainer's COLMI R12 has been physically tested with LibreRing.
The current app is enabled for its verified firmware, RT11CR_1.00.09_260424.
| Ring | LibreRing status |
|---|---|
| COLMI R12, verified firmware above | Tested — the current supported path; see the signal limits below |
| COLMI R02, R03, R06, R07, R09, R10 — QRing hardware variants | Promising protocol-family candidates — not tested or enabled in LibreRing |
| Yawell R05, R10, R11 — QRing hardware variants | Related candidates — not tested or enabled in LibreRing; Yawell and COLMI model numbers are not interchangeable |
| Other R12 firmware, QRing rebrands or model variants | Unverified — assess the exact hardware and firmware first |
Why these candidates? Gadgetbridge's Yawell/COLMI documentation groups them in the related QRing family, and the Colmi R02 Python client explicitly lists R02, R06 and R10. That makes protocol reuse plausible—not proof that this LibreRing release will connect or decode every metric correctly. Driver enablement and device testing are still required.
Some rings sold under the same COLMI model name have different hardware and companion apps. QRing is a useful clue, not a compatibility guarantee. Please don't buy an untested ring on the assumption LibreRing already supports it.
Own one of these rings? Help turn a candidate into verified support: compatibility evidence and testing checklist.
The current production path is deliberately gated to one physically inspected
COLMI R12 running firmware RT11CR_1.00.09_260424. Protocol correctness is
tested; physiological accuracy is not independently validated.
| Signal or capability | Current status | What LibreRing says |
|---|---|---|
| Local BLE pairing and device facts | Supported | Exact-family discovery, service validation, battery, and firmware |
| Activity history | Supported | Steps and firmware-estimated distance; “Ring energy value” has unverified units and is not presented as confirmed active calories |
| Pulse history | Supported | Recorded BPM-like samples with gaps preserved; not a diagnosis |
| Sleep history | Supported | Firmware session and stage-duration estimates; not EEG |
| Blood oxygen history | Supported | Hourly firmware minimum–maximum ranges; not medical oximetry |
| Firmware “HRV” field | Exploratory | Shown only as an opaque firmware index, never RMSSD or SDNN |
| Firmware stress field | Exploratory | Shown only as an opaque vendor index, never emotional or clinical stress |
| Live pulse / oxygen | Not enabled in production | Owned-device tests returned warm-up packets, not usable readings; a Bluetooth connection is not live measurement |
| Temperature, blood pressure, respiration, VO₂ max, ring GPS | Unsupported | Not shown as measured R12 data |
| Recovery / readiness score | Not enabled from R12 data | LibreRing does not manufacture a score from unsupported inputs |
See the R12 evidence record and protocol matrix for commands, confidence levels, fixtures, and remaining physical-device work. The live-measurement acceptance checklist explains why live pulse and oxygen are still gated.
These versioned captures render the current Flutter production UI with deterministic fictional fixtures. They show the interface and its data boundaries, not private readings, concept screens or proof of physiological accuracy.
![]() Pulse · saved readings |
![]() Activity · honest energy units |
![]() Oxygen · firmware ranges |
![]() HRV index · limits made visible |
![]() Stress index · not a diagnosis |
![]() Trends · explore recorded days |
![]() What is HRV? |
![]() What does stress mean? |
![]() Refresh · saved phone data |
![]() Sync · simulated progress state |
![]() Welcome · revisit any time |
Watch the screen tour Current version · fictional fixtures |
flowchart LR
R[COLMI R12] -->|bounded BLE sync| D[ring_ble + ring_colmi_qring]
D -->|decoded records only| L[local repository]
L --> U[Flutter UI]
J[manual context] -->|separate provenance| L
L -->|confirmed action| E[JSON + CSV export]
- Raw BLE captures and stable device identifiers cannot enter the repository API.
- Sync is duplicate-safe, bounded, and fail-closed for unknown firmware.
- Manual entries remain separate from ring measurements.
- Export is an explicit user action and includes a SHA-256 manifest; sharing uses the native share sheet.
Requirements: Flutter 3.47.x, Dart 3.13.x, Xcode for iOS, or Android
Studio/SDK for Android.
git clone https://github.com/rubarksfield/librering.git
cd librering/apps/mobile
flutter pub get
flutter run --dart-define=LIBRERING_DEMO=trueThe demo boundary uses fictional data and needs no ring. Omit the define for the production pairing and local-sync path. Production never substitutes demo values when stored ring data is unavailable.
For an iPhone app that launches from the Home Screen, build profile or release mode through Flutter/Xcode; iOS intentionally restricts standalone launch of debug Flutter builds. A physical iPhone build requires your own Xcode signing configuration. Source code is not a pre-signed distributable app.
flutter run --release --dart-define=LIBRERING_DEMO=false --dart-define=LIBRERING_CAPTURE=falsecd apps/mobile
flutter analyze
flutter test
cd ../../research/scoring
python3 run_research.py
python3 -m unittest discover tests -vThe 1.3.2 mobile release preflight passed 427 tests and a clean analyzer. Coverage includes real pull gestures, automatic post-sync updates, storage failures, chart selection, haptic events, accessibility and golden renders. Package-level protocol tests are separate; see the QA record for exact commands and results. The scoring sandbox uses fictional data and is not production scoring or clinical validation.
An installed release is not proof of every hardware interaction. Real-ring sync regression, tactile feel, full physical-device VoiceOver and live-sensor acceptance remain separate checks.
| Path | Purpose |
|---|---|
apps/mobile |
Flutter app for iOS and Android |
packages/ring_ble |
Transport-independent BLE and sync contracts |
packages/ring_colmi_qring |
Fail-closed COLMI/QRing packet decoding |
packages/ring_core |
Health-domain records and provenance |
packages/ring_design_system |
LibreRing tokens and reusable UI components |
docs/protocol |
R12 evidence, command matrix, and fixture policy |
research/scoring |
Independent, synthetic scoring research—not production scoring |
Looking for an Oura Ring alternative, a RingConn or Ultrahuman Ring AIR dashboard, or an open-source COLMI / QRing app—even if your search was “Colomi ring”? The compatibility boundary matters: LibreRing currently connects only to the verified COLMI R12 path described above. It does not connect to Oura, RingConn, Ultrahuman, Samsung Galaxy Ring, WHOOP, Garmin or Fitbit devices.
LibreRing is independent and is not affiliated with, authorised by, sponsored by, or endorsed by COLMI, QRing, Oura, RingConn, Ultrahuman, Samsung, WHOOP, Garmin, Fitbit, Apple, or their owners. All marks belong to their respective owners and are used only to describe interoperability and product-category context.
The project is ready for careful contributors—especially Flutter engineers, BLE/protocol researchers with owned hardware, accessibility testers, Android device testers, privacy reviewers, and designers who value clarity over fake certainty.
Start with the contribution guide, the
roadmap, or an issue labelled
good first issue.
Never post personal health data, stable device identifiers, or raw captures in a
public issue.
Original LibreRing code and assets are licensed under Apache-2.0. Reference projects informed protocol facts and design research only; see third-party notices.
LibreRing is experimental wellness software, not a medical device. Do not use it to diagnose, treat, or make urgent health decisions.














