restic

restic

What is it?

restic is a command-line backup program written in Go. It ships as a single executable for Linux, macOS, Windows, FreeBSD and OpenBSD, with no server to run. It splits files into chunks, uploads only the ones the repository does not already hold, and compresses and encrypts them on the way. The repository can be a local directory, an SFTP server, an S3 bucket, a rest-server or anything rclone can reach. Each restic backup run creates a snapshot you can list (restic ls), compare (restic diff), restore, or mount over FUSE to pull out a single file.

The open source backup software comparison sets restic against Plakar and Databasus on scheduling, retention and backup verification.

Why is it interesting?

  • Reproducible builds: since 0.6.1, every released binary can be rebuilt byte for byte from source. v0.19.0 ships binaries for 25 OS and architecture combinations, plus a Docker image.
  • Encryption built for untrusted storage: the README treats the backup location as untrusted, a place system administrators or other people may be able to open. Data lands there encrypted with AES-256 in CTR mode and authenticated with Poly1305-AES, under a key derived from the password with scrypt, as the design documentation lays out.
  • Deduplication across machines: several hosts can back up into the same repository, and a chunk they share is stored once. Compression requires repository format v2, which is what restic creates by default.
  • Native storage backends: local, SFTP, rest-server, S3 and S3-compatible services, OpenStack Swift, Backblaze B2, Azure Blob Storage and Google Cloud Storage, with rclone covering the rest.
  • Checks without a restore: restic check validates the repository structure, and --read-data reads back the data itself, which means downloading all of it.
  • Server-side append-only mode: started with --append-only, rest-server, the project's own HTTP server, rejects any deletion or modification. A compromised machine cannot wipe its older backups.

Use cases

  • Push a nightly pg_dump into the repository with --stdin-from-command, triggered by a systemd timer.
  • Keep 7 daily, 4 weekly and 12 monthly snapshots with restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune.
  • Mirror a local repository to a remote bucket with restic copy to keep an off-site copy.

Good to know

No scheduler and no GUI. The scheduling section of the docs says it plainly: restic runs when you call it and is not a daemon. Timing is left to cron, a systemd timer, Windows Task Scheduler or resticprofile, a third-party tool the docs point to, and your script has to make sure two runs never overlap. Neither the README nor the documentation describes a graphical interface. FUSE mounting only works on Linux, macOS and FreeBSD.

Databases go through a dump. The documentation describes no PostgreSQL or MySQL connector: restic backs up whatever a command writes to its output. With --stdin-from-command, a failing command cancels the snapshot. A plain pipe such as mysqldump | restic backup --stdin hides that failure, and the docs warn that a dump which cannot reach the database still ends in a successful, empty backup.

A lost password or a leaked key has no easy fix. The README warns that losing the password means losing the data for good. The threat model covers the opposite case: a leaked key opens past and future backups, changing the password does not help, and the only way to rotate the master key is a restic copy into a new repository. When several machines share a repository, one leak exposes all of them.

Plakar pitches itself as the next step. Plakar's post A Short history of backup, from March 2025, groups restic with Borg, Duplicity, Tarsnap and Kopia as the open source tools that made encryption and deduplication essential, then says most of them still needed a full restore to reveal their contents. restic, for its part, lists and mounts snapshots without restoring anything. The concrete differences lie elsewhere: Plakar bundles a web UI and .ptar archives, and adds S3 or PostgreSQL through plugins whose download requires an account, while restic supports its storage backends natively. Databasus answers a different need: a scheduled service with a UI that only handles databases.

Still 0.x after twelve years. The repository dates back to April 2014 and has never tagged a 1.0. v0.19.0 shipped on June 9, 2026, fourteen months after 0.18.0, and v0.19.1 followed on July 5. The latest commit on master is from September 25, 2026.

SOURCES

REPOhttps://github.com/restic/restic
SITEhttps://restic.net
LICENSEBSD-2-Clause