# De opdrachtregel exporter

Voer je exports uit vanuit Terminal, cron, back-uptools en agents.

`exporter` is de Mac-app Exporter zonder venster. Hij gebruikt dezelfde verbindingen, exportmappen, selectie en instellingen die je in de app hebt ingesteld, en schrijft naar hetzelfde exportlogboek. Hij werkt terwijl de app gesloten is en stelt nooit vragen: ontbreekt er iets, dan stopt de export met exitcode 2 en één regel die zegt wat je moet doen. Alleen macOS.

## Installeren

1. Installeer Exporter uit de Mac App Store ([downloaden](https://exporter.dev/download)) en open hem.
2. Verbind een app (Apple Notities, Bear, Logseq, Contacten, Berichten of Schermtijd) of een map met documenten, en kies de exportmap ([aan de slag](https://exporter.dev/docs/getting-started)). Deze toestemmingen kun je alleen in de app geven.
3. Druk op de kaart Opdrachtregel in de app op "installatiecommando kopiëren" en plak het één keer in Terminal.

De app draait in een sandbox en kan niet naar je PATH schrijven; daarom is de laatste stap plakken. De regel installeert `exporter` in `/opt/homebrew/bin` als die map bestaat en van jou is (geen sudo), anders in `/usr/local/bin` met sudo. Hem nog eens plakken kan geen kwaad; hij vervangt wat er stond. `exporter help install` toont de regel voor jouw Mac.

## Bronnen

`--source` accepteert een van deze:

| bron | ook geaccepteerd | schrijft |
| --- | --- | --- |
| `apple` | `apple-notes`, `applenotes`, `notes` | markdown of html |
| `bear` | | markdown of html |
| `logseq` | | altijd markdown |
| `contacts` | `apple-contacts`, `addressbook` | altijd markdown |
| `messages` | `imessage`, `chats`, `conversations` | altijd markdown |
| `screentime` | `screen-time`, `usage` | altijd markdown, één bestand per dag |
| `documents` | `docs`, `files`, `pdf` | de formaten die op de kaart Documenten zijn aangevinkt |

## Formaten

`--format` accepteert `markdown` (of `md`) of `html`; hoofdletters maken niet uit. Al het andere stopt met `error: --format pdf: expected markdown | html` en exit 64.

- zonder deze flag schrijft `sync` elke app in het formaat dat op zijn kaart is ingesteld (Apple Notities en Bear hebben elk een eigen instelling) en schrijft `export` de instelling van de app die hij exporteert; `exporter help sync` en `exporter help export` tonen de huidige
- Logseq, Contacten, Berichten en Schermtijd zijn altijd markdown, en Documenten schrijft de formaten die op zijn kaart zijn aangevinkt, dus voor hen wordt `--format html` genegeerd met een melding: `note: logseq export is always markdown, so --format is ignored for this source.`
- Apple Notities schrijft één `.html`-pagina per notitie ([het HTML-formaat](https://exporter.dev/docs/notes#markdown-and-html)), met bijlagen gekopieerd naar `attachments/` ernaast en gelinkt, zonder front matter. De HTML van Bear is de platte tekst van de notitie in een `<pre>`, zonder opmaak, en verwijzingen naar bijlagen blijven Markdown-tekst: de bestanden worden gekopieerd, niet gelinkt
- de MCP-server leest alleen markdown-bestanden, dus een export die alleen uit HTML bestaat, is voor hem onzichtbaar
- Apple Notities en Bear schrijven één formaat per export; alleen Documenten schrijft beide in één synchronisatie. Een export verwijdert alleen oude bestanden van zijn eigen formaat, dus na overschakelen blijven de bestanden van het andere formaat in de map staan. Wil je beide formaten, geef elk dan een eigen map:

```sh
exporter export --dest ~/Backups/notes-md   --format markdown
exporter export --dest ~/Backups/notes-html --format html
```

## sync

Voert de export uit die je in de app hebt ingesteld, één keer, incrementeel, naar de exportmappen van de app.

```sh
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
```

| flag | wat hij doet | standaard |
| --- | --- | --- |
| `--source <source>` | alleen deze app, herhaalbaar | elke verbonden app; niet verbonden apps worden overgeslagen |
| `--format markdown\|html` | alleen voor deze export, je instelling in de app blijft ongewijzigd. Het resultaat komt in dezelfde exportmap als het andere formaat; wil je beide houden, exporteer elk dan naar een eigen map met `export --dest` | je instelling in de app |
| `--full` | alles opnieuw exporteren. Het verwijdert vóór het schrijven alleen de bestanden die Exporter schreef; al het andere in de exportmap blijft staan | uit |
| `--json` | een machineleesbaar overzicht | uit |
| `--quiet`, `-q` | alleen fouten | uit |

```sh
exporter sync --source apple
```

```text
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
```

De overzichtsregel is `<source>: <succeeded> of <selected> exported`, dan, als ze er zijn, `N failed`, `N removed` (bestanden van items die zijn verwijderd, hernoemd of verplaatst), `N attachment issues`, en daarna de duur, het formaat en de map waarnaar geschreven is.

Draait de app, dan exporteert `sync` niets, eindigt met 0 en toont `Exporter is running: real-time sync is live, the export root is already current.`

## export

Een eenmalige export naar een map naar keuze, voor momentopnamen en scripts. Werkt prima terwijl de app open is.

```sh
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
```

| flag | wat hij doet | standaard |
| --- | --- | --- |
| `--dest <folder>` | verplicht. Moet binnen een map liggen waarvoor toestemming is gegeven op de kaart Opdrachtregel in de app ("map toevoegen…"). Toestemming voor `~/Backups` geldt voor elke map daaronder | geen |
| `--source <source>` | de app om te exporteren | `apple` |
| `--format markdown\|html` | het formaat voor deze export | je instelling in de app |
| `--organize folders\|tags\|smart` | alleen Apple Notities: hoe notities over mappen worden verdeeld | je instelling in de app |
| `--folder "Name"` | alleen deze map van Apple Notities, herhaalbaar, naam hoofdletterongevoelig | de selectie die in de app is bewaard |
| `--tag name` | alleen deze tag, herhaalbaar, Apple Notities of Bear | de selectie die in de app is bewaard |
| `--dry-run` | tonen wat er geëxporteerd zou worden, niets schrijven | uit |
| `--json`, `--quiet` (`-q`) | zoals bij sync | uit |

Zonder `--folder` of `--tag` exporteren Apple Notities en Bear de selectie die in de app is bewaard. Logseq exporteert de hele graph, Contacten elke kaart, Berichten elk gesprek, Schermtijd elke dag; filters worden voor hen genegeerd, met een melding.

```sh
exporter export --dest ~/Backups/notes-$(date +%F)
exporter export --dest ~/Backups/work --folder "Work" --format html
exporter export --dest ~/Backups/bear --source bear --tag journal
exporter export --dest ~/Backups/people --source contacts
exporter export --dest ~/Backups/papers --source documents
exporter export --dest ~/Backups/notes --dry-run
```

```text
would export 100 apple notes · markdown → /Users/me/Backups/notes
```

## list

```sh
exporter list sources|folders|tags|dests [--source apple|bear] [--json]
```

| list | wat het toont | JSON |
| --- | --- | --- |
| `sources` | elke app, verbonden of niet, met het aantal. Documenten wordt niet getoond | `[{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}]`, met `pages` voor logseq, `contacts`, en `days` voor `screen-time` |
| `folders` | mappen van Apple Notities met het aantal notities, ingesprongen naar diepte. `--source bear` is een fout (exit 64) | `[{"name": "Work", "notes": 42, "level": 0}]` |
| `tags` | tags met aantallen, standaard Apple Notities, Bear met `--source bear` | `[{"name": "journal", "notes": 12}]` |
| `dests` | mappen waarnaar `export --dest` mag schrijven, plus de exportmap van elke app | `[{"path": "/Users/me/Backups", "kind": "granted"}]`, waarbij `kind` `granted`, `granted, volume not mounted` of `export root (apple-notes)` is |

```sh
exporter list folders --json
```

```json
[{"name": "Work", "notes": 42, "level": 0}]
```

## status

```sh
exporter status [--json]
```

```text
apple notes    connected · last export 2026-09-11 03:00
bear           not connected
logseq         not connected
contacts       not connected
messages       connected · last export 2026-09-11 03:01
screen time    not connected
documents      not connected
root (apple-notes)  /Users/me/Documents/notes
root (messages)  /Users/me/Documents/messages
destinations   /Users/me/Backups
version        3.24 · free · 100 of 100 free notes used
messages       free · 10 of 10 free conversations used
app            not running
```

Met `--json`: één object per app, genaamd `apple-notes`, `bear`, `logseq`, `contacts`, `messages`, `screen-time`, `documents`, elk `{"connected": true, "lastExport": "2026-09-11 03:00"}` (`null` als er nooit is geëxporteerd); `destinations` (paden); `tier` (`full` of `free`, de ontgrendeling van Apple Notities) en `freeNotesUsed`; `contactsTier` en `freeContactsUsed`; `messagesTier` en `freeConversationsUsed`; `screenTimeTier` en `freeDaysUsed`; `appRunning`. Tijden zijn lokaal, `yyyy-MM-dd HH:mm`.

## log

De recente exports, nieuwste eerst: hetzelfde logboek dat de app toont, uit elke exportmap en elke `--dest`-map met toestemming. Mappen met een datum die onder een map met toestemming zijn aangemaakt, worden niet gelezen; hun verslag staat in `<folder>/.exporter/`.

```sh
exporter log [--last N] [--json]
```

| flag | wat hij doet | standaard |
| --- | --- | --- |
| `--last N` | hoeveel exports | 10 |
| `--json` | één object per export | uit |

```text
2026-09-11 03:00  apple-notes   1204/1204 exported  3 removed  clean  → /Users/me/Documents/notes
```

JSON: `[{"source", "finishedAt", "selected", "succeeded", "failed", "format", "status", "destination", "prunedFiles", "runError"}]`. `status` is `clean`, `warnings` (bijlagen ontbreken) of `failures`.

## doctor

Controleert of exporteren zonder venster zal werken en toont één regel per controle: `ok`, `FAIL` met een regel `fix:` eronder, `warn`, of `--` ter informatie.

```sh
exporter doctor
```

Hij controleert of de database van elke verbonden app leesbaar is en de exportmap schrijfbaar, of elke bewaarde maptoestemming nog klopt, of elke `--dest`-map schrijfbaar is, de index, en de geïnstalleerde opdracht. Hij sluit af met de versie, of de app draait, en de laatste crash als die er was. Exit 0 toont `all good.`, exit 2 toont `N problem(s) found.`

## report

Toont een diagnoserapport (versie van de app, macOS en hardware, verbindingsstatus, recente exports, laatste crash; geen inhoud van notities) en kopieert het naar het klembord.

```sh
exporter report [--send] [--email <addr>]
```

| flag | wat hij doet | standaard |
| --- | --- | --- |
| `--send` | stuurt het rapport naar ons en toont `sent.`, of `offline: queued, will send on the next run or app launch.` | uit |
| `--email <addr>` | voegt je adres toe zodat we kunnen antwoorden | geen |

## help en versie

- `exporter help [topic]`: onderwerpen `sync`, `export`, `list`, `status`, `log`, `doctor`, `report`, `cron`, `install`. De help voor een opdracht toont je huidige instellingen als standaardwaarden
- `sync`, `export`, `list`, `log` en `report` accepteren ook `--help` of `-h`
- `exporter version` (of `--version`, `-v`) toont `exporter 3.24`
- `exporter` zonder meer in een terminal toont het overzicht en eindigt met 64

## JSON-uitvoer

`--json` werkt bij `sync`, `export`, `list`, `status` en `log`. De uitvoer is netjes opgemaakt met gesorteerde sleutels. Voeg bij `sync` en `export` `--quiet` toe: zonder die flag komen de voortgangs- en meldingsregels vóór de JSON op stdout. `export` toont één overzichtsobject, `sync` toont `{"runs": [...]}` met één per bron:

```json
{
  "attachmentIssues" : 0,
  "durationSec" : 18.2,
  "failed" : 0,
  "format" : "markdown",
  "root" : "/Users/me/Documents/notes",
  "runError" : null,
  "selected" : 1204,
  "source" : "apple-notes",
  "status" : "clean",
  "succeeded" : 1204
}
```

Terwijl de app draait, toont `sync` zijn ene regel en geen JSON. Fouten gaan naar stderr als `error: <what happened and what to do>`.

## Exitcodes

| code | betekenis |
| --- | --- |
| 0 | ok, ook een export die door de gratis hoeveelheid is ingekort |
| 1 | exportfouten: een item mislukte, de export stuitte op een fout, of hij selecteerde items en schreef er geen |
| 2 | instellen nodig: app niet verbonden, geen toestemming voor de map, map of tag niet gevonden, niets te exporteren; `doctor` vond problemen; de geïnstalleerde opdracht heeft een oud formaat of de app waar hij naar wijst is weg |
| 64 | gebruik: onbekende opdracht of flag, ontbrekende of foute waarde, `--folder` met Bear, `list folders --source bear`, `exporter` zonder meer in een terminal |

## Waar bestanden terechtkomen

`sync` schrijft naar de exportmap die voor elke app in Exporter is ingesteld, zoals `~/Documents/notes` of `~/Documents/messages`; `export` schrijft naar `--dest`. Een map in je thuismap of één niveau lager, zoals `~/Documents` zelf, krijgt een submap per app (`notes-export`, `messages-export` enzovoort), en een map die dieper ligt, wordt gebruikt zoals hij is. De overzichtsregel (na de pijl) en `root` in de JSON tonen de echte map.

Elke exportmap bevat `.exporter/last-export.json` en `.exporter/last-export.md` (de laatste export) en `.exporter/history/` (de laatste 50 exports). Apple Notities, Contacten, Berichten, Schermtijd en Documenten houden ook `.exporter/files.json` bij, elk bestand dat een export schreef: de volgende export verwijdert alleen bestanden uit die lijst die door geen enkel item meer worden gemaakt (Schermtijd verwijdert nooit een dagbestand). Bear en Logseq verwijderen bij de volgende export ook de bestanden van notities die je verwijderde, hernoemde of een andere tag gaf. Exports van Apple Notities en Logseq krijgen ook `bases/` met weergaven voor Obsidian.

## Gratis hoeveelheid

De opdrachtregel heeft dezelfde gratis hoeveelheden als de app:

| app | gratis |
| --- | --- |
| Apple Notities | 100 notities |
| Contacten | 100 contacten |
| Berichten | de 10 recentste gesprekken |
| Schermtijd | de 10 recentste dagen bij de eerste synchronisatie, en alleen die: voor latere dagen heb je de ontgrendeling nodig |
| Documenten | de 10 laatst gewijzigde documenten |
| Bear en Logseq | onbeperkt |

Items die al zijn geëxporteerd, blijven gratis opnieuw synchroniseren; de gratis hoeveelheid houdt alleen nieuwe items tegen. Een export die de grens bereikt, exporteert nog wat mag, eindigt met 0 en toont een melding (niet met `--quiet`):

```text
note: 42 note(s) skipped: free version limit (100 of 100 free notes). upgrade in the app to export everything.
note: 58 contact(s) skipped: free version limit (100 of 100 free contacts). unlock contacts in the app to export everything.
note: 1522 conversation(s) skipped: free version limit (10 of 10 free conversations). unlock messages in the app to export everything.
note: 11 day(s) skipped: free version limit (10 of 10 free days). unlock screen time in the app to archive every day.
note: 5 document(s) skipped: free version limit (10 of 10 free documents). unlock documents in the app to convert every one.
```

`status --json` bevat de versie en het gebruikte aantal voor Apple Notities, Contacten, Berichten en Schermtijd. Elke beperkte app ontgrendel je met een eigen eenmalige aankoop in Exporter, [met een prijs per land](https://exporter.dev/pricing), zonder abonnement en zonder webkassa. De opdrachtregel leest de aankoop bij elke export; antwoordt de App Store niet binnen 5 seconden, dan gaat de export verder met de gratis hoeveelheid.

## Planning

`exporter help cron` toont deze regels met het volledige pad van de opdracht op jouw Mac: gebruik dat, want het PATH van cron bevat de installatiemap misschien niet. Schrijf in een crontab `%` als `\%`:

```sh
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
```

Voor Carbon Copy Cloner en andere back-uptools: voer `exporter sync` uit als voorafgaand script en vertak op de exitcode. De opdracht blijft verbonden tijdens de hele export, ook als macOS hem pauzeert terwijl niemand is ingelogd. Zolang de app draait, met zijn venster open of dicht, doet `sync` niets: realtime synchronisatie houdt de map al actueel.

## MCP-server

De app, niet de opdrachtregel, draait een lokale MCP-server waarmee Claude, Cursor, VS Code en andere clients je exports kunnen doorzoeken en lezen, op `http://localhost:8744/mcp`. [De pagina over de MCP-server](https://exporter.dev/docs/mcp) behandelt alles erover, van starten tot de zes tools.

## Problemen oplossen

Voer eerst `exporter doctor` uit; elke mislukte controle toont de oplossing. [Hulp](https://exporter.dev/docs/help) behandelt ook de meldingen van de app.

- `X is not authorized`: voeg de map (of een bovenliggende map) toe op de kaart Opdrachtregel en voer het opnieuw uit. `exporter list dests` toont waarvoor toestemming is
- `apple notes is not set up. open Exporter and connect Apple Notes + an export folder.` (hetzelfde voor elke app): verbind hem in Exporter
- `sync` meldt dat Exporter draait: niets te doen, de app houdt de map actueel. Gebruik `export --dest` voor een aparte kopie
- `no notes were written. run "exporter doctor" to check folders and permissions.`: de export selecteerde notities en schreef er geen; `doctor` controleert de mappen en toestemmingen
- `bookmark broken`: de map is verplaatst, verwijderd, of het volume is niet gekoppeld. Kies de map opnieuw in de app
- de geïnstalleerde opdracht heeft een oud formaat, of cron en back-uptools zien exit 19: plak het installatiecommando opnieuw
- de app is verplaatst sinds je de opdracht installeerde: plak het installatiecommando opnieuw
- ontgrendeld, maar de export zegt gratis: de aankoopcontrole wacht maximaal 5 seconden en gaat dan verder met de gratis hoeveelheid. Voer het opnieuw uit
- een probleem dat doctor niet kan verklaren: `exporter report --send --email you@example.com`

## Related

- [MCP server](https://exporter.dev/docs/mcp): Connect Claude and other agents
- [For agents](https://exporter.dev/agents): Skills, command line and MCP for agents
- [Apple Notes](https://exporter.dev/docs/notes): Folders, fields, HTML and fixes
- [Changelog](https://exporter.dev/changelog): What changed in each version

---

human version: https://exporter.dev/nl/docs/cli
every page: https://exporter.dev/llms.txt
