Skip to content
Backup · head-to-head

restic vs Kopia

Updated Sep 2026prices checked · Jul 2026
We earn commissions when you shop through the links below. Full disclosure →
The verdict

Pick restic if you want backups as a readable script: one binary, retention stated as flags, zstd compression on by default, several passwords per repository, and a cron line or systemd timer you control, with rest-server's append-only mode when a hacked host must not delete its own backups. Pick Kopia if you want the tool to schedule snapshots, apply retention and run maintenance itself, with KopiaUI or a web UI for restores, or a repository server that backs up many machines without handing them storage credentials; turn compression on, because it is off by default.

Side by side

restic
Kopia
Category
restic: BackupKopia: Backup
Stack
restic: GoKopia: Go
License
restic: BSD-2-ClauseKopia: Apache-2.0
Min RAM
restic: 512 MB (our estimate)Kopia: 512 MB (our estimate)
Encryption
restic: AES-256-CTR + Poly1305-AES, always onKopia: AES-256-GCM or ChaCha20-Poly1305, always on
Passwords per repo
restic: Several (restic key add)Kopia: One
Compression
restic: zstd, on by default (repo v2)Kopia: zstd, s2, pgzip…; off by default
Backends
restic: Local, SFTP, REST server, S3, B2, Azure, GCS, Swift, rcloneKopia: Local, SFTP, WebDAV, S3, B2, Azure, GCS, rclone (experimental), repository server
Retention
restic: forget --keep-* flags per runKopia: Stored policies (global, host, user, path)
Scheduling
restic: None built in (cron / systemd timer)Kopia: Policy schedules in KopiaUI / server
Maintenance
restic: Manual prune (locks the repo)Kopia: Automatic quick (hourly) + full (daily)
Tamper protection
restic: rest-server --append-onlyKopia: S3 Object Lock; APPEND ACLs on repository server
Multi-machine
restic: Shared repo, every client holds the keysKopia: Repository server with per-user logins
GUI
restic: None upstream (third-party Backrest)Kopia: KopiaUI desktop + web UI
Difficulty
restic: 2 / 5Kopia: 2 / 5

restic and Kopia are two open source backup tools that self-hosters often weigh when they need to get a VPS's data off the box: encrypted, deduplicated snapshots pushed to an S3 bucket, a Backblaze B2 account or another server over SFTP. Both are single Go binaries, both encrypt everything before it leaves the machine, and both only upload the parts of a file that changed. The real differences are in how much each one does for you: restic is a command you run and schedule yourself, while Kopia carries policies, a scheduler, automatic maintenance and a web UI inside the same binary.

The shared foundation

Both split files with content-defined chunking, so an edit in the middle of a large file does not re-upload the whole thing.

  • restic cuts files with Rabin fingerprints over a 64-byte sliding window. Its design document says files under 512 KiB are not split and blobs run from 512 KiB to 8 MiB. Everything in the repository is encrypted with AES-256 in counter mode and authenticated with Poly1305-AES, and there is no unencrypted mode.
  • Kopia splits with a rolling hash (the default splitter is DYNAMIC-4M-BUZHASH) and packs the pieces into 20-40 MB pack files with random names. You choose AES256-GCM-HMAC-SHA256 (the default) or CHACHA20-POLY1305-HMAC-SHA256 when you create the repository, and its docs say it "does not allow creating unencrypted backups".

Both licences are permissive: restic is BSD-2-Clause, Kopia is Apache-2.0.

The password works the same way in both, and it is the one thing you cannot get back. restic's quick start warns that "losing your password means that your data is irrecoverably lost". Kopia's docs say there is "no way to recover a forgotten password". Store a copy away from the server you are backing up. restic allows several passwords (keys) per repository through restic key add. Kopia's features page says it "allows one password per repository".

Compression

restic compresses with zstandard in repository format version 2, which needs restic 0.14.0 or newer and is now the default for restic init. The level is set per run with --compression (off, fastest, auto, better, max), and auto is the default. A version 1 repository has to be migrated before it gets compression.

