Obsync

v0.1.2

Obsidian Sync CLI for syncing vaults on headless Linux servers with full end-to-end encryption.

0· 330· 2 versions· 0 current· 0 all-time· Updated 1mo ago· MIT-0
byBurkhard Pauli@bpauli

obsync

Use obsync to sync Obsidian vaults on headless Linux servers. Requires an Obsidian Sync subscription and account credentials.

Setup (once)

  • obsync login (enter email, password, and optional MFA code)
  • For headless servers: export OBSYNC_KEYRING_BACKEND=file
  • Optionally set keyring password: export OBSYNC_KEYRING_PASSWORD=mysecret
  • Verify: obsync list

Output

  • Default: human-friendly terminal output with colors and spinners.
  • Use --json / -j for JSON output.
  • Use --verbose / -v for debug logging.

Common commands

  • Log in: obsync login
  • List vaults: obsync list
  • Pull vault: obsync pull "My Notes" ~/notes -p "e2e-password"
  • Pull and save password: obsync pull "My Notes" ~/notes -p "e2e-password" -s
  • Push local changes: obsync push "My Notes" ~/notes -p "e2e-password"
  • Watch (continuous sync): obsync watch "My Notes" ~/notes -p "e2e-password"
  • Install systemd service: obsync install "My Notes" ~/notes
  • Check service status: obsync status "My Notes"
  • View service logs: journalctl --user -u obsync@<vault-id>.service -f
  • Uninstall service: obsync uninstall "My Notes"

Flags

  • -p, --password — E2E encryption password
  • -s, --save-password — save E2E password to keyring for future use
  • -v, --verbose — enable debug logging
  • -j, --json — JSON output to stdout
  • --config — path to config file (or OBSYNC_CONFIG env var)
  • --version — print version and exit

Notes

  • Requires a valid Obsidian Sync subscription.
  • E2E encryption uses AES-256-GCM with scrypt key derivation.
  • Pull/push compare files by SHA-256 hash — only changed files are transferred.
  • Watch mode uses WebSocket for remote changes and fsnotify for local changes (500ms debounce).
  • Large files are handled with 2MB chunked transfers.
  • Automatic reconnection with exponential backoff (1s-60s) on connection loss.
  • The .obsidian/ directory (themes, plugins, settings) is synced.
  • For headless servers without a desktop keyring, use OBSYNC_KEYRING_BACKEND=file.
  • For always-on sync on headless servers, enable lingering: loginctl enable-linger $USER.
  • Config is stored at ~/.config/obsync/config.json.

Version tags

latestvk97f1kt9yg6cpt6vcg706j5ggx82asx7

Runtime requirements

🔄 Clawdis
OSmacOS · Linux
Binsobsync

Install

Homebrew (recommended)
Bins: obsync
brew install bpauli/tap/obsync