Repository navigation
FAQ
No. The local OpenVitals app does not ship app-level internet permission and does not upload health data to an OpenVitals server.
Health data is read from Health Connect on device. Entries explicitly saved by the user are written back to Health Connect.
OpenVitals has dashboard and detail screens for many health areas: activity, sleep, heart, body, hydration, nutrition, mindfulness, vitals, and cycle tracking.
Users do not need to grant everything. The dashboard can work with partial permissions, and cycle tracking is grouped separately so it can be granted or skipped explicitly.
Cycle data is sensitive. OpenVitals requests cycle permissions as their own Health Connect category in onboarding and Settings, so those records are shown only after the user grants that category.
Health Connect restricts access to older records unless Health history access is granted. Open Health Connect permissions and grant history access if older data should be included.
Long reads can also hit Health Connect rate limits. When that happens the dashboard shows a banner with a countdown and reloads the missing tiles by itself once Health Connect answers again; there is no need to pull to refresh, which only spends more of the limit.
No. OpenVitals keeps third-party records read-only.
OpenVitals-created hydration, activity, mindfulness, body, and vitals entries can be edited later, but ownership is checked before updating Health Connect records.
Workout route data is treated as sensitive Health Connect data. Some route access must be approved manually from Health Connect settings.
OpenVitals needs precise location to record route-backed activities. Without it, the app cannot record reliable GPS tracks.
Bluetooth is used for two separate things, both of them local:
- Connecting to Bluetooth LE sensors during activity recording.
- Copying Health Connect records to another nearby phone.
Nearby-device Bluetooth permissions do not add internet access.
Because any Wi-Fi or TCP transfer on Android needs the INTERNET permission, and OpenVitals does not declare it. Bluetooth Classic keeps the transfer a direct link between the two phones and lets the app stay provably network-free.
Notification permission is used for:
- Persistent activity recording notifications.
- User-started Apple Health import progress.
- Phone-to-phone sync progress.
- Optional hydration and mindfulness reminders.
Reminders are local and optional.
Not by itself. Watch and scale support (Garmin and Wear OS watches, the Xiaomi S400 scale) is the separate OpenWatch app. It writes what those devices record to Health Connect, and OpenVitals reads it from there like any other source. A watch that broadcasts its heart rate over Bluetooth LE can still be used as a sensor while recording an activity.
No. OpenVitals shows wellness context from Health Connect records. Sleep score, cardio load, vital context, Body Energy, readiness, and metric interpretation cards are not medical diagnosis or treatment advice.
OpenVitals does not depend on Google Play Services for core app logic.
Health Connect availability depends on Android version and device setup. Android 14 and newer include Health Connect as part of the system. Android 13 and older normally use the separate Health Connect app.
The connected app is a separate app and repository for planned online features such as accounts and sharing. It is separate so the local app can remain internet-free.
Generated from docs/app/faq.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