Repository navigation
OpenVitals 2.14.1
Released 2026-10-14.
This release brings a cycle history kept in drip into OpenVitals: the CSV importer recognises drip's export and needs no column mapping. To hold everything drip records, the cycle journal gains the cervix as felt and a desire scale, both in the day log. A very large CSV, such as a heart rate export of a million rows, no longer stops when Health Connect runs out of quota: the import waits and carries on. Wear OS watches can sync on a schedule, and the cardio load on the Activities screens now matches the dashboard's.
- Cycle history from drip. Pick a CSV exported by the drip cycle tracker in Settings > Import & export > CSV Importer and OpenVitals recognises it: instead of a column mapping, five switches choose what to bring over. Bleeding becomes period flow and spotting in Health Connect, with bleeding you excluded in drip as spotting; morning temperatures land at their recorded time, with those excluded in drip left out; cervical mucus comes over as texture and feeling; sex as protected, unprotected or unknown, from the contraceptive drip lists. Pain and mood become symptoms, mood and energy levels, the cervix, desire and every note go into the cycle journal on the phone, laid over whatever the day already holds. Days are read in the phone's time zone. Importing the same export again replaces rather than duplicates.
- The cervix and desire in the cycle journal. The day log's cervical mucus section gains the cervix as felt: opening (closed, medium, open), firmness (firm, soft) and position (low, medium, high). Desire joins pain, mood and energy as a fourth 1 to 5 scale. Both travel with the journal backup and the phone-to-phone sync.
- Automatic sync for Wear OS watches. The Automatic sync card, so far Garmin-only, shows for a Wear OS watch too. A scheduled run does what a tap on Sync does: it copies the heart rate into Health Connect and writes the night's estimated sleep. Schedules survive a restart of the phone.
- CSV import waits out Health Connect's quota. A batch Health Connect refused for quota used to end the import, which a million-row heart rate export hit every time. The import now pauses, 15 seconds the first time and up to 5 minutes later on, shows a countdown, and writes the same batch again; an accepted write resets the pauses. Only half an hour of pausing without a single accepted write stops the run, and Cancel is answered within a second even during a pause. The result and the report count the pauses and the time they took.
- Cardio load on the Activities screens. The Activities screen and the activity overview computed cardio load without the body profile, so a day could show one load on the dashboard and another there. They now read the age, the maximum heart rate set in the profile and the sex that picks the weighting for women, as the dashboard does.
The app keeps the same package name and signing certificate, so this installs as a normal update.
Distribution flow:
- GitHub release with signed APK, signed debug APK, and signed Android App Bundle assets.
- Google Play update to follow, once 2.13.0 has cleared Play review.
Generated from docs/releases/2.14.1.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