backupd
The declarative S3-compatible backup daemon for Linuxbackupd lets you define backup plans in a single YAML file - sources, destination, encryption, retention, tags, and hooks - and handles the rest. Incremental by default, encrypted at rest, and scheduled without extra tooling.
Not production ready
backupd is under active development. APIs, config schema, and snapshot formats may change without notice. Do not rely on it for critical backups yet.
Key Features¶
-
๐ Incremental by Default
Rsync-style delta algorithm uploads only changed blocks, keeping repeated backups cheap on large datasets.
-
๐ฆ Zero Runtime Dependencies
A single static Go binary - no agent, no database, no interpreter.
-
๐ Encrypted at Rest
AES-256-GCM encryption with Argon2id key derivation; dedup blocks and archives are stored unreadable without the passphrase.
-
๐๏ธ S3-Compatible Storage
AWS S3, MinIO, DigitalOcean Spaces, Backblaze B2 - anything with an S3 API.
-
๐งฉ Multi-Source
File trees, PostgreSQL, MySQL, MongoDB, SQLite, Docker volumes, and Kubernetes PVCs in one plan.
-
โฐ Built-In Scheduling
Embedded cron daemon, or export native systemd timers and services.
-
๐งน Automatic Retention
keep-last, daily, weekly, and monthly policies prune old snapshots for you.
-
๐ Hooks
Pre-backup, post-backup, and on-failure commands for Healthchecks.io pings, notifications, and more.
-
โ Verifiable
Snapshot integrity verification and restore from any snapshot, anytime.
-
๐ข Rate Limiting
Per-plan transfer limits keep backups from saturating slow or shared links.
-
๐งช Check & Dry-Run
backupd checkvalidates configs;run --dry-runshows exactly what would be uploaded without writing a byte.
When Should I Use backupd?¶
- Servers and VPSes: if you need reliable backups of
/etc, web roots, application data, or databases on a schedule, backupd replaces ad-hoccron+tar+scppipelines. - Databases: if you need consistent logical dumps of PostgreSQL, MySQL, MongoDB, or SQLite - including the database and its files - in one place.
- Container workloads: if you run Docker volumes or Kubernetes PVCs and want their contents in the same backup stream as everything else.
- Offsite storage: if you want backups in S3-compatible object storage (MinIO at home, B2/Spaces/S3 in the cloud) with encryption applied before upload.
- Notification and monitoring: if you want Healthchecks.io pings, Slack/Discord alerts, or email on every success and failure via hooks.
- Retention discipline: if you want keep-last + daily + weekly + monthly pruning so backups never silently accumulate unbounded.
Quick Example¶
# ~/.backupd.yaml
plans:
- name: server
schedule: "0 3 * * *" # every day at 03:00
sources:
- type: file
path: /etc
exclude: ["*.log", ".cache"]
- type: database
adapter: postgres
dsn: "postgres://user:pass@localhost:5432/mydb"
destination:
type: s3
bucket: my-backups
endpoint: s3.amazonaws.com
region: us-east-1
access-key: ${AWS_ACCESS_KEY_ID}
secret-key: ${AWS_SECRET_ACCESS_KEY}
encryption:
passphrase: ${BACKUP_PASSPHRASE}
retention:
keep-last: 30
keep-daily: 7
keep-weekly: 4
backupd run server # first run backs everything up
backupd history server # watch snapshots accumulate
backupd restore server <id> --target /tmp/restore # restore any snapshot
Next Steps¶
- Installation - get the binary
- Quick Start - your first backup in five minutes
- Configuration - full config reference
- Examples - real-world setups for servers, databases, and containers