Johannes Kaindl22 downloadsImport Apple Health exports and explore your health data in charts and tables.
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.
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.
Aus dem Community-Store (empfohlen): In Obsidian → Einstellungen → Community-Plugins → Durchsuchen → nach „Health Vitals" suchen → Installieren → Aktivieren.
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 Einstellungen →
Community-Plugins aktivieren.
Das Plugin ist Desktop-only (isDesktopOnly: true) — der Import mehrere Gigabyte
großer XML-Dateien ist nur auf dem Desktop sinnvoll.
Export.zip auf den Rechner bringen.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.
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.
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:
Charts sind handgezeichnetes SVG ohne Chart-Library und nutzen ausschließlich Obsidian-Theme-Variablen — sie passen sich also jedem Theme (hell/dunkel/ Community) an.
Die Darstellung richtet sich nach der Art der Metrik:
| Art | Beispiele | Aggregation | Chart |
|---|---|---|---|
sum |
Schritte, Kalorien | Tages-Summe | Balken |
measure |
Gewicht, Puls | Ø mit Min/Max | Linie + Band |
duration |
Schlaf, Achtsamkeit | Minuten-Summe | Balken |
Bei Wochen-/Monatsbündelung wird entsprechend summiert bzw. gemittelt (nicht summiert) — ein Ø-Puls über einen Monat bleibt ein Mittelwert.
Gesundheitsdaten sind besonders sensibel. Deshalb:
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.
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.
Copyright © 2026 Johannes Kaindl
Lizenziert unter der GNU AGPL v3.0 oder später.