Repository navigation
Add Offline Maps
OpenVitals can render activity routes without app-level internet access after offline map packs are imported.
For the short feature overview, see Offline Maps Support.
| Format | File extensions | Best for |
|---|---|---|
| PMTiles | .pmtiles |
General vector basemaps, especially Protomaps-compatible extracts. |
| Mapsforge |
.map, .maps
|
Prebuilt regional vector maps, often useful for roads, trails, and outdoor detail. |
OpenVitals can store multiple packs, but it renders one map format at a time. Choose PMTiles or Mapsforge in Settings after import when both formats are present.
Prefer regional map files over full-world downloads. Smaller files import faster and use less storage.
PMTiles is a single-file archive format. OpenVitals expects PMTiles data compatible with its offline route renderer.
Recommended PMTiles workflow:
- Install the
pmtilesCLI on a computer. - Choose a current Protomaps-compatible source file.
- Choose a bounding box or region polygon for the area where activities are recorded.
- Extract a regional
.pmtilesfile. - Copy the finished file to the phone.
- Open OpenVitals.
- Go to Settings, Activities, Offline maps.
- Import the
.pmtilesfile.
Example extract command:
pmtiles extract https://build.protomaps.com/20260518.pmtiles my_area.pmtiles --bbox=MIN_LON,MIN_LAT,MAX_LON,MAX_LAT --maxzoom=14Replace the input URL and bounding box with the current source and region. Lower maximum zoom levels can make files much smaller.
Mapsforge maps use .map or .maps files. They are commonly distributed as prebuilt regional maps.
Recommended Mapsforge workflow:
- Download a country or regional
.mapfile from a trusted Mapsforge source. - If the file is inside an archive, extract it first.
- Copy the
.mapfile to the phone if it was downloaded on a computer. - Open OpenVitals.
- Go to Settings, Activities, Offline maps.
- Import the
.mapor.mapsfile. - Choose Mapsforge as the render format if PMTiles packs are also imported.
If only one format has imported packs, OpenVitals uses that format automatically.
If both PMTiles and Mapsforge packs are present:
- Open Settings, Activities, Offline maps.
- Choose the active render format.
- Return to recording or route preview.
Imported files stay on device until deleted.
Imported maps are used automatically when map data is available for:
- GPS activity recording.
- Saved activity route previews.
- Imported route previews before saving.
No separate map selection is required during recording. If the route is outside the downloaded region, the route line may still appear without surrounding map detail.
From Settings, Activities, Offline maps, users can:
- Import more packs.
- Switch render format.
- Delete unused map packs.
Deleting a map pack removes only local map support data. It does not delete Health Connect activities or routes.
If import fails:
- Confirm the file extension is
.pmtiles,.map, or.maps. - For PMTiles, confirm the file is a compatible vector basemap.
- For Mapsforge, confirm the file finished downloading and is not corrupted.
If the map looks empty:
- Confirm the route is inside the downloaded region.
- Confirm the active render format matches the imported pack.
- Try zooming or recentering the route view.
If the file is too large:
- For PMTiles, extract a smaller bounding box or lower
--maxzoom. - For Mapsforge, download a smaller regional file.
If import is slow:
- Leave the import running or allow the background notification to finish.
- Prefer city, region, or country extracts instead of very large map files.
Generated from docs/how-to/offline-maps.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