quay schedule
quay schedule is the read/test surface — list what the daemon will
fire, or fire one now to verify a schedule works without waiting for
its cron tick.
quay schedule list
Section titled “quay schedule list”Print every schedule with its label, cron, enabled flag, and last run.
$ quay schedule listid label cron enabled lastddf7a4d9-e521-4... nightly prod pg 0 3 * * * yes 2026-05-09T03:00:01Z ok: 84 tables, 12,402 rows8b3d2117-45ac-9... hourly redis cache 0 * * * * yes 2026-05-09T19:00:00Z ok: 1,248 keys5e1f8203-91bb-2... weekly mongo prod 0 4 * * 0 no (never)Columns:
| Column | What it means |
|---|---|
id | Schedule UUID — pass to run-once |
label | Human label set in the desktop app |
cron | 5-field cron expression (UTC) |
enabled | Whether the daemon will fire this on its tick |
last | ISO timestamp of last run + summary |
If no schedules show, your config dir is empty. Either open the
desktop app and add some via Settings → Pro Plus → Scheduled
backups, or hand-write schedules.json (format below).
quay schedule run-once <id>
Section titled “quay schedule run-once <id>”Fire one schedule immediately. Useful for:
- Verifying a new schedule works before committing to the cron
- Manual one-off backups from a script (
quay schedule run-once ddf7a4d9...from your CI) - Triage: if
last_statusshows a failure, re-run to catch it live
$ quay schedule run-once ddf7a4d9-e521-4...nightly prod pg: ok: 84 tables, 12,402 rowsThe summary is also persisted to schedules.json so the desktop app’s
schedule list reflects the run.
schedules.json format
Section titled “schedules.json format”The desktop app writes this; the CLI reads it. Same shape on both sides:
{ "schedules": [ { "id": "ddf7a4d9-e521-4abc-9999-12345abcdef0", "label": "nightly prod pg", "connection_id": "<id from connections.json>", "cron": "0 3 * * *", "dest_id": null, "enabled": true, "last_run_at": "2026-05-09T03:00:01Z", "last_status": "ok: 84 tables, 12,402 rows" } ]}| Field | Notes |
|---|---|
id | UUID — generate via the app or uuidgen |
label | Free-form |
connection_id | Must match an id in connections.json |
cron | Standard 5-field cron (min hour dom mon dow) in UTC |
dest_id | Cloud upload destination id, or null for local-only |
enabled | true to participate in the daemon tick loop |
last_run_at / last_status | Written back by the daemon — leave empty when hand-creating |
Cron expression
Section titled “Cron expression”Standard 5-field cron in UTC:
| Expression | Fires |
|---|---|
0 3 * * * | Daily at 03:00 UTC |
0 * * * * | Every hour, on the minute |
*/15 * * * * | Every 15 minutes |
0 4 * * 0 | Weekly Sunday at 04:00 UTC |
0 0 1 * * | Monthly on the 1st at midnight UTC |
Convert to your timezone before writing — the CLI doesn’t read system TZ. (Schedules stay timezone-stable when you take the laptop across zones, which is the trade-off.)
Where the dump lands
Section titled “Where the dump lands”~/Documents/Quay-backups/<sanitised connection name>-<UTC stamp>.<ext>
Extension is .sql for SQL family + .jsonl for Mongo + Redis.
The path is hard-coded in v0.1. v0.2 will pick it up from the same “backup default location” setting the desktop app uses (Settings → Behavior).