Repository navigation
OpenVitals 2.6.3
Released 2026-08-12.
This release is about the watch feeling paired, not just synced. A Garmin watch can now stay connected whenever it is in range - the way the vendor's app behaves - and that held link carries what a companion app carries: live heart rate and steps, weather from a weather app on the phone, the phone's calendar on the wrist, find-my-phone that actually rings, and GPS ephemeris handed over for second-long fixes. None of it grows the app an internet permission, and everything personal is off by default behind its own switch. Around the watch work, the sleep score is rebuilt on published sleep-science pillars, and onboarding gains a one-tap Grant all.
- Stay connected. A per-watch switch holds the Bluetooth link open whenever the watch is in range, instead of only while notifications need forwarding. Android's companion-device presence wakes the app when the watch comes back, so the link returns promptly.
- Live readings. With Stay connected on, a second switch streams the watch's current heart rate and step count to the phone. The values appear on the watch screen and the dashboard, live in memory only, and disappear when the link drops - the same measurements arrive later through the normal sync.
- A watch tile on the dashboard. The most recently synced watch, with its battery, last sync time, and a sync button. While live readings stream, the tile shows the current heart rate and steps instead of the last sync time.
- Weather on the watch. The watch's weather glance is answered from a weather app on the phone that broadcasts the Gadgetbridge generic-weather format; Breezy Weather is the tested one. OpenVitals itself never contacts a weather service.
- Calendar on the watch. The watch's calendar glance can show the phone's upcoming events. Off by default; switching it on asks for Android's calendar permission. Events are read only while answering the watch, go to it over Bluetooth, and are never stored - declined and cancelled meetings stay off the wrist.
- Find my phone, both directions. The watch's find-my-phone feature now rings the phone at alarm volume, even when silenced, with a notification to stop it. Finding the watch from the phone worked before and still does.
- GPS ephemeris. Import a satellite prediction file on the watch screen and the phone hands it to the watch when it asks, turning a minutes-long cold GPS fix into a seconds-long one. Nothing is downloaded: the user fetches the file, the app recognizes its format by content and serves it. A stale file is refused rather than served.
- Grant all in onboarding. The first permission screen gains a Grant all button that requests every category in one Health Connect dialog. Mindfulness, cycle tracking, and additional access keep their own explicit steps.
- A permissions checklist after pairing. Adding a watch now offers the OS-level grants a watch benefits from - notification access, battery-optimization exemption - each explained, each declinable.
- Sleep score rebuilt on sleep-science pillars. Duration, quality, and overnight HRV recovery are scored using published sleep guidance (NSF/AASM), with age and night HRV feeding the score, recovery, and the dashboard.
- The pairing path decides what a device is. A device added through Settings, Watches is a watch; one added through the sensors flow is a live sensor, even when it is physically a smartwatch. The device's name no longer decides.
- The watch tidies up after a sync. Files already copied to the phone are archived on the watch after import, so its storage does not fill with what the phone already holds.
- Watch battery on the phone. The battery percentage arrives during a sync and shows on the device screen and the dashboard tile.
- Cardio load and intensity minutes read workout heart rate. They were reading 15-minute aggregates that fell through the gap filter and fell back to movement data even when dense workout HR existed in Health Connect.
- Body tiles open their own metric screens. Tapping Weight landed on a Body overview, a two-hop trip to the metric the tile already named. Body tiles now open their metric directly, like heart and vitals.
- The syncing banner is no longer clipped at the top of the dashboard.
- A smartwatch added as a sensor stays a sensor. The BLE sensor registry no longer reclassifies it by name.
- Diagnostics exports include raw process logs, unsanitized, which is what a support thread actually needs.
The app keeps the same package name and signing certificate, so this installs as a normal update.
Distribution flow:
- Codeberg release with signed APK, signed debug APK, and signed Android App Bundle assets.
- Direct Google Play production upload from the approved Woodpecker deployment.
Generated from docs/releases/2.6.3.md. Edit it there; changes made here are overwritten.
This wiki mirrors the Markdown in Hale-MTU/OpenVitals on every push to main.
Features
- Features
- Achievements
- Activity And Training Plans
- Activity Metrics
- Apple Health Import
- Beverage Logging And Caffeine
- Bluetooth LE Sensors
- Body Energy
- Body Metrics
- CoMaps Navigation Context
- CSV Import
- Cycle Tracking
- Daily Readiness
- Elevation Correction
- Feature Map
- FIT Files Import
- Food Logging
- GPX/KML/KMZ/TCX Route Import
- Health Connect Metrics Dashboard
- Health Report Export
- Heart And Vitals
- Heart Rate Recovery
- Home Screen Widgets
- Hydration
- Manual Entry Of Metrics
- Medical Records
- Metric Detail Customization
- Mindfulness
- Non Health Connect Metrics Dashboard
- Nutrition
- Offline Maps Support
- Onboarding And Permissions
- Preloaded Beverage Nutrition Reference
- Privacy, Support, And Diagnostics
- Recording Of Activity
- Reminders
- Settings And Preferences
- Sleep Score And Recovery
- Sleep Tracking
- Statistics
- Sync With Another Phone
How-to
App
- App Guide
- FAQ
- Getting Started
- Health Connect
- Install
- Local And Connected Editions
- Permissions
- Privacy
- Screenshots
- Support
Reference
- Design Reference
- Reference
- Design Guidelines for Offline & Sync
- OpenVitals UI Notes
- Reference: Data Capture
- Reference: Data Display
- Reference: Health Connect Matchmaking
- Reference: Health Connect Onboarding
- Reference: Health Connect Permissions
- Reference: Health Connect UX
- Reference: Promoting Health Connect
Engineering
- Code Analysis
- Engineering
- Flutter ↔ Kotlin test-parity matrix
- apple-health-import
- Architecture
- body-cycle-recovery
- Design system conformance
- Development
- Feature Playbook
- Flutter -> Kotlin test parity: domain/data/core/contract/state/navigation/di/bootstrap/l10n/widget_test
- Flutter → Kotlin test-parity matrix: features section
- Flutter → Kotlin test-parity matrix: ui / goldens / integration / fixtures
- Flutter-to-Kotlin test-parity matrix — dashboard + devicesync
- manual-entry
- Translations
Proposals
- Proposals
- Activity Start Flow Analysis
- Activity Start Flow Simplification Proposals
- Caffeine Detail And Future Sleep Insights
- Cycle Tracking: Design and Status
- Medical Records Through Health Connect
- Medical Records: What Is Left
Releases
- OpenVitals 2.16.0
- OpenVitals 2.15.2
- OpenVitals 2.15.1
- OpenVitals 2.15.0
- OpenVitals 2.14.5
- OpenVitals 2.14.4
- OpenVitals 2.14.3
- OpenVitals 2.14.2
- OpenVitals 2.14.1
- OpenVitals 2.14.0
- OpenVitals 2.13.0
- OpenVitals 2.12.0
- OpenVitals 2.11.2
- OpenVitals 2.11.1
- OpenVitals 2.11.0
- OpenVitals 2.10.1
- OpenVitals 2.10.0
- OpenVitals 2.9.1
- OpenVitals 2.9.0
- OpenVitals 2.8.0
- OpenVitals 2.7.3
- OpenVitals 2.7.2
- OpenVitals 2.7.1
- OpenVitals 2.7.0
- OpenVitals 2.6.6
- OpenVitals 2.6.5
- OpenVitals 2.6.4
- OpenVitals 2.6.3
- OpenVitals 2.6.2
- OpenVitals 2.6.1
- OpenVitals 2.6.0
- OpenVitals 2.5.0
- OpenVitals 2.4.1
- OpenVitals 2.4.0
- OpenVitals 2.3.2
- OpenVitals 2.3.1
- OpenVitals 2.3.0
- OpenVitals 2.2.8
- OpenVitals 2.2.7
- OpenVitals 2.2.6
- OpenVitals 2.2.5
- OpenVitals 2.2.4
- OpenVitals 2.2.3
- OpenVitals 2.2.2
- OpenVitals 2.2.1
- OpenVitals 2.2.0
- OpenVitals 2.1.0
- OpenVitals 2.0.4
- OpenVitals 2.0.3
- OpenVitals 2.0.2
- OpenVitals 2.0.1
- OpenVitals 1.9.0
- OpenVitals 1.8.0
- OpenVitals 1.7.7
- OpenVitals 1.7.6
- OpenVitals 1.7.5
- OpenVitals 1.7.4
- OpenVitals 1.7.3
- OpenVitals 1.7.2
- OpenVitals 1.7.1
- OpenVitals 1.7.0
- OpenVitals 1.6.3
- OpenVitals 1.6.2
- OpenVitals 1.6.1
- OpenVitals 1.6.0
- OpenVitals 1.5.1
- OpenVitals 1.5.0
Project