fcandi360 downloadsSync Garmin Connect health data into your Daily Notes as frontmatter properties.
English · Deutsch · 中文 · 日本語 · Español · Français
Sync steps, sleep, heart rate, stress, activities and more from Garmin Connect into Obsidian Daily Notes — as frontmatter properties you can query with Dataview.
Desktop only. This plugin uses Electron's BrowserWindow for Garmin Connect authentication and does not work on mobile.
Note: This plugin uses Garmin Connect's internal web API through an Electron browser session — there is no official third-party API available.
Journal/2024-07/)trainings field for advanced Dataview queriesohs_ prefix to all frontmatter properties to avoid naming conflicts with other plugins---
steps: 15185
resting_hr: 69
sleep_score: 81
sleep_duration: 7h 43min
hrv: 39
stress: 30
vo2_max: 48
workout_location: Bad Honnef, Germany
---
Each workout is written as a frontmatter key with a summary string:
---
hiking: 8.2 km · 157min · Ø105 bpm · 696 kcal
e_bike: 22.1 km · 65min · Ø112 bpm · 420 kcal
---
Only days with actual workouts get activity keys. The plugin never touches your note content — it only adds or updates frontmatter properties.
Enable "Machine-readable trainings" in settings to add a structured trainings field for Dataview queries:
---
trainings:
- type: hiking
category: outdoor
distance_km: 8.2
duration_min: 157
avg_hr: 105
calories: 696
- type: e_bike
category: cycling
distance_km: 22.1
duration_min: 65
avg_hr: 112
calories: 420
---
main.js and manifest.json from the latest release.obsidian/plugins/garmin-health-sync/ in your vaultOn every Obsidian startup, the plugin checks the last 7 days and fills in any missing health data automatically. No action needed.
Open a Daily Note and run Garmin Health Sync: Sync current note from the Command Palette (Cmd/Ctrl+P).
Have years of Garmin data? You can bulk-sync any date range:
Garmin's typeKey values are normalized to cleaner canonical keys:
| Provider Key | Canonical Key | Category |
|---|---|---|
e_bike_fitness |
e_bike |
cycling |
e_bike_mountain |
e_mtb |
cycling |
resort_skiing_snowboarding |
skiing |
winter |
backcountry_skiing_snowboarding |
backcountry_skiing |
winter |
stand_up_paddleboarding |
sup |
water |
fitness_equipment |
gym_equipment |
gym |
All other Garmin keys pass through unchanged (e.g. hiking, running, cycling, swimming, strength_training, yoga, ...).
Each activity is assigned a category:
| Category | Examples |
|---|---|
cycling |
cycling, e_bike, e_mtb, mountain_biking, indoor_cycling, road_biking |
running |
running, trail_running, treadmill, ultra_run |
walking |
walking, indoor_walking |
outdoor |
hiking, mountaineering, rock_climbing, bouldering |
swimming |
swimming, pool_swimming, open_water_swimming |
winter |
skiing, backcountry_skiing, cross_country_skiing, snowboarding |
water |
sup, rowing, kayaking, surfing, sailing |
gym |
strength_training, gym_equipment, elliptical, yoga, pilates, hiit |
racket |
tennis, badminton, squash, table_tennis, pickleball |
team |
soccer, basketball, volleyball, rugby |
other |
golf, meditation, multi_sport |
This plugin makes network requests to two external services:
nominatim.openstreetmap.org for reverse geocoding. You can disable this in settings under Workout location.No data is sent to any other server.
npm install
npm run dev # watch mode
npm run build # production build