Vykar
Backup & RecoveryA fast, encrypted, deduplicated backup tool written in Rust that uses YAML configuration
Features
- Supports multiple storage backends (local, S3, SFTP, REST server)
- End‑to‑end encryption with AES‑256‑GCM or ChaCha20‑Poly1305 and Argon2id key derivation
- Content‑defined chunking deduplication using FastCDC for efficient storage
Recent releases
View all 47 releases →Fixed backup performance regression on iCloud-heavy macOS trees by skipping `getxattr` on dataless inodes.
Full changelog
Bug fixes
- Backup performance on iCloud-heavy macOS trees: skip
getxattron dataless inodes. The walker was round-tripping tofileproviderdfor every cloud-managed file, serializing the pipeline; dataless xattrs are already supplied by the parent snapshot or skipped entirely. (#133) - GUI: surface previously-swallowed config-read and tmp-cleanup errors via the in-app log channel instead of
let _ =dropping them silently. - Linux quota syscalls: switch FFI pointer casts to
ptr::from_mutto satisfy Rust 1.95 clippy::pedantic on Linux-only code paths.
Reliability & code quality
- Crypto:
MasterKey::generatenow propagatesOsRngfailures instead of panicking — relevant for sandboxed/container environments where kernel entropy may be temporarily unavailable. - Storage: document that synchronous
StorageBackendmethods (notably SFTP) may block on a Tokio runtime internally and must not be invoked from inside an async context. - Workspace lints: tighten clippy policy across all crates — deny
unwrap_used,panic,panic_in_result_fn,cast_precision_loss,unsafe_code(per-module opt-in with SAFETY comments), enable pedantic with a focused allowlist. ~94 files adapted; lossyas-casts replaced with checked integer math. - Types: encapsulate
ChunkId/PackId/SnapshotIdnewtypes behindfrom_bytes()/as_bytes(); drop the unusedVykarError::Storagevariant. - CLI: split
main.rsintolib.rs+ helpers, introduce athiserror-basedCliError, grouprun_backuparguments intoBackupRunOpts. - Core: gate
BudgetGuardand dead helpers oncfg(test), drop avoidable clones in pending-index recovery, document blocking sleeps in session/lock helpers. - GUI: refactor UI state models; split megamodules into focused submodules.
Infrastructure
- CI now runs lint, test, and docs on pull requests, not just post-merge.
Downloads
| Platform | Asset |
| --- | --- |
| Linux x86_64 (glibc) | vykar-v0.16.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl, static) | vykar-v0.16.0-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.16.0-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl, static) | vykar-v0.16.0-aarch64-unknown-linux-musl.tar.gz |
| macOS Apple Silicon | vykar-v0.16.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.16.0-x86_64-pc-windows-msvc.zip |
| GUI (Linux AppImage) | vykar-gui-v0.16.0-x86_64.AppImage |
SHA256 checksums are attached as SHA256SUMS.
Full changelog: v0.15.0...v0.16.0
- Check reports snapshot items affected by missing packs
- Check item-granular repair drops bad items while preserving the snapshot
- Backup handles macOS dataless iCloud files cleanly
Full changelog
Features
- Check: report snapshot items affected by missing packs, so you can see exactly what's lost (#122)
- Check: item-granular repair drops bad items but preserves the snapshot, instead of failing the whole snapshot (#123)
- Backup: handle macOS dataless (cloud-only) iCloud files cleanly
- GUI: snapshots table now defaults to newest-first (#126)
Bug Fixes
- Backup: skip Windows unsupported reparse points and cloud-file errors with a path-bearing warning instead of aborting (#127)
- GUI: open the config file in the system editor on Linux/Windows (#125)
- Check: honest existence-progress reporting and a TOCTOU hint when sizes mismatch
- Limits: renice all threads on Linux, not just the calling task
Infrastructure
- Windows signing: pin SimplySign Desktop 2.9.14, dismiss the version-check modal, surface keytool errors instead of silencing them, and capture CI screenshots
- Satisfy clippy 1.95 lints
Downloads
| Platform | Artifact |
|---|---|
| Linux x86_64 (glibc) | vykar-v0.15.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.15.0-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.15.0-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.15.0-aarch64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.15.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.15.0-x86_64-pc-windows-msvc.zip |
| Linux GUI (AppImage) | vykar-gui-v0.15.0-x86_64.AppImage |
- --http-listen defaults to loopback only; use `--http-allow-public` or `VYKAR_HTTP_ALLOW_PUBLIC=1` to bind publicly
- Endpoints: `/` (HTML), `/healthz` (text liveness probe), `/api/status.json` (JSON)
- Daemon web UI (`vykar daemon --http-listen`) providing HTML, healthz, and JSON endpoints
- Auto‑routing slash patterns to path globs for find‑files (e.g., `/etc/**`)
- Redesigned GUI: find‑files results layout reorganized and snapshot table columns reorderable with a wider time column
Full changelog
Fixes a few issues that came up with recent GUI features and adds the first version of a web UI.
Features
-
Daemon web UI (
feat(daemon)):vykar daemonnow exposes an optional read-only HTTP status page mirroring the GUI overview — process info, schedule, per-repo stats, recent snapshots, last cycle outcome, and an expandable sources list. Auto-refreshes every 30s and re-renders after every backup cycle / SIGHUP. No actions, no auth, no JS.Run it with:
vykar daemon --http-listen 127.0.0.1:7575 # or via env var (matches the Docker recipe): VYKAR_HTTP_LISTEN=127.0.0.1:7575 vykar daemonEndpoints:
GET /(HTML),GET /healthz(plain text liveness probe),GET /api/status.json(JSON). Non-loopback binds are rejected at startup unless--http-allow-public(orVYKAR_HTTP_ALLOW_PUBLIC=1) is also set — front it with a reverse proxy if exposing publicly. -
Find files: slash patterns are now auto-routed to path globs, so
/etc/**does what you'd expect without an explicit flag. -
GUI: redesigned find-files results layout, snapshot table column reorder with a wider time column.
Bug Fixes
- GUI: don't highlight the repo row when a sub-item is selected.
- GUI: pack find-files result groups at the top of the scroll view instead of stretching to fill.
Downloads
| Platform | File |
| --- | --- |
| Linux x86_64 (musl) | vykar-v0.14.1-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (gnu) | vykar-v0.14.1-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.14.1-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (gnu) | vykar-v0.14.1-aarch64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vykar-v0.14.1-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.14.1-x86_64-pc-windows-msvc.zip |
| Linux GUI (AppImage) | vykar-gui-v0.14.1-x86_64.AppImage |
SHA256 checksums are attached as *.sha256 siblings.
- GUI & CLI `diff` command to compare files between snapshots with size deltas
- Multi-row selection and batch delete on the Snapshots page in the GUI
- Grouped find results by snapshot for easier scanning in the GUI
Full changelog
Features
- GUI + CLI
diffcommand: compare regular files between two snapshots (added, removed, modified, with size deltas). - GUI – multi-row selection and batch delete on the Snapshots page.
- GUI – grouped find results by snapshot for easier scanning.
Reliability & Correctness
- Symlink validation on restore: validates symlink targets and warns on unsafe ones (absolute or escaping the restore root).
restore --verify: optional plaintext chunk hash check during restore for end-to-end integrity verification.- Harden stale lock crash recovery so a crashed maintenance run no longer blocks subsequent operations.
- Harden backup reads against TOCTOU races between stat and open.
- Bound non-segmented reads to
pre_meta.size + 1to detect files growing during backup. - Validate
Item::sizeinvariant during restore + check; surface metadata failures as errors instead of silently corrupting output. - Harden pack offset arithmetic against corrupted indexes.
- Enforce the durable commit boundary via the type system (
refactor(commit)). - Surface post-commit failures as warnings rather than aborting the snapshot.
- Surface
command_dumpfailures as typed errors instead ofexpect()panics.
Refactors
- Split
backup/pipeline.rsinto orchestrator + stage submodules. - Split
commands/restore.rsinto phase submodules; stream restore in bounded batches. - Drop redundant clones on backup/restore hot paths.
Bug Fixes
- GUI: write config files with owner-only permissions (0600).
- GUI: rephrase prune dialog to avoid tinyfd quote-rejection on Windows.
- core: format byte counts in daemon-visible summary logs.
- storage: drain PUT request body in s3_backend test mocks (test stability).
Infrastructure
- Stop stress test scripts on first failure.
- Gate the absolute-symlink warning test to Unix.
Downloads
| Platform | Artifact |
|---|---|
| Linux x86_64 (glibc) | vykar-v0.14.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.14.0-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.14.0-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.14.0-aarch64-unknown-linux-musl.tar.gz |
| Linux GUI (AppImage) | vykar-gui-v0.14.0-x86_64.AppImage |
| macOS aarch64 | vykar-v0.14.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.14.0-x86_64-pc-windows-msvc.zip |
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.