Repository navigation
OpenVitals 2.6.6
Released 2026-08-22.
This release is about the watch earning its place without a recording running. CoMaps guidance now reaches a Garmin watch whenever CoMaps is navigating, on its own switch, instead of riding along with a GPS recording nobody wanted to start. A newly paired watch keeps its link to the phone by default, because almost everything the watch can do depends on one. A caffeinated drink can be logged over the time it actually took, so a coffee nursed through a morning stops spiking at the first sip. And the app speaks French.
- CoMaps guidance on the watch, as its own feature. The next manoeuvre, the distance to it and the street appear on the watch as a notification that updates in place, whenever CoMaps is navigating. It has its own per-watch switch, separate from the activity recording integration: guidance alone reaches the watch, the recording integration alone shows in the recording, both on shows in both, and neither can switch the other off. Starting a GPS recording just to get directions on your wrist is no longer the price of admission. The watch card asks for the CoMaps permission itself and says so if the grant is refused; granting it after the fact now re-opens the subscription rather than leaving a dead one.
- A drink can be logged over the period it took. The Log drink dialog asks how long a caffeinated drink took - at once, 15 or 30 minutes, 1, 2 or 3 hours - and stores it as the nutrition record's end time. The caffeine model already spread a dose across a record's interval, but every drink written from the app was a one-second record, so a coffee nursed over two hours spiked at the first sip. The drink sheet already showed the duration and now has one worth showing.
- French. A full translation, offered by the in-app language picker.
- Stay connected is on by default. A Garmin watch expects its companion phone to hold the link, and most of what the watch can do rides on one: weather, find-my-phone, live heart rate and steps, handing over a recording the moment it finishes, and now CoMaps guidance on the wrist. Pairing a watch and finding none of it working, with no hint that a single switch was the reason, is the worse default of the two. It costs battery on both sides, which is what the card on the device screen says and what the switch is there for; a wearer who turns it off has that written down and this default never reaches them again. This is not only a new-pairing default - an existing install that never touched the toggle has nothing stored, and so picks the link up at its next start. Forgetting a watch clears the choice along with everything else, so a re-pair is a fresh watch getting the fresh default.
-
An activity keeps the title given on the wrist. The FIT
activitymessage carries a name the public profile omits, and it is the title the wearer typed on the watch, so it now outranks the workout name when an activity is titled. - A multi-hour ride no longer fails to import. Health Connect caps a single record at about 1 MB, which a long ride's GPS route can exceed. The insert failed on every retry and took the whole batched import down with it. The route is now thinned by the ratio the platform reports and the insert retried, so the ride arrives.
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.6.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