mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Self-Hostedevaluationupdated 23 Aug 2026

restic review

restic is a command-line backup program for encrypted, deduplicated snapshots on local disks or remote storage. It gives individuals and operators one backup format across Linux, macOS, Windows, and several storage providers, with commands to check and restore what was saved.

+82stars / 7d
Verdict

restic is an excellent default for engineers who want portable encrypted backups and are comfortable owning the schedule, credentials, retention, and restore drills. Its backend range and plain CLI make it easier to keep than a bespoke script. Do not mistake a successful backup command for a recovery plan, and investigate the two failed package results from our pinned checkout before building your own binary.

We ran it

Lab card: what happened when we ran resticScreenshot of restic (restic.net)
Install✓ · 57s471 packages
Build✓ · 82s
Tests✗ · 385s51 passed · 2 failed of 53 (go test)
Repo1391 files~93,380 lines of source · 27.5 MB · 3 CI workflows

Answers from our run

Does restic build from source?

Dependencies installed in 57 seconds (471 packages), and the build succeeded in 82 seconds. We cloned commit a80be14 into a clean Debian container with 3 CPUs and no project-specific setup.

Do restic's tests pass?

Not all of them: 51 of 53 passed and 2 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use restic?

Anyone who may lose the repository password: the quick start says the data becomes irrecoverable, and there is no password reset path.

What are the alternatives to restic?

BorgBackup, Kopia, rclone. restic is an excellent default for engineers who want portable encrypted backups and are comfortable owning the schedule, credentials, retention, and restore drills.

Setup4/5Single binary, with backend secrets and scheduling left to you
Docs5/5Clear guides cover backup, restore, checks, retention, and scripting
Community5/5Current issue activity, regular fixes, and a large user base
Maturity4/5Established format and releases, with two lab test failures

Discussed on

  1. hnRestic – Backups Done Right593 points
  2. hnRestic – Backups Done Right573 points
  3. hnRestic: Backups done right231 points
  4. hnRestic 0.13.0111 points
  5. hnRestic Cryptography105 points

Who it’s for

Linux, macOS, or Windows users who want encrypted snapshot backups from a scriptable CLI.
Operators backing up to SFTP, S3-compatible storage, Azure Blob, Google Cloud Storage, Backblaze B2, or a restic REST server.
Teams willing to schedule jobs, protect repository passwords, and test restores themselves.
Storage-conscious users who benefit from deduplication across repeated snapshots and hosts.

Who it’s NOT for

Anyone who may lose the repository password: the quick start says the data becomes irrecoverable, and there is no password reset path.
Teams wanting a hosted dashboard, built-in alerting, and managed scheduling: restic is a CLI meant to be wrapped by your own job runner and monitoring.
Operators who need the backup target to resist deletion by a compromised credential: encryption protects contents and integrity, while a separate append-only or immutable storage policy is still needed against erasure.
Machines with a tightly capped system disk and no cache plan: issue #4325 remains open because restic cannot limit its cache size itself.
Users who never perform restore drills: the documentation repeatedly tells users to run check, and an in-place restore can leave partial results if interrupted.

Setup reality

Our fresh Debian run installed 471 packages in 57 seconds and built in 82 seconds. Tests ran for 385 seconds: 51 package results passed and 2 of 53 failed, so go test exited 1.

Using restic needs a repository location and a repository password. Remote backends add provider credentials or SSH, REST-server, cloud, or rclone configuration. A dependable deployment also needs an external schedule, retention commands, protected secret delivery, logs, and restore checks.

The test-log tail shows several internal packages passing or reporting no test files, followed only by the final FAIL; it does not identify the two failing packages or their cause. The repository had no Dockerfile and no top-level tests directory in our checkout, though the project publishes a container separately.

A backup engine, not a backup service

restic turns files and directories into encrypted snapshots stored in a repository. That repository can live on a local disk, an SFTP server, the project's REST server, Amazon S3, an S3-compatible service, OpenStack Swift, Backblaze B2, Azure Blob Storage, Google Cloud Storage, or another provider reached through rclone. One executable handles snapshot creation, listing, checking, pruning, mounting, and restoration across the major desktop and server operating systems.

The design is a good fit for operators who prefer small tools with visible commands. You choose where the data lives, when jobs run, how long snapshots stay, and where credentials come from. restic handles encryption, integrity checks, and deduplication before writing to storage. Repeated snapshots therefore reuse existing data rather than copying every unchanged file again.

That control comes with work. There is no hosted control panel watching every machine. A production setup needs a scheduler, secret storage, logs or alerts, a retention policy, and regular recovery tests. The scripting guide provides environment variables, stable exit-code meanings, and JSON output for automation, but it does not make operational decisions for you.