Kopia has compression turned off by default. You enable it per policy, with a choice of zstd, s2, pgzip, gzip and deflate variants; its FAQ calls zstd "one of the top algorithms currently". A change only applies to data uploaded afterwards. kopia benchmark compression tests every variant on a sample file. If you forget to set a policy, a Kopia repository stores your data uncompressed. restic compresses from the first backup.

Where the backups can go

The backend lists overlap almost completely:

  • restic natively supports a local directory, SFTP, its own REST server, Amazon S3 and S3-compatible storage, OpenStack Swift, Backblaze B2, Azure Blob Storage and Google Cloud Storage, plus anything rclone can reach. For B2, its docs recommend Backblaze's S3-compatible API over the native B2 backend "due to issues with error handling in the current B2 library".
  • Kopia supports S3 and S3-compatible storage, Azure, B2, Google Cloud, WebDAV, SFTP, a local directory or NAS, and its own repository server. Its rclone support is marked experimental and needs rclone installed alongside.

Both can protect a backup from a hacked client, but they do it differently. restic's rest-server has an --append-only mode that "allows creation of new backups but prevents deletion and modification of existing backups". Kopia supports S3 Object Lock, and full maintenance can extend the retention dates. Its docs warn that full maintenance must run at least as often as the lock period, or the lock expires. On B2, Kopia needs the S3 API for this.

Retention, scheduling and maintenance

This is where the two tools are most different.

restic keeps each job separate. restic backup writes a snapshot. restic forget applies a policy you pass as flags (--keep-last, --keep-daily, --keep-weekly, --keep-monthly, --keep-yearly, --keep-within and more) and deletes the snapshots that fall outside it. restic prune then removes the data only those snapshots used, or you add --prune to forget. The docs warn that during prune "the repository is locked and backups cannot be completed". They also advise running restic check afterwards; --read-data or --read-data-subset downloads and verifies the pack files as well. Upstream documents no scheduler or daemon, so scheduling is up to you: cron, a systemd timer, or whatever already runs jobs on the box.

Kopia stores all of this as policies in the repository. You set them per path, per user or host, or globally. The global policy starts with a retention schedule of 10 latest, 48 hourly, 7 daily, 4 weekly, 24 monthly and 3 annual snapshots. A policy can also set when snapshots are taken, what to ignore and whether to compress. Maintenance has been automatic since v0.6: quick maintenance about every hour, and full maintenance (garbage collection and compaction) every 24 hours. One user@hostname is the maintenance owner. Full maintenance also runs kopia snapshot verify, which checks that every blob a snapshot needs exists but does not download it. For a real test restore, add --verify-files-percent. Deleted data is not removed at once: its docs say it "may take several hours and/or multiple maintenance cycles".

Many machines, one repository

restic lets several machines back up to one repository at the same time. Backups take shared (non-exclusive) locks, and only operations such as prune need an exclusive one. But every client holds the repository password and the storage credentials. A client that can write can also delete, unless the storage prevents it (the REST server in append-only mode).

Kopia offers a repository server. Clients log in with a per-user username and password and never see the storage credentials. Each username@hostname sees only its own snapshots and policies. Built-in ACLs give clients APPEND access to content, so they can add data but not delete it. The docs note the limit of this: only snapshot and policy manifests are access-controlled, so a user who knows an object's ID can restore it. Remote clients connect over gRPC, which needs TLS. The docs say --insecure does not work for the repository server, and a reverse proxy needs grpc_pass rather than proxy_pass.

GUI, platforms and install

restic has no GUI upstream. Its README lists support for Linux, macOS and Windows, plus FreeBSD and OpenBSD. On Windows, --use-fs-snapshot backs up from a Volume Shadow Copy. restic mount browses snapshots over FUSE on Linux, macOS and FreeBSD only. Most distributions package restic. The official binaries are reproducible builds, update in place with restic self-update, and the restic/restic image covers Docker use. A web UI does exist as a third-party project: Backrest (GPL-3.0) wraps the restic CLI with scheduling and a browser interface, but it is not part of restic.

