From a source to a proven restore.
Register what you’re protecting, point it at a cross-vendor target, set a policy, take a backup, then prove it restores — the whole loop, from the CLI.
Install the CLI and log in
TillArk lives inside the one tilldev CLI, alongside pulse, shield, cache, and secrets. The CLI talks to the API over HTTPS only.
# The TillArk commands ship inside the one TillDev CLI.
npm i -g @tillstack/cli # or: pnpm add -g @tillstack/cli
tilldev login # opens the browser; scopes the CLI to your orgRegister a source
A source is what you protect: PostgreSQL (including Neon), MySQL or MariaDB, MongoDB, ClickHouse, Meilisearch, Redis or Valkey, directories on the agent’s host, or an S3-compatible bucket (s3://KEY:SECRET@bucket/prefix; with S3 versioning on, a run restores it as of one moment). Its connection string is encrypted under your org’s key and never returned; reads show has_dsn.
# The connection string is read from a hidden prompt (or --dsn-stdin),
# never from argv, and is never returned by the API.
tilldev ark sources create \
--name "acme-prod" \
--type postgres \
--provider neon \
--residency eu \
--with-dsnRegister a cross-vendor target
A target is where backups land: S3, R2, B2, Wasabi, GCS, Azure, MinIO or SFTP. Put it with a different vendor and region from the source. On S3, B2, Wasabi and MinIO, turn on object lock with --lock-days so a stolen key can’t delete a backup before its retention ends.
# A different vendor and region from the source. --lock-days needs a bucket
# created with object lock; the agent confirms it before every write.
tilldev ark targets create \
--name "acme-backups" \
--provider s3 \
--bucket acme-backups \
--region eu-central-1 \
--residency eu \
--lock-days 30 \
--with-creds--dsn-stdin / --creds-json-stdin), not passed as a flag value — so they never land in your shell history or the process table. They are stored envelope-encrypted and are never returned by the API.Run and approve an agent
The agent does the work from inside your network: it reads the source and writes the target. The installer checks the release signature first. The agent receives credentials only after you approve its key, so compare the fingerprint on the agent host with the one TillArk shows.
# On a host that can reach the database and the bucket:
curl -fsSLO https://tilldev.dev/downloads/ark-agent/install.sh && sh install.sh
# An operator token, shown once:
tilldev ark tokens create --name edge-1 --scope operator
TILLARK_CP_URL=https://ark.tilldev.dev TILLARK_AGENT_TOKEN=tark_… ark-agent
# It registers and waits. Compare fingerprints, then approve it:
ark-agent fingerprint
tilldev ark agents ls
tilldev ark agents approve <agent-id> --fingerprint <fp>Set a policy
A policy ties a source to a UTC schedule, a GFS retention plan, a recovery point objective, and a verification schedule: how often TillArk proves the backup restores.
# Every 6 hours, verified daily at 03:00 UTC, with GFS retention.
tilldev ark policies create \
--source <source-id> \
--cron "0 */6 * * *" \
--verify-cron "0 3 * * *" \
--keep-daily 7 --keep-weekly 4 --keep-monthly 12
# The RPO objective defaults to what this schedule can meet: 7 h 30 min.An objective the schedule can’t meet is refused, and so is an all-zero retention: a policy can never mean “keep nothing.”
Run a backup
The agent claims the run, encrypts the data before upload, writes it to the target, and reports a signed manifest. TillArk records the manifest, never the bytes.
# Run now instead of waiting for the schedule: one backup per target.
tilldev ark backups run --source <source-id>
tilldev ark backups ls --source <source-id>Verify and read the proof
ark verify restores the backup into a throwaway server on the agent, checks what came back against the signed manifest, and removes the server. Your systems are never touched.
# Restore the backup into a throwaway server on the agent, then check it.
tilldev ark verify <backup-id>Then read the result:
# passed: the backup restored and every check held.
tilldev ark restores --backup <backup-id>
# Every step is in the audit log; check its hash chain and signatures here:
tilldev ark audit --limit 5
tilldev ark audit verifyverified. Sources shows each source’s recovery point against its objective, and a failed backup, a failed verification or a missed objective lands in your notifications.What's next
- Backups and restores: what each check proves, real restores with a second approver, point-in-time recovery and retention.
- Failover: promote a replica after fencing the primary (preview).
- Architecture: how TillArk, the agent and the manifest fit together.
- CLI reference: every command and flag.