Tech Digest

Backup

Kopia

Deduplicating encrypted snapshots with a real desktop GUI and a repository server

BackupApache-2.0Stablearm64 builds
Last reviewed Profile maintained against the project's own documentation
Operational load
2 / 5
Light
Idle memory
200 MB
typical use ~700 MB
Moving parts
1
containers in a normal deployment
Backup shape
Mixed
needs a dump or a stop

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 server so 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 server is 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.

ToolOps loadIdle RAMLicence
BorgBackup2, Light80 MBBSD-3-Clause
rclone2, Light40 MBMIT
restic2, Light100 MBBSD-2-Clause
Duplicati3, Moderate200 MBMIT
Garage3, Moderate150 MBAGPL-3.0-only
MinIO4, Heavy250 MBAGPL-3.0 (repository archived)

Where Kopia comes up elsewhere#

Sources#

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.