Repository navigation
OpenVitals 2.7.3
Released 2026-09-06.
This release estimates sleep stages on the phone for Garmin watches that never record them, such as the Venu SQ, from the heart rate and movement the watch does hand over. Home widgets refresh every 30 minutes, a whole folder of FIT files imports again, the Log screen no longer demands every write permission before it opens, and a Start over button rebuilds Body energy, Recovery and Expenditure from scratch.
- Sleep stages for Garmin watches that never record them. Older watches such as the Venu SQ leave sleep staging to Garmin's servers, so their nights synced as nothing at all, or as an awake-only "sleep" session. What such a watch does hand over is a heart rate and a movement count for every minute, and OpenVitals now estimates the night from those on the phone: when sleep began and ended, and a light, deep, REM and awake timeline. One session per night, marked as estimated in its notes and rewritten in place as the night's files arrive over later syncs. A watch that records its own stages is left alone.
- Import a whole folder of FIT files again. The folder button on the FIT importer card was lost in the move to Kotlin (2.5.0), leaving only one file at a time. It is back: pick the folder and every FIT file inside it is written straight to Health Connect, sub-folders included, in the order the activities happened. Garmin wellness files in the folder land as nightly HRV. A file that will not read fails on its own and the rest carries on; a very large folder says how many files were taken, and a folder with no FIT files says so instead of erroring.
- Start Body energy, Recovery and Expenditure over. These are the three metrics OpenVitals works out itself and keeps outside Health Connect, and the only way to make it forget a bad run of them was clearing app data, which takes every preference with it. Settings > Recovery gains a Start over card that wipes exactly that derived set - the history, the tuning learned from your watch, the baselines and the expenditure cache - and rebuilds it from Health Connect behind a confirmation. Health Connect data, body profile, heart zones and goals are kept.
- Home widgets refresh every 30 minutes. The widgets relied on Android's own update timer, which Doze skips and some phones throttle, so they refreshed a few times a day. They now re-read Health Connect every half hour while at least one is placed, and redraw as soon as the dashboard has loaded today.
- Log without handing over every write permission. The Log screen used to lock itself until OpenVitals held every Health Connect write permission, even if you only wanted to record your weight. It now opens with any or no write access, and each tile asks Health Connect for just its own permissions when you tap it. Declining still opens the entry form, which offers Grant again whenever you are ready.
- Onboarding needs only the reads. Step one used to insist on the Activity and Sleep write permissions as well. Decline every write in the Health Connect dialog and you can still continue; the log asks for a tile's write access when you first use it.
- The entry forms ask for write access the same way as the rest of the app. A form whose write permission is missing shows the "Some permissions are missing" callout with Grant permission, instead of an inline Grant button beside the title.
- One heart rate average per screen. 2.7.2 corrected the day's heart rate on the dashboard, but the Statistics card on the heart rate detail screen's day view still averaged raw readings, so the same day showed 82 bpm on the dashboard and 116 bpm one tap deeper (field report, Xiaomi Smart Band 10 via Gadgetbridge and Health Connect). That card, the HRV week and month charts and their statistics, the 28-day HRV baseline, the PDF report, the period charts for SpO2, body temperature, glucose and VO2max, respiratory rate and the overview captions all use the corrected averages now.
- The HRV tile can be granted from Settings. The "Manual entry write access" card now includes heart rate variability.
- A missing write permission reads as one. Saving a vitals or mindfulness entry without write access shows the permission message instead of a raw error.
- Metric detail screens hold still while they reload. The transient syncing notice no longer pushes the sections down and back on every reload; only the sync-paused banner occupies that space.
- Translations. Spanish, Japanese and Galician updated; Polish is progressing on Codeberg Translate and will be offered in the language picker once it passes 70% coverage.
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.7.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