Restic vs Borgmatic: Which Backup Tool Fits?
A Problem You’ve Probably Hit
You’ve got 15 Docker services running. Data lives in volumes, bind mounts, PostgreSQL databases, and config files scattered across /opt. You need automated, encrypted backups that don’t require babysitting. Restic and Borgmatic both solve this — differently.
Restic is a standalone backup tool. Single binary, native cloud storage support, fast incremental backups. You write a cron job or systemd timer and call restic backup.
Borgmatic wraps BorgBackup in YAML configuration. One config file defines sources, retention, database dumps, monitoring hooks, and scheduling. It calls borg commands for you.
Feature Comparison
| Feature | Restic 0.18.1 | Borgmatic 1.9.14 (BorgBackup 1.4.3) |
|---|---|---|
| Language | Go (single binary) | Python (wraps BorgBackup C/Cython) |
| Deduplication | Content-defined chunking | Variable-length chunking |
| Encryption | AES-256-CTR-Poly1305 | AES-256-CTR + HMAC-SHA256 |
| Compression | ZSTD, gzip, LZ4 (v0.16+) | LZ4, ZSTD, ZLIB, LZMA |
| Cloud storage | Native S3, B2, Azure, GCS, SFTP | SSH-based; cloud via rclone |
| Local storage | Filesystem | Filesystem, SSH |
| Database dumps | External scripting | Built-in (PostgreSQL, MySQL, MongoDB, SQLite) |
| Monitoring hooks | External scripting | Healthchecks.io, Cronitor, PagerDuty |
| Docker image | Community images | Official: ghcr.io/borgmatic-collective/borgmatic:1.9.14 |
| Scheduling | External (cron, systemd) | Built-in cron in Docker image |
| Web UI | None (use Backrest for UI) | None |
| Restore | restic restore, FUSE mount | borg extract, FUSE mount |
| Concurrent backups | Yes (lock-free reads) | No (repository-level lock) |
| License | BSD-2-Clause | GPL-3.0 (Borgmatic) / BSD-3-Clause (BorgBackup) |
Storage Backends: The Biggest Practical Difference
Restic talks to cloud storage natively. Borgmatic relies on SSH for remote repos.
Restic connects directly to:
- Amazon S3 / MinIO / any S3-compatible store
- Backblaze B2
- Google Cloud Storage
- Azure Blob Storage
- SFTP servers
- REST server (restic’s own lightweight server)
Borgmatic (BorgBackup) connects to:
- Local filesystem
- Remote server via SSH (
borg serve) - Cloud storage only through rclone mounts
If your backup destination is Backblaze B2 or S3, Restic is simpler — no rclone layer, no FUSE mount, no additional failure points.
If your backup destination is another server you control (a NAS, a remote VPS), Borgmatic’s SSH approach is equally simple and has lower overhead than Restic’s REST server.
Automation and “Batteries Included”
Borgmatic wins on out-of-the-box automation. A single YAML file handles:
# borgmatic config — everything in one place
repositories:
- path: ssh://[email protected]/./borg-repo
label: nas
source_directories:
- /opt/docker-data
- /etc
postgresql_databases:
- name: nextcloud
hostname: postgres
username: backup
password: ${PGPASSWORD}
retention:
keep_daily: 7
keep_weekly: 4
keep_monthly: 12
hooks:
healthchecks:
ping_url: https://hc-ping.io/uuid-here
before_backup:
- echo "Starting backup at $(date)"
With Restic, you’d build equivalent automation yourself:
#!/bin/bash
# restic-backup.sh — you write this
export RESTIC_REPOSITORY="s3:s3.amazonaws.com/my-backups"
export RESTIC_PASSWORD_FILE="/etc/restic/password"
export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="..."
# Database dump first
docker exec postgres pg_dumpall -U postgres > /tmp/db-dump.sql
# Run backup
restic backup /opt/docker-data /etc /tmp/db-dump.sql
# Cleanup
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
# Health check ping
curl -fsS -m 10 --retry 5 https://hc-ping.io/uuid-here
rm /tmp/db-dump.sql
Both achieve the same result. Borgmatic gives you the structure; Restic gives you the freedom. Neither is wrong — it depends on whether you prefer declarative config or imperative scripts.
Performance
Both are fast. In practice, the bottleneck is almost always storage I/O rather than the backup tool itself.
| Benchmark | Restic 0.18.1 | Borgmatic (BorgBackup 1.4.3) |
|---|---|---|
| Initial backup 50 GB mixed | ~12-20 min | ~10-18 min |
| Incremental (<1% changed) | ~20-60 sec | ~20-60 sec |
| Typical dedup ratio | 3-8x | 4-10x |
| Memory usage | 200-500 MB | 200-500 MB |
BorgBackup’s variable-length chunking tends to achieve slightly higher deduplication ratios on datasets with shifted content (VM images, database dumps). Restic’s fixed-polynomial chunking is more predictable. The difference is usually <10%.
Restore Experience
Restic:
# List snapshots
restic snapshots
# Restore specific snapshot to a directory
restic restore abc123de --target /tmp/restore
# Mount all snapshots as FUSE filesystem
restic mount /mnt/restic-mount
Borgmatic:
# List archives
borgmatic list
# Restore specific archive
borgmatic extract --archive host-2026-02-24T03:00:00 --destination /tmp/restore
# Mount as FUSE
borg mount /path/to/repo::archive-name /mnt/borg-mount
Both support file-level restores and FUSE mounting. Restic’s snapshot naming (short hashes) is less readable than BorgBackup’s timestamp-based names, but restic snapshots shows the dates.
FAQ
Can I migrate from Borgmatic to Restic?
Not directly — different repository formats. You’d need to create a new Restic repo and re-backup your data. Mount the borg repo via FUSE, then point Restic at the mounted directory.
Which is faster to set up?
Restic with a local repo: 2 commands (restic init, restic backup). Borgmatic with Docker: create a config.yaml and run the container. Both are quick for basic setups. Borgmatic takes longer to configure fully but automates more.
Does Restic have database dump support?
Not built in. Use pre-backup scripts to dump databases, then include the dump files in the backup. Wrapper tools like Resticker or Backrest add automation features.
Which handles large file trees better?
BorgBackup (and thus Borgmatic) has historically been faster with repositories containing millions of small files due to its metadata index. Restic has improved significantly in recent versions and the gap has narrowed.
Final Verdict
Choose Borgmatic if you back up to your own servers via SSH, you want database dumps and monitoring hooks without scripting, and you prefer declarative YAML config over shell scripts.
Choose Restic if you back up to cloud storage (S3, B2, GCS), you want a single static binary with no Python dependencies, or you already have backup automation that just needs a reliable backup engine.
Both tools are excellent. The storage backend is the deciding factor for most people — SSH favors Borgmatic, cloud storage favors Restic.
Related
Get self-hosting tips in your inbox
New guides, comparisons, and setup tutorials — delivered weekly. No spam.