|
| 1 | +--- |
| 2 | +name: obsync |
| 3 | +description: Obsidian Sync CLI for syncing vaults on headless Linux servers with full end-to-end encryption. |
| 4 | +homepage: https://github.com/bpauli/obsync |
| 5 | +metadata: |
| 6 | + { |
| 7 | + "openclaw": |
| 8 | + { |
| 9 | + "emoji": "🔄", |
| 10 | + "os": ["darwin", "linux"], |
| 11 | + "requires": { "bins": ["obsync"] }, |
| 12 | + "install": |
| 13 | + [ |
| 14 | + { |
| 15 | + "id": "homebrew", |
| 16 | + "kind": "homebrew", |
| 17 | + "formula": "bpauli/tap/obsync", |
| 18 | + "bins": ["obsync"], |
| 19 | + "label": "Homebrew (recommended)", |
| 20 | + }, |
| 21 | + { |
| 22 | + "id": "source", |
| 23 | + "kind": "source", |
| 24 | + "url": "https://github.com/bpauli/obsync", |
| 25 | + "bins": ["obsync"], |
| 26 | + "label": "Build from source (Go 1.25+)", |
| 27 | + }, |
| 28 | + ], |
| 29 | + }, |
| 30 | + } |
| 31 | +--- |
| 32 | + |
| 33 | +# obsync |
| 34 | + |
| 35 | +Use `obsync` to sync Obsidian vaults on headless Linux servers. Requires an Obsidian Sync subscription and account credentials. |
| 36 | + |
| 37 | +Setup (once) |
| 38 | + |
| 39 | +- `obsync login` (enter email, password, and optional MFA code) |
| 40 | +- For headless servers: `export OBSYNC_KEYRING_BACKEND=file` |
| 41 | +- Optionally set keyring password: `export OBSYNC_KEYRING_PASSWORD=mysecret` |
| 42 | +- Verify: `obsync list` |
| 43 | + |
| 44 | +Output |
| 45 | + |
| 46 | +- Default: human-friendly terminal output with colors and spinners. |
| 47 | +- Use `--json` / `-j` for JSON output. |
| 48 | +- Use `--verbose` / `-v` for debug logging. |
| 49 | + |
| 50 | +Common commands |
| 51 | + |
| 52 | +- Log in: `obsync login` |
| 53 | +- List vaults: `obsync list` |
| 54 | +- Pull vault: `obsync pull "My Notes" ~/notes -p "e2e-password"` |
| 55 | +- Pull and save password: `obsync pull "My Notes" ~/notes -p "e2e-password" -s` |
| 56 | +- Push local changes: `obsync push "My Notes" ~/notes -p "e2e-password"` |
| 57 | +- Watch (continuous sync): `obsync watch "My Notes" ~/notes -p "e2e-password"` |
| 58 | +- Install systemd service: `obsync install "My Notes" ~/notes` |
| 59 | +- Check service status: `obsync status "My Notes"` |
| 60 | +- View service logs: `journalctl --user -u obsync@<vault-id>.service -f` |
| 61 | +- Uninstall service: `obsync uninstall "My Notes"` |
| 62 | + |
| 63 | +Flags |
| 64 | + |
| 65 | +- `-p, --password` — E2E encryption password |
| 66 | +- `-s, --save-password` — save E2E password to keyring for future use |
| 67 | +- `-v, --verbose` — enable debug logging |
| 68 | +- `-j, --json` — JSON output to stdout |
| 69 | +- `--config` — path to config file (or `OBSYNC_CONFIG` env var) |
| 70 | +- `--version` — print version and exit |
| 71 | + |
| 72 | +Notes |
| 73 | + |
| 74 | +- Requires a valid Obsidian Sync subscription. |
| 75 | +- E2E encryption uses AES-256-GCM with scrypt key derivation. |
| 76 | +- Pull/push compare files by SHA-256 hash — only changed files are transferred. |
| 77 | +- Watch mode uses WebSocket for remote changes and fsnotify for local changes (500ms debounce). |
| 78 | +- Large files are handled with 2MB chunked transfers. |
| 79 | +- Automatic reconnection with exponential backoff (1s-60s) on connection loss. |
| 80 | +- The `.obsidian/` directory (themes, plugins, settings) is synced. |
| 81 | +- For headless servers without a desktop keyring, use `OBSYNC_KEYRING_BACKEND=file`. |
| 82 | +- For always-on sync on headless servers, enable lingering: `loginctl enable-linger $USER`. |
| 83 | +- Config is stored at `~/.config/obsync/config.json`. |
0 commit comments