Restic vs Kopia: Choosing Your Backup Tool

The Modern Backup Tool Showdown

Restic and Kopia are the two tools people recommend when someone asks “what should I use for self-hosted backups in 2026?” Both are modern, both encrypt by default, both deduplicate, both speak S3/B2/cloud storage natively. The differences are in the details.

AspectRestic 0.18.1Kopia 0.19.0
LanguageGoGo
First release20152019
Web UINone (use Backrest)Built-in
Desktop appNoneKopiaUI (cross-platform)
Cloud backendsS3, B2, GCS, Azure, SFTP, RESTS3, B2, GCS, Azure, SFTP, Rclone, WebDAV
EncryptionAES-256-CTR-Poly1305AES-256-GCM or ChaCha20-Poly1305
CompressionZSTD, gzip, LZ4ZSTD, S2, pgzip, gzip
SchedulingExternalBuilt-in policies
Retentionrestic forget --keep-*Policy-based, per-path
Concurrent writesLock-free reads, locked writesSupported
Repository serverrestic rest-serverKopia Repository Server
GitHub stars27k+8k+
LicenseBSD-2-ClauseApache-2.0

Where Kopia Pulls Ahead

Built-In Web UI

Kopia’s web interface at http://localhost:51515 shows snapshot history, repository statistics, policy configuration, and lets you browse and restore files through the browser. No additional software needed.

Restic has no UI. The community-built Backrest project adds a web interface for Restic, but it’s a separate tool with its own lifecycle.

Policy-Based Automation

Kopia’s snapshot policies define what to back up, how often, how long to keep, and what to compress — per directory. Policies cascade from global to per-path:

{
  "scheduling": {
    "intervalSeconds": 3600
  },
  "retention": {
    "keepDaily": 7,
    "keepWeekly": 4,
    "keepMonthly": 12
  },
  "compression": {
    "compressorName": "zstd"
  }
}

Set a policy once, Kopia handles scheduling forever. Restic needs external cron/systemd timers and separate forget/prune commands.

Multi-Client Repository Server

Kopia Repository Server lets multiple machines back up to the same repository simultaneously with proper access control. Each client gets its own credentials and can only see its own snapshots.

Restic’s rest-server is simpler but doesn’t provide the same per-client isolation out of the box.

Where Restic Pulls Ahead

Maturity and Ecosystem

Restic has been around since 2015 and has 27k+ GitHub stars. The ecosystem is larger:

  • Backrest (web UI)
  • Resticker (Docker automation)
  • resticprofile (YAML configuration)
  • runrestic (wrapper with metrics)
  • Autorestic (YAML wrapper)

That ecosystem exists because people trust Restic’s backup engine and build tools on top of it.

Simpler Mental Model

Restic’s workflow is three commands:

restic init --repo s3:s3.amazonaws.com/my-bucket
restic backup /data
restic forget --keep-daily 7 --prune

No policies, no web UI configuration, no server component. The simplicity is a feature when you’re debugging a backup failure at 2 AM.

REST Server Simplicity

Restic’s rest-server is a single binary that serves a repository over HTTP:

rest-server --path /backups --listen :8000

Lightweight enough to run on a Raspberry Pi. Kopia’s Repository Server is more capable but heavier.

Docker Setup Comparison

Kopia with web UI:

services:
  kopia:
    image: kopia/kopia:0.19.0
    restart: unless-stopped
    ports:
      - "51515:51515"
    volumes:
      - kopia-config:/app/config
      - kopia-cache:/app/cache
      - /path/to/sources:/sources:ro
      - /path/to/repo:/repository
    environment:
      - KOPIA_PASSWORD=change-this-repository-password
    command: server start --insecure --address=0.0.0.0:51515

volumes:
  kopia-config:
  kopia-cache:

Restic with Backrest UI:

services:
  backrest:
    image: garethgeorge/backrest:v1.7.2
    restart: unless-stopped
    ports:
      - "9898:9898"
    volumes:
      - backrest-data:/data
      - backrest-config:/config
      - /path/to/sources:/sources:ro
      - /path/to/repo:/repository
    environment:
      - BACKREST_DATA=/data
      - BACKREST_CONFIG=/config/config.json

volumes:
  backrest-data:
  backrest-config:

Kopia’s setup is more straightforward — one container, one tool. Restic + Backrest gives you a UI but adds a dependency.

Performance Benchmarks

Real-world numbers vary by hardware, but relative comparisons hold:

ScenarioResticKopia
Initial backup 100 GB~20-30 min~18-28 min
Incremental (0.5% changed)~15-45 sec~15-45 sec
Restore 10 GB subset~3-8 min~3-8 min
Dedup ratio (mixed workload)3-8x3-8x
Memory during backup200-500 MB150-400 MB
Repository overhead~2-5%~2-5%

Neither tool has a significant performance advantage. Both are I/O-bound in practice.

FAQ

Can I migrate between them?

Not directly. Different repository formats. You’d need to restore from one and re-backup with the other. Both support FUSE mounting, which can help.

Which is better for Backblaze B2?

Both work well with B2. Restic has supported B2 longer and has more community guides. Kopia’s B2 support is equally mature.

Can I use both?

Yes — some people use Restic for offsite cloud backups and Kopia for local NAS backups (or vice versa). Different repos, different tools, same data. Redundancy.

Which handles millions of small files better?

Kopia has an edge here due to its parallel file scanning. Restic has improved significantly in recent versions but can be slower on initial scans of very large file trees.

Is Kopia’s 0.x version number a concern?

Kopia has been stable for years despite the 0.x label. Many production deployments exist. That said, the repository format has changed between major versions in the past — check release notes before upgrading.

Final Verdict

Kopia is the better starting point for new self-hosters. The built-in web UI, policy-based scheduling, and multi-client repository server mean you need fewer additional tools. One binary does what Restic + cron + Backrest + scripts do separately.

Restic is the better choice if you value maturity, a larger ecosystem, and a simpler core tool. If you’re comfortable writing a 10-line backup script and a cron job, Restic’s simplicity is elegant rather than limiting.

Both will protect your data. If you’re paralyzed by the choice, flip a coin — you won’t regret either one.