Kopia ships KopiaUI, a desktop app for Windows, macOS and Linux. The same UI runs as a web app when Kopia is started in server mode. On a VPS, that means one kopia/kopia container gives you a browser dashboard for repositories, policies, snapshots and restores. Kopia publishes APT and RPM repositories, Homebrew, Scoop and winget packages. On Windows, shadow copies are done with a before/after snapshot action. Actions are off by default and must be enabled on the client.

Neither project publishes a RAM figure. Our 512 MB floor for each is an estimate, not a measurement; memory use grows with repository size, and Kopia's FAQ names compression and parallelism as the main causes of high use. We rate both 2 out of 5 to deploy. restic is one binary and a cron line; Kopia is one container, but its repository server needs TLS before remote clients can use it.

Which to choose

Choose restic if you want the backup to be a script you can read: one binary, flags that state the retention policy, and a timer. It compresses by default and allows several passwords per repository. Add rest-server in append-only mode, or a bucket with object lock, if a compromised server must not be able to delete its own backups.

Choose Kopia if you want the tool to schedule snapshots, apply retention and run maintenance itself, with a GUI or web UI for restores. Also choose it if you are backing up several machines into one place and want a repository server that separates users and keeps storage credentials off the clients. Turn compression on in the global policy on day one. Neither is better for everyone; the question is how much of the backup system you want to write yourself.

Choosing between Kopia and restic

Put the other way round, start with Kopia if a web UI, policies and automatic maintenance matter more than anything else. Move to restic if you would rather have fewer moving parts and wire up scheduling yourself.

What to back up, and what these tools are not

These are file-level tools. A database copied live from its data directory can restore inconsistent, so dump it first. restic can snapshot a dump straight from a command with restic backup --stdin-from-command -- <dump command>. Kopia can run the dump from a before-snapshot action. Sync is not backup either: Syncthing's own FAQ says deletions "will be propagated to all your devices". For a Nextcloud server, AIO has BorgBackup built in; see the Nextcloud deploy guide. Both tools are listed with the other self-hosted backup tools on the category page.

Common questions

restic vs Kopia: which backup tool should I use for a VPS?

Pick restic if you want one binary you drive from a cron job or systemd timer, with retention passed as flags and zstd compression on by default. Pick Kopia if you want stored policies, built-in scheduling, automatic maintenance and a web UI, or a repository server that backs up several machines. Both encrypt and deduplicate everything and write to S3-compatible storage, B2 or SFTP.

Does restic have a GUI?

Not upstream. restic is a command-line program. Backrest is a separate, third-party GPL-3.0 project that wraps the restic CLI with a web UI and scheduling. Kopia ships its own GUI, KopiaUI, as a desktop app and as a web UI in server mode.

Is compression on by default in restic and Kopia?

In restic, yes: repository format version 2, the default since restic 0.14.0, compresses with zstandard at the auto level unless you pass --compression off. In Kopia, no: compression is disabled by default and is enabled per policy, for example kopia policy set --global --compression=zstd. The setting only applies to data uploaded afterwards.

Can a hacked server delete its own restic or Kopia backups?

By default, a client that can write to the repository storage can also delete from it. restic's rest-server has an --append-only mode that allows new backups but prevents deleting or changing existing ones. Kopia supports S3 Object Lock, and its repository server gives clients APPEND access to content by default, so they can add data but not delete it.

How much RAM do restic and Kopia need?

Neither project publishes a RAM requirement. Our estimate is 512 MB for either on a small VPS, not a measurement. Memory use grows with the repository, and Kopia's FAQ names compression and parallelism as the main causes of high memory use.

Where to host itaffiliate disclosure
Kamateratrial either on
The entry tier is a free trial — fine for a first look. Size it up (or run the 2 vCPU / 4 GB box the cost figures above assume) once you're keeping it.1 vCPU · 1 GB RAM · 20 GB SSD · $4.00/mo
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Other comparisons with these apps

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.