Vykar Backup Documentation

4 min read Original article ↗

Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Vykar Backup Documentation

Vykar is a fast, encrypted, deduplicated backup tool written in Rust. It’s centered around a simple YAML config format and includes a desktop GUI and webDAV server to browse snapshots. More about design goals.

Do not use for production backups yet, but do test it along other backup tools.

Features

  • Storage backends – local filesystem, S3 (any compatible provider), SFTP, dedicated REST server
  • Encryption with AES-256-GCM or ChaCha20-Poly1305 (auto-selected) and Argon2id key derivation
  • YAML-based configuration with multiple repositories, hooks, and command dumps for monitoring and database backups
  • Deduplication via FastCDC content-defined chunking with a memory-optimized engine (tiered dedup index plus local mmap-backed lookup caches)
  • Compression with LZ4 or Zstandard
  • Built-in WebDAV and desktop GUI to browse and restore snapshots
  • REST server with append-only enforcement, quotas, and server-side compaction
  • Concurrent multi-client backups – multiple machines back up to the same repository simultaneously; only the brief commit phase is serialized
  • Built-in scheduling via vykar daemon – runs backup cycles on a configurable interval or cron schedule
  • Resource limits for worker threads, backend connections, and upload/download bandwidth
  • Cross-platform – Linux, macOS, and Windows

Benchmarks

Vykar is the fastest tool for both backup and restore, with the lowest CPU cost, while maintaining competitive memory usage.

Backup Tool Benchmark

All benchmarks were run 5x on the same idle Intel i7-6700 CPU @ 3.40GHz machine with 2x Samsung PM981 NVMe drives, with results averaged across all runs. Compression settings were chosen to keep resulting repository sizes comparable. The sample corpus is a mix of small and large files with varying compressibility. See detailed results or our benchmark script for full details.

Comparison

Workflow & UX

AspectBorgResticRusticKopiaVykar
ConfigurationCLI (YAML via Borgmatic)CLI (YAML via ResticProfile)TOML config fileJSON config + CLI policiesYAML config with env-var expansion
SchedulingVia BorgmaticVia ResticProfileExternal (cron/systemd)Built-in (interval, cron)Built-in (vykar daemon)
Storageborgstore + SSH RPCLocal, S3, SFTP, REST, rcloneLocal, S3, SFTP, RESTLocal, S3, Azure, GCS, B2, SFTP, WebDAV, RcloneLocal, S3, SFTP, REST + vykar-server
AutomationVia Borgmatic (hooks + DB dumps)Via ResticProfile (hooks only)Native hooksNative (before/after actions)Native hooks + generic command capture
Restore UXFUSE mount + Vorta (third-party)FUSE mount + Backrest (third-party)FUSE mountFUSE mount or WebDAV + built-in UIBuilt-in WebDAV + desktop GUI
CompressionLZ4, Zstd, Zlib, LZMA, NoneZstd, NoneZstd, NoneGzip, Zstd, S2, LZ4, Deflate, PgzipLZ4, Zstd, None

Repository Operations & Recovery

AspectBorgResticRusticKopiaVykar
Concurrent backupsv1: exclusive; v2: shared locksShared locks for backupLock-freeConcurrent multi-clientSession-based (commit serialized)
Repository accessSSH, append-onlyrest-server, append-onlyVia rustic-serverBuilt-in server with ACLsREST server, append-only, quotas
Crash recoveryCheckpoints, rollbackAtomic renameAtomic rename (caveats)Atomic blobs (caveats)Journals + two-phase commit
Prune / GC safetyExclusive lockExclusive lockTwo-phase delete (23h)Time-based GC (24h min)Session-aware lock
Data verificationcheck --repair, full verifycheck --read-data, repairRestic-compat checkVerify + optional ECCcheck --verify-data, server offload
Unchanged-file reusePersistent local filecache (v1 repo-wide; v2 per-series)Parent snapshot treeParent snapshot tree(s)Previous snapshot manifests/dirsPer-source local filecache with parent-snapshot fallback

Security Model

AspectBorgResticRusticKopiaVykar
Crypto constructionv1: AES-CTR + HMAC (E&M); v2: AEADAES-CTR + Poly1305 (E-t-M)AES-CTR + Poly1305 (Restic-compat)AES-GCM / ChaCha20 (AEAD)AES-GCM / ChaCha20 (AEAD, AAD)
Key derivationv1: PBKDF2; v2: Argon2scrypt (fixed params)scrypt (Restic-compat)scryptArgon2id (tunable)
Content addressingKeyed HMAC-SHA-256 / BLAKE2bSHA-256SHA-256 (Restic-compat)Keyed hash (BLAKE2B-256-128 default)Keyed BLAKE2b-256 MAC
Key zeroizationPython GC (non-deterministic)Go GC (non-deterministic)Rust zeroizeGo GC (non-deterministic)ZeroizeOnDrop on all key types
Implementation safetyPython + C extensionsGo (GC, bounds-checked)Rust (minimal unsafe)Go (GC, bounds-checked)Rust (minimal unsafe)

Crypto construction: AEAD (Authenticated Encryption with Associated Data) provides confidentiality and integrity in a single pass. Encrypt-and-MAC (E&M) and Encrypt-then-MAC (E-t-M) are older two-step constructions. Domain-separated AAD binds ciphertext to its intended object type and identity, preventing cross-object substitution.

Content addressing: Keyed hashing prevents confirmation-of-file attacks, where an adversary who knows a file’s content computes its expected chunk ID to confirm the file exists in the repository. Unkeyed hashing (plain SHA-256) does not prevent this.

Key zeroization: ZeroizeOnDrop overwrites key material in memory immediately when it goes out of scope. Garbage-collected runtimes (Go, Python) may leave key bytes in memory until the GC reclaims the allocation.

Inspired by

  • BorgBackup: architecture, chunking strategy, repository concept, and overall backup pipeline.
  • Borgmatic: YAML configuration approach, pipe-based database dumps.
  • Rustic: pack file design and architectural references from a mature Rust backup tool.
  • Name: From Latin vicarius (“substitute, stand-in”) — because a backup is literally a substitute for lost data.

Get Started

Follow the Quick Start guide to install Vykar, create a config, and run your first backup in under 5 minutes.

Once you’re up and running: