Health Vitals

approved

by Johannes Kaindl

Import Apple Health exports and explore your health data in charts and tables. - This plugin has not been manually reviewed by Obsidian staff.

22 downloadsUpdated 15d agoAGPL-3.0

Health Vitals

Obsidian-Plugin, das Apple-Health-Exports einliest und die Daten im Vault durchsuchbar und visualisierbar macht.

Kein HealthKit-Zugriff — Obsidian läuft in Electron, HealthKit ist eine native iOS/macOS-API. Das Plugin arbeitet mit der Export-Datei, die du dir aus der Health-App schickst.

Warum

Apples Export.xml ist schnell mehrere Gigabyte groß (im Testfall 2,6 GB mit 5,7 Mio Records). Übliche XML-Parser laden das komplett in den Speicher und stürzen ab. Dieses Plugin parst streamend (SAX-artig, chunk-weise) und legt nur kompakte Tages-Aggregate ab — der Cache aus 5,7 Mio Records ist ~2,7 MB.

Installation

Aus dem Community-Store (empfohlen): In Obsidian → EinstellungenCommunity-PluginsDurchsuchen → nach „Health Vitals" suchen → InstallierenAktivieren.

Manuell: Von der Releases-Seite main.js, manifest.json und styles.css des neuesten Releases herunterladen und in den Ordner <Vault>/.obsidian/plugins/health-vitals/ legen, dann in EinstellungenCommunity-Plugins aktivieren.

Das Plugin ist Desktop-only (isDesktopOnly: true) — der Import mehrere Gigabyte großer XML-Dateien ist nur auf dem Desktop sinnvoll.

Nutzung

  1. In der Health-App (iPhone): Profil → Alle Gesundheitsdaten exportieren → die entstehende Export.zip auf den Rechner bringen.
  2. In Obsidian: Ribbon-Icon Health Vitals Dashboard (oder Command-Palette → „Health Vitals: Dashboard öffnen").
  3. Im Dashboard „Export auswählen" klicken und die Export.zip (oder eine entpackte Export.xml) im Dateidialog wählen.

Der Lauf dauert bei großen Exports einige Minuten. Fortschritt, Phase und ein Abbrechen-Button stehen währenddessen im Dashboard; danach öffnet sich die Übersicht automatisch.

Ergebnis ist health-cache.json im Plugin-Verzeichnis: Tages-Aggregate je Metrik plus eine Workout-Liste.

Die Oberfläche ist zweisprachig (Deutsch/Englisch) und folgt automatisch der UI-Sprache von Obsidian — deutsche Obsidian-Oberfläche zeigt Deutsch, jede andere Englisch. Es gibt dafür keine eigene Einstellung.

Zugriff außerhalb des Vaults

Dieses Plugin liest eine Datei außerhalb deines Vaults: den Health-Export, den du im Dateidialog auswählst. Das ist nötig, weil ein Apple-Health-Export mehrere Gigabyte groß ist und nicht sinnvoll in einen Vault gehört. Diese Export-Datei selbst wird ausschließlich gelesen — nichts davon wird geschrieben, verschoben oder irgendwohin gesendet. Die daraus ausgewerteten Daten landen als health-cache.json im Plugin-Verzeichnis auf deinem Rechner.

Dashboard

Command-Palette → „Health Vitals: Dashboard öffnen" (oder das Ribbon-Icon). Das Dashboard lädt health-cache.json lazy beim Öffnen — der Vault-Start bleibt unbelastet. Drei Tabs:

  • Übersicht — Kachel je Metrik mit Kennzahl und Sparkline. Metriken lassen sich per Stern als Favorit oben anpinnen (bleibt gespeichert); der Rest ist nach Kategorie gruppiert und ausklappbar.
  • Detail — Klick auf eine Kachel öffnet die Zeitreihe: Zeitraum-Presets 1M / 3M / 1J / Alles, darunter die passenden Kennzahlen. Lange Zeiträume werden automatisch gebündelt (Tage → Wochen → Monate), damit der Chart lesbar bleibt.
  • Workouts — Workouts pro Monat als Balken, darunter die letzten Einheiten mit Typ, Datum und Dauer.

Charts sind handgezeichnetes SVG ohne Chart-Library und nutzen ausschließlich Obsidian-Theme-Variablen — sie passen sich also jedem Theme (hell/dunkel/ Community) an.

Wie Metriken aggregiert werden

Die Darstellung richtet sich nach der Art der Metrik:

ArtBeispieleAggregationChart
sumSchritte, KalorienTages-SummeBalken
measureGewicht, PulsØ mit Min/MaxLinie + Band
durationSchlaf, AchtsamkeitMinuten-SummeBalken

Bei Wochen-/Monatsbündelung wird entsprechend summiert bzw. gemittelt (nicht summiert) — ein Ø-Puls über einen Monat bleibt ein Mittelwert.

Datenschutz

Gesundheitsdaten sind besonders sensibel. Deshalb:

  • Alles bleibt lokal. Das Plugin sendet nichts nach außen, es gibt keine Netzwerkaufrufe.
  • health-cache.json ist gitignored — es landet nie versehentlich in einem Repo. Es gibt keinen import/-Ordner mehr; der Export wird direkt aus dem Dateidialog gelesen, ohne dass etwas ins Plugin-Verzeichnis kopiert wird.
  • isDesktopOnly: true — der Import großer XML-Dateien ist nur auf dem Desktop sinnvoll.

Wenn du deinen Vault synchronisierst, liegt health-cache.json im Plugin-Ordner unter .obsidian/ und wird je nach Sync-Konfiguration mitgenommen — das ist bewusst deine Entscheidung.

Entwicklung

npm run dev        # esbuild watch
npm run build      # typecheck + production bundle → main.js
npm test           # vitest
npm run typecheck  # tsc --noEmit
npm run lint       # eslint (obsidianmd, type-checked)
npm run deploy     # build + copy nach $OBSIDIAN_PLUGIN_DIR

Der Code ist in eine reine Kern-Schicht (src/core/ — Parser, Aggregation, Chart-Geometrie, ViewModels; ohne obsidian-Import, in Node testbar) und eine Obsidian-Schicht (src/obsidian/ — View, SVG-Rendering, Dateizugriff) getrennt. Konventionen und Architektur-Notizen: AGENTS.md.

Hinweis für Beiträge: Renderer-spezifisches Verhalten (SVG-DOM, ItemView, Web-Worker) ist in Node-Unit-Tests unsichtbar — Änderungen an der Obsidian-Schicht brauchen zusätzlich einen manuellen Test in echtem Obsidian.

Lizenz

Copyright © 2026 Johannes Kaindl

Lizenziert unter der GNU AGPL v3.0 oder später.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.