Skip to content

Managing with obsidian-stack

obsidian-stack manages one install: adding and removing vaults, checking sync, reading logs. Run with no arguments, it opens an interactive menu.

Command Does
obsidian-stack Interactive menu
obsidian-stack status Core containers, and each vault's sync state and note count
obsidian-stack vaults List vaults
obsidian-stack add / remove [id] Add a vault, or remove one (its files are kept)
obsidian-stack app enable\|disable <id> The optional Obsidian app for a vault (below)
obsidian-stack resync <id> Self-hosted LiveSync: fetch the vault again, after a device rebuilt it
obsidian-stack setup-uri <id> [--url] Setup URI for a self-hosted LiveSync vault's devices; --url changes the address they connect to
obsidian-stack logs <id\|api\|mcp\|couchdb> [-f] Logs for a vault's sync or a core container
obsidian-stack restart <id\|api\|mcp\|couchdb\|all> Restart one part, or everything
obsidian-stack update git pull, rebuild, and restart everything on the new version
obsidian-stack endpoint [--show-token] MCP URL and bearer token
obsidian-stack link [name] Add the command to /usr/local/bin
obsidian-stack manager enable\|disable Let AI tools manage this install (below)
obsidian-stack licenses [--full] Licences of the stack and of everything it uses; --full shows the full texts
obsidian-stack uninstall [--yes] Remove the install's containers, images and command; notes are kept unless chosen

Every question it asks can also be answered with an option, for scripts: obsidian-stack add --yes --name Work --source livesync --device-url https://couchdb.example.com (obsidian-stack help lists them). --yes takes the default for anything not given; secrets such as an encryption password come from environment variables, never options. status, vaults and setup-uri have --json output.

The command always acts on the install it belongs to: the folder it lives in (following the link on the PATH), or one given with --dir or $OBSIDIAN_STACK_DIR. Every container the stack creates carries a Docker label with the install's STACK_ID from .env, and the command finds containers by that label rather than by name, so other Obsidian containers on the machine are never affected.