Quay CLI — overview
quay-cli is a small Rust binary that exists for one job: run the
desktop app’s scheduled backups when the desktop app isn’t open.
The desktop app’s scheduler ticks every 60 seconds while Quay is running. That’s enough for “back this up at 3am, my Mac will be open” but not for “back up nightly even if my laptop is closed and the office Mac mini is asleep”. The CLI fills that gap:
- Reads the same
schedules.jsonthe desktop app writes. - Reads the same
connections.jsonfor credentials. - Dumps to the same on-disk format (
<conn-name>-<UTC stamp>.sqlor.jsonl) at the same default path (~/Documents/Quay-backups/). - Persists
last_run_at+last_statusback so the desktop app’s schedule list shows progress next time you open it.
It’s stateless. Both files are read-mostly. The CLI doesn’t own schedule or connection definitions — those still live with the app where you can edit them visually.
When to use it
Section titled “When to use it”| Scenario | Tool |
|---|---|
| ”Back up at 3am, my workstation is on overnight” | Desktop app’s scheduler is fine |
| ”Back up at 3am whether or not the app is open” | CLI as launchd / systemd unit |
| ”Back up from a server with no display (headless box)“ | CLI only |
| ”Back up from CI / a build pipeline” | quay schedule run-once <id> |
Subcommands
Section titled “Subcommands”quay schedule list # print every schedule with last-run + statusquay schedule run-once <id> # fire one schedule immediately, ignoring cronquay daemon # run the cron loop forever (the unit invokes this)Install → quay schedule →
quay daemon → launchd / systemd unit.
Engine support (CLI v0.1)
Section titled “Engine support (CLI v0.1)”| Engine | CLI | Desktop app |
|---|---|---|
| PostgreSQL | ✅ | ✅ |
| MySQL / MariaDB | ✅ | ✅ |
| SQLite | ✅ (file copy) | ✅ |
| Redis | ✅ (JSONL of KEYS * + GET) | ✅ |
| MongoDB | ❌ — defer to v0.2 (mongodb crate dep churn) | ✅ |
| MSSQL · DuckDB · ClickHouse · Cassandra · cloud warehouses · vector DBs | not yet | ✅ |
For engines the CLI doesn’t cover, leave the schedule on the desktop app — the daemon skips them with a clear status message instead of failing.
Where Quay stores the files the CLI reads
Section titled “Where Quay stores the files the CLI reads”| File | macOS | Linux |
|---|---|---|
| Schedules | ~/Library/Application Support/com.unclez.quay/schedules.json | ~/.config/quay/schedules.json |
| Connections | ~/Library/Application Support/com.unclez.quay/connections.json | ~/.config/quay/connections.json |
If you’ve never opened the desktop app on this machine, those files
won’t exist yet — quay schedule list returns “no schedules” and you
need to either run the app once to create them, or hand-write the JSON
(format reference).