Repository navigation
OpenVitals 2.12.0
Released 2026-10-05.
This release opens manual nutrition logging to every nutrient and makes climbing numbers believable. The Carbs tile in Add entry becomes Nutrition: one form for calories, protein, carbs, fat and any other nutrient Health Connect stores, for anyone who keeps daily totals in an app that does not write to Health Connect. An entry can be edited from the Nutrition screen, and vitamins and minerals are typed in the micrograms and milligrams a label prints. GPS recordings stop counting indoor altitude noise as climbing, a glitching barometer can no longer add kilometers of climb, and the climb of each split now adds up to the workout's total.
- One nutrition form for every nutrient. Calories in, protein, carbs and fat are always on the form, and Add another nutrient brings in any other nutrient Health Connect stores. Fill in only the amounts you have: blank fields are left out, and one save writes one nutrition entry. The date and time can be set back to log an earlier day. Caffeine is left out of the chooser because it is logged as a drink.
- Edit a nutrition entry. The entry list on the Nutrition screen has an edit button. An entry typed in the form, or an older carbs entry, opens the form with its values and time, and saving replaces it in place. A drink's edit button opens the drink, since its nutrients follow its volume. A logged food can still only be deleted; the food catalog sets its values.
- The Carbs tile is now Nutrition. A saved tile order keeps it in the same place. The Food tile and its catalog work as before, and nutrition entries do not appear in the drink history or among frequent drinks.
- Vitamins and minerals in label units. Each nutrient is typed in the unit a nutrition label prints: micrograms for vitamins A, D, K and B12, folate, folic acid, biotin, chromium, iodine, molybdenum and selenium; milligrams for vitamins C and E, the other B vitamins, cholesterol, caffeine and the other minerals; grams for the macros, fibre, sugar and fats; kcal for energy. This applies to the nutrition form, foods and custom drinks. Saved foods and drinks open in the new units, so a coffee's caffeine reads 95 mg instead of 0.095 g. Health Connect still stores grams.
- Micronutrients a million times too large. Every nutrient field took grams, so a label's 15 µg of vitamin K was saved as 15 g.
- Elevation gained indoors. A GPS recording counted every altitude swing as climbing, even when the signal was poor: an hour's walk on flat ground, partly inside a building, showed more than 14000 m of elevation gained. A change in altitude now has to exceed the fix's own altitude error before it counts, and a fix with more than 20 m of error is skipped for elevation. Imported routes without altitude accuracy, such as GPX files, keep their gain as before.
- Barometer glitches. A barometer reading outside the range air pressure can take, such as 0 hPa, is ignored; before, one could add about 13 km of climb. A jump of more than 50 m between two readings no longer adds anything.
- Climb per split. Each split counted every small rise between GPS fixes, so a kilometer could show hundreds of meters of climb and the splits did not add up to the total. The climb of each split, while recording and on the activity's detail screen, now comes from the same filtered elevation as the total. A split boundary in the middle of a climb can move a few meters of it into the next split.
- Wheel circumference. A speed sensor's wheel circumference below 2100 mm was saved as 2100 mm, so a sensor could not be calibrated down. Any whole number from 500 to 3000 mm is accepted, the field opens a number keyboard, and it shows the range and turns red until the value is fixed.
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.12.0.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