A backup engine that writes encrypted, deduplicated, compressed snapshots to filesystems, SFTP, WebDAV, S3-compatible object storage, Backblaze B2, Google Drive or an rclone remote. It ships both a CLI and KopiaUI, so it replaces consumer tools like Arq or Duplicati without giving up scriptability.
Our verdict on Kopia#
Kopia gives you what restic and Borg do not: a supported GUI and a repository server, with the same repository format underneath. The GUI and CLI question has a boring answer, which is good news. KopiaUI bundles a kopia binary and speaks the identical repository format, so a repo created on the CLI opens in the GUI and the reverse, but connection state lives in separate *.config files and KopiaUI tries to connect to every one it finds. The version story is stricter than it looks: Kopia promises to read the current format plus at least one previous, refuses to write a repository format it does not handle, and will never upgrade a repository without an explicit human command. Cadence is the honest weak point. Kopia is still 0.x after seven years, releases land two to four times a year, and 0.23.0 (May 2026) removed LZ4 and restricted unauthenticated server binds to loopback, with 0.23.1 a month later fixing a rare race that could lose data.
Who Kopia is for#
Choose it if
- A household that wants one backup tool covering a Windows desktop, a Mac and a Linux server into one deduplicated bucket, with a GUI for the non-technical members.
- Anyone who wants scheduling, retention and compression policies stored in the repository rather than duplicated across everyone's crontab.
- Laptops backing up to a central
kopia serverso the endpoints never hold the object storage credentials. - People who want per-directory policy inheritance (compression, exclusions, retention) instead of one flat rule per job.
Look elsewhere if
- You need a 1.0 stability commitment or a predictable release train. Kopia has been pre-1.0 since 2019 and ships in bursts.
- You want the smallest possible attack surface on a server.
kopia serveris a web application with its own auth, which is more than a cron-driven binary. - Your organisation requires OIDC or LDAP login on every service; Kopia's server auth is local users and client certificates only.
What running it actually looks like#
Three shapes, and they are genuinely different. The CLI binary run from cron or systemd is the smallest. kopia server --ui runs a long-lived process (default 127.0.0.1:51515) that owns its own schedule, and since 0.23.0 an unauthenticated server may only bind to loopback, so remote access needs credentials plus TLS or a proxy in front. KopiaUI is the Electron desktop app wrapping that same server. All three read connection state from *.config files in %APPDATA%\kopia, $HOME/.config/kopia or ~/Library/Application Support/kopia, and KopiaUI attempts to connect to every file ending in .config, which surprises people who left a spare one there. kopia repository create runs once against the destination. Upgrades are a binary swap; the repository format is only changed when you explicitly run kopia repository upgrade begin.
Resource profile#
- Memory
- 200 MB idle, around 700 MB in ordinary use. Estimates. A `kopia server` process sits low until a snapshot runs; memory then scales with parallel uploads and the compression algorithm, and the FAQ explicitly says disabling compression and lowering parallelism reduces it. KopiaUI adds an Electron window on top, typically another 150 to 250 MB.
- CPU and acceleration
- Splitting, hashing and zstd compression are the load, and Kopia parallelizes aggressively by default; cap it with `--parallel` if backups are starving a live service on the same box.
- Storage growth
- Deduplicated and compressed across all snapshots in a repository. Space is not returned when you delete snapshots: full maintenance marks unreachable content and later cycles delete the blobs.
- Operational load
- 2 of 5, Light. One process or one desktop app, no database service, and the schedule lives inside Kopia rather than in cron. The attention it costs is the maintenance model: you must know which client owns maintenance, and repository format upgrades are a manual, coordinated, one-way operation.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
The repository is the backup, and Kopia's failure mode is not corruption so much as space that never comes back. Exactly one client is the maintenance owner (kopia maintenance info shows it, kopia maintenance set --owner= changes it). Quick maintenance runs roughly hourly and full maintenance every 24 hours; only full maintenance marks unreachable content, and blob deletion is deliberately delayed so caches and eventually consistent backends converge, so reclaiming space takes several hours and multiple cycles. If the owning machine is retired, nothing ever reclaims anything. For integrity use kopia snapshot verify, optionally with --verify-files-percent to actually read a sample of file content rather than only checking that content IDs resolve. Lose the repository password and there is no recovery.
Derived backup shape
Mixed. Stop the service, copy its data directory, restart. Check upstream docs for a supported export command first.
Traps and surprises#
The maintenance owner can silently disappear
Only one client performs full maintenance on a repository. If that laptop is reimaged or that server is decommissioned, every other client keeps backing up and nobody ever marks content unreachable or deletes blobs, so your bucket grows forever while kopia snapshot delete appears to work. Check kopia maintenance info on a schedule and reassign with kopia maintenance set --owner=user@host when hardware changes.
Repository format upgrades are manual and one way
Kopia never upgrades a repository format on its own. kopia repository upgrade begin is an explicit, coordinated operation: every client must already be running the new version and be disconnected while it runs, because older Kopia cannot open the upgraded repository afterwards. Upgrading one machine's Kopia and forgetting the NAS is how you find out, when the NAS starts refusing to write to a repository it can still read.
0.23.0 removed LZ4 and locked down the server bind
The May 2026 release dropped LZ4 compression support and restricted unauthenticated server access to loopback binds only. If your policy specified an LZ4 variant you must change it, and if you were running kopia server bound to a LAN address without credentials, it stops working after the upgrade. Fix the second one with real server users and TLS rather than by reverting.
Deleting snapshots does not shrink the bucket today
Snapshot deletion is a metadata operation. Content becomes unreferenced at the next full maintenance (24 hour default), and the underlying blobs are only removed after safety delays that exist to survive caches and eventual consistency on object storage. Expect hours to days, and several maintenance cycles, before your storage bill moves. Do not conclude deduplication is broken and start a second repository.
KopiaUI connects to every .config file it finds
At startup KopiaUI scans the Kopia config directory and tries to connect to all files ending in .config, not just repository.config. Copies left over from testing, or per-repository repository-XXX.config files for repositories you have retired, produce startup errors and phantom repositories in the UI. Rename anything you do not want connected so it ends in something other than .config.
Specifications#
- Category
- Backup and object storage
- Licence
- Apache-2.0 (Permissive)
- Written in
- Go (KopiaUI is Electron)
- First release
- 2019
- Maturity
- Stable
- Datastore
- Its own content-addressed repository with an epoch-based index, plus a local cache directory
- Default ports
51515- Ships as
- native binary, docker, KopiaUI desktop app, distro package
- arm64 builds
- Yes
- Identity
- Local accounts only. `kopia server` has its own username and password list plus optional TLS client certificates. There is no OIDC or LDAP; put it behind an authenticating proxy if you need identity.
- Replaces
- Arq, CrashPlan, Backblaze Personal Backup, Time Machine
- Project site
- kopia.io
- Source
- github.com/kopia/kopia
- Documentation
- kopia.io/docs
Alternatives to Kopia#
Everything else in backup and object storage, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| BorgBackup | 2, Light | 80 MB | BSD-3-Clause |
| rclone | 2, Light | 40 MB | MIT |
| restic | 2, Light | 100 MB | BSD-2-Clause |
| Duplicati | 3, Moderate | 200 MB | MIT |
| Garage | 3, Moderate | 150 MB | AGPL-3.0-only |
| MinIO | 4, Heavy | 250 MB | AGPL-3.0 (repository archived) |
Where Kopia comes up elsewhere#
Head to head
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.