Your data is always yours. These modules handle getting data in and out of Ta-Da! in multiple formats.
Importers bring data in from external sources. Each importer handles a specific file format or service.
| Module | ID | Accepts | Description |
|---|---|---|---|
| Custom CSV | csv-generic |
.csv |
Field mapping wizard for any CSV format |
| Insight Timer | insight-timer |
.csv |
Pre-configured for Insight Timer exports |
Code: app/modules/importers/
Implement the DataImporter interface and call registerImporter(). See MODULES.md and app/types/importer.ts for the interface.
Exporters get your data out in useful formats — export anytime.
| Module | ID | Format | Description |
|---|---|---|---|
| JSON | json |
.json |
Full data with version metadata |
| CSV | csv |
.csv |
Spreadsheet-compatible flat export |
| Markdown | markdown |
.md |
Human-readable grouped by category |
| Obsidian | obsidian |
.md |
Daily/weekly/monthly notes with YAML frontmatter |
Code: app/modules/exporters/
Implement the DataExporter interface and call registerExporter(). See app/types/exporter.ts for the interface.
Sync providers enable bidirectional data flow with external services.
| Module | ID | Direction | Description |
|---|---|---|---|
| Obsidian | obsidian |
Bidirectional | Sync entries as markdown files in an Obsidian vault |
Code: app/modules/sync-providers/
The Obsidian sync provider supports:
- Atomic file writes (write to
.tmp, then rename) - SHA-256 content hashing for change detection
- Soft delete via
.trashsubfolder - YAML frontmatter with full entry metadata
Implement the SyncProvider interface and call registerSyncProvider(). See app/types/syncProvider.ts for the interface.