Initialize the dither config dir, write config, and choose where the markdown library lives.
dither init is the required first step before any library-needing command will run. It writes <config-dir>/config.json, creates the library directory, starts the daemon, and lets it index + embed your library so the first dither search doesn't hang.
Library directory. Created if missing. Canonicalised via realpath. Must be a writable directory.
--no-download
download on
Skip qmd model weight prefetch (offline / CI) by disabling embedding for this init. dither index update clears it.
--no-welcome
welcome on
Skip writing <library>/welcome/welcome.md.
--no-wait
wait on
Dispatch the daemon work and return immediately; check progress with dither status.
If you don't pass --library on a TTY, init drops into an interactive prompt for the path (default: $DITHER_DIR/library, else ~/.dither/library — the library default deliberately ignores XDG). Without a TTY, --library is required and init exits with code 2 if it's missing. Cancelling the prompt exits 130 with no partial state.
Unless --no-welcome, write <library>/welcome/welcome.md (never clobbers an existing file).
Start the daemon (or reuse a running one) and — unless --no-wait — follow its reconcile: model download, indexing, embedding. Ctrl-C detaches; the daemon keeps going.
dither init is one-shot — re-running it on an already-initialised config dir is a read-only no-op. There is no --force. To change the library path, remove <config-dir>/config.json and run dither init again:
The old library directory is not moved or deleted — it stays on disk for you to handle. The qmd index also stays; drop qmd-index.sqlite if you want it rebuilt against the new library.
If the daemon is running, send it a reload after the reconfig so it picks up the new library:
dither daemon reload
Without the reload, the daemon keeps watching the previous library until it next restarts.
$ dither initWelcome to dither.? Where should your library live? (ENTER for ~/.dither/library)✓ library: ~/.dither/library (created)✓ wrote ~/.dither/config.json✓ wrote welcome doc to ~/.dither/library/welcome/welcome.md→ starting dither daemon...✓ daemon started (pid 41233)✓ indexing library — indexed 1 file✓ embedding library — embedded 4 chunks in 2.1snext: dither search 'welcome to dither' dither get <id from above>
Adopt an existing folder as the library:
$ dither init --library ~/Documents/dither✓ library: ~/Documents/dither✓ found qmd config at ~/.config/qmd/config.toml adopted 2 collections: notes, papers✓ wrote ~/.dither/config.json...
CI / offline:
$ dither init --library ~/.dither/library --no-download --no-wait✓ library: ~/.dither/library (created)✓ wrote ~/.dither/config.json✓ weights skipped (--no-download)✓ daemon started (pid 41240)✓ dispatched — daemon will finish in background dither status # check progress
Re-run is a no-op:
$ dither initdither is already initialized at ~/.dither library: ~/.dither/library