The storage choices are unusually practical

A local repository takes only an init, a password, and a path. Remote targets add the provider's normal authentication. The scripting guide lists separate variables for S3, Azure, B2, Google Cloud, OpenStack, and the REST server. SFTP may invoke ssh, while the rclone backend can invoke rclone; those programs bring their own files and environment settings.

The repository password is absolute. The README says losing it makes the data irrecoverable. Multiple repository keys can be added and passwords changed, yet one valid key must remain available to open the repository. Store recovery material outside the host being backed up, and test that the documented recovery process works before deleting an old key.

Encryption is meant for storage you do not trust with plaintext. The README says restic protects confidentiality and integrity even when administrators can access the backend. That does not remove the need for deletion protection. A stolen backend credential or compromised client can still be dangerous, so object locking, append-only service configuration, separate retention controls, or another independent copy belong in serious ransomware planning.

What happened when we ran it

We cloned commit a80be14 in a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM. The checkout contained 1,391 files, about 93,380 lines of source, and occupied 27.5 MB. Installation succeeded in 57 seconds and installed 471 packages. The build completed successfully in 82 seconds.

Tests were the one failed step. go test ran for 385 seconds, with 51 package results passing and 2 failing out of 53, then exited with code 1. The supplied tail lists successful results for text-file, UI, restore, stats, table, terminal-status, walker, and other internal packages. Several packages report that they contain no test files. It ends with FAIL without naming the two failures or printing their error messages.

That log is enough to say the pinned checkout did not pass in our environment, but not enough to explain why. We will not attribute it to missing services, container restrictions, or a code defect without the missing failure output. The repository has three CI workflow files. Our checkout had no Dockerfile and no top-level tests directory, while the installation guide separately documents an official minimal container image.

Recovery behavior deserves rehearsal

restic's quick start is short: initialize a repository, run backup, then use restore or mount a snapshot through FUSE. The harder decisions arrive later. Include and exclude rules determine what enters a snapshot. Host and path metadata affect how snapshots are selected. forget applies a retention policy, while prune removes unneeded stored data. A typo in automation can therefore change what is saved or retained.

The documentation recommends running restic check regularly. A full check --read-data downloads the entire repository, which may cost time and backend transfer fees. That is still the closest test of whether stored pack data can be read. Sampling checks and scheduled full checks can control cost, but neither replaces restoring files to a separate target and opening them.

Restore has sharp edges worth knowing before an incident. Existing target files are overwritten by default when their contents differ. The --delete option removes target files absent from the snapshot, and the guide tells users to inspect a verbose dry run first. An interrupted in-place restore can leave a partial result, so the documentation advises taking a current backup before restoring another snapshot over live data.

The local cache also needs watching. Issue #4325 asks for a cache-size cap because a cache on the root filesystem can fill it; the request was still active on August 23, 2026. Operators can choose a cache directory and clean old cache data, but restic does not currently enforce the requested ceiling itself. That is a specific concern for small system partitions and large repositories.

Maintained, conservative, and worth the chores

The last repository push was August 1, 2026. The latest release, 0.19.1, arrived July 5 and fixed backup, mount, snapshot, JSON-output, and Windows SFTP behavior. Issues and pull requests were being updated on August 23. GitHub's count of 576 combines both types of work, so it should not be read as 576 confirmed defects.

One current regression report says 0.19.1 may reject a valid mount when the repository URL comes from --repository-file; the same report says direct -r input works. It is narrow, but users of wrappers such as resticprofile should test mounting after upgrades. The release also fixed a mount configuration that could deadlock the kernel, which explains why path validation became stricter.

Choose restic when you want an inspectable backup tool and already know who will own its operations. Pin the binary, secure the password separately, monitor exit codes, cap or relocate cache use, run repository checks, and practice a restore. The software gives you sound building blocks. Recovery still depends on the routine around them.

Alternatives

ProjectWhat it isPick it when
BorgBackupAn encrypted deduplicating backup tool with a long Unix and SSH focus.pick this instead when Unix hosts and Borg repositories already fit your operations.
KopiaAn encrypted snapshot tool with both command-line and desktop interfaces.pick this instead when some users need a graphical application alongside automation.
rclone gh↗A file transfer and synchronization tool supporting a wide range of remotes.pick this instead when copying or syncing files matters more than encrypted snapshot history.

What people are saying

  1. [github-trending] restic/restic

Sources

  1. restic README
  2. restic backup guide
  3. restic restore guide
  4. restic scripting guide
  5. Cache size limit issue #4325
  6. Repository file mount issue #22025
  7. restic 0.19.1 release

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →