Bakkitbeta
self-hosted · Linux · beta

Backups that just work for Linux servers.

One static binary. A single CLI. Schedule jobs, back up files and databases to local or S3 storage, prune by policy, and restore any run — no external control plane.

curl -fsSL https://bakkit.apt.asexsela.xyz/install.sh | sh
What it does

The whole backup lifecycle, from one tool.

Define a job, schedule it, archive to storage, prune by policy, and restore when you need it — all self-hosted.

One binary, CLI-first

A single static musl binary runs as a systemd agent, driven entirely from the bakkit CLI.

Terminal dashboard

A built-in ratatui TUI shows live job status, recent runs, and storage usage — monitor everything without leaving the terminal.

Cron scheduling

Run jobs manually or on a cron expression. The agent's scheduler evaluates due jobs and enqueues them.

Files & databases

Archive directories as tar.gz, or dump PostgreSQL, MySQL/MariaDB, and SurrealDB. Client tools are provisioned on demand.

Local & S3 storage

Send backups to the local filesystem or any S3-compatible bucket — AWS S3, Cloudflare R2, Backblaze B2, MinIO.

Retention policies

keep-last N, max-age, and a minimum-keep floor run automatically after every successful backup.

Restore & notify

Restore any run to a directory or a fresh database, and get Slack notifications on job success or failure.

Sources
Files & directories
PostgreSQL
MySQL / MariaDB
SurrealDB
Storage
Local filesystem
Amazon S3
Cloudflare R2
Backblaze B2
MinIO
In practice

Drive it from your shell.

Every backup operation is a CLI command against the local agent — scriptable, reviewable, and easy to automate.

bakkit — shell
$ bakkit storage add --name s3 --kind s3 --bucket backups --region eu-central-1
$ bakkit source add --name pg --kind postgres --host db --user app --dbname app
$ bakkit jobs create --name pg-daily --source pg --storage s3 --schedule "0 3 * * *" --keep-last 7
$ bakkit jobs run pg-daily
→ run uploaded · verified · retained
$ bakkit source add --name web --kind files --path /var/www --exclude "*.log"
$ bakkit jobs create --name web-daily --source web --storage s3 --schedule "0 2 * * *"
$ bakkit jobs list
$ bakkit restore <run_id> --to /restore
$ bakkit health
→ agent healthy