Release history
Vykar releases
Fast, encrypted, deduplicated backups
All releases
47 shown
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 |
- Tabs and multi-window UI removed; pages now split into `ui/components/` and `ui/pages/`
- New sidebar-driven layout with repo‑name persistence, Overview shows newest three snapshots, in‑window Cancel button
- WebDAV _Mount_ button on Overview (whole repo) and Snapshots (single snapshot) binds to localhost, opens browser, provides Stop link
Full changelog
Features
- GUI: New sidebar-driven layout. Tabs and multi-window are gone; pages are now split into
ui/components/andui/pages/, repo selection persists by name (survives reordering/renaming), Overview shows the newest three snapshots, an in-window Cancel button mirrors the tray path, andPageis now a typed enum shared between Slint and Rust (4610137). - GUI: Browse snapshots via WebDAV. A new Mount button on Overview (whole repo) and Snapshots (single snapshot) binds
127.0.0.1:0, opens the default browser at the bound URL, and shows a footer banner with a clickable link and Stop button (2dac663).
Performance
- File cache: ~33% smaller on disk and in RAM. The save path is now zstd-compressed behind a new
FORMAT_VERSION_BYTE 0x10,csizeis no longer cached (rehydrated from the index at commit), and single-chunk entries are inlined via a custom serde codec that emits the same wire format asVec<CachedChunkRef>with zeroVecallocation on deserialize. Measures 63 B/entry on disk on a 10k-entry regression test (was ~95 B) (806d24b).
Bug Fixes
- Scheduler survives system sleep. Both GUI and daemon schedulers stored
next_runasInstant; on macOS and Linux monotonic clocks freeze during sleep, so a 2h interval effectively restarted from wake.next_runis nowSystemTime, and each wait is capped at 60s so the loop re-evaluates wall-clock state within a minute of wake. Fixes #110 (9276384). - Sessions reap stale markers at 45 min with an independent heartbeat. Long-running backups on one host could block maintenance on another for up to 72h. A dedicated
SessionGuardheartbeat thread replaces pipeline-driven refreshes,refresh_sessionis now non-resurrecting, andVykarError::ActiveSessionsnow carries host/pid/age plus a structuralNonefor malformed markers so maintenance fails closed. Fixes #107 (2c7a393). - File cache: drop hardcoded 256 MiB plausibility cap. A ~714 MiB cache on a host backing up
/srv/mail+/srv/nextcloud/datawas silently rejected every run, costing ~7 min of parent-reuse rebuild per backup. Cap removed; decode outcomes are now split intoLoaded/Rejected/Malformedso rejections and parse failures log distinctly (49a1ea3). - Retry: default backoff widened to ~70s.
max_retriesraised from 3 to 5 andretry_delay_msfrom 1000 to 1500, so cumulative backoff (base 47s, max 93s with jitter) can ride out a typical WiFi reconnect after laptop sleep. Healthy connections are unaffected (0a48b13).
Downloads
| Platform | Artifact |
| --- | --- |
| Linux x86_64 (glibc) | vykar-v0.13.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.13.0-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.13.0-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.13.0-aarch64-unknown-linux-musl.tar.gz |
| Linux GUI | vykar-gui-v0.13.0-x86_64.AppImage |
| macOS aarch64 | vykar-v0.13.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.13.0-x86_64-pc-windows-msvc.zip |
Fixed restoration of file and symlink source paths.
Full changelog
Bug Fixes
- Restore file and symlink source paths via unified root policy (
8d9862b)
Infrastructure
- Eliminate
APPIMAGEenv race in GUI autostart tests (f3a1b0f)
Downloads
| Platform | Artifact |
| --- | --- |
| Linux x86_64 (glibc) | vykar-v0.12.15-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.15-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.15-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.15-aarch64-unknown-linux-musl.tar.gz |
| Linux GUI | vykar-gui-v0.12.15-x86_64.AppImage |
| macOS aarch64 | vykar-v0.12.15-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.15-x86_64-pc-windows-msvc.zip |
- GUI autostart and start‑in‑background settings
- Window tree view now shows source paths
- CLI command to delete multiple snapshots in one operation
Full changelog
Features
- GUI: New autostart and start-in-background settings (#82).
- GUI: Restore window tree view now shows source paths (#57).
- CLI:
--repo/--sourceoptions on the bare command; unavailable repos are skipped instead of aborting. - CLI: Delete multiple snapshots in a single command (#87).
- Backup: Verbose logging fixed for the bare
vykarcommand; excluded files are now logged (#73).
Bug Fixes
- Mount: Recover from a poisoned mutex in the WebDAV read path instead of deadlocking.
- GUI: Tray Open/Quit stays responsive during startup refresh.
- Deps: Bumped all dependencies; fixes the
aws-lc-sysbuild failure (#90).
Internal
- Consolidated filesystem walkers across platforms (#101).
- Unified entry materialization across the pipeline and sequential backup paths.
- Split
worker.rsmegaswitch (GUI) andrepo/mod.rsfacade into focused submodules. - Privatized core
chunkerandlimitsmodules; trimmed default features and narrowed hook error types. - Bundled oversized parameter lists into context structs across pipeline and GUI.
Infrastructure
- CI now runs the full test suite on Linux, macOS, and Windows (#102).
Downloads
| Platform | Artifact |
| --- | --- |
| Linux x86_64 (glibc) | vykar-v0.12.14-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.14-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.14-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.14-aarch64-unknown-linux-musl.tar.gz |
| Linux GUI (AppImage) | vykar-gui-v0.12.14-x86_64.AppImage |
| macOS (Apple Silicon) | vykar-v0.12.14-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.14-x86_64-pc-windows-msvc.zip |
- Linux desktop AppImage packaging added
- CLI `backup` subcommand gains `--threads` option for parallelism control
- Nix flake packaging introduced
Full changelog
What's Changed
Features
- GUI: Add AppImage packaging for Linux desktop
- CLI: Add
--threadsoption tobackupsubcommand for controlling upload parallelism - Nix: Add Nix flake packaging — by @Sntx626 (#96)
Bug Fixes
- GUI: Move folder dialog off Slint event loop to prevent Windows freeze
Internal
- Extract shared utilities into
vykar-commoncrate - Deduplicate code and fix anti-patterns across workspace
- Inline redundant CLI output helpers
Downloads
| Platform | File |
|---|---|
| Linux x86_64 (glibc) | vykar-v0.12.13-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.13-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.13-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.13-aarch64-unknown-linux-musl.tar.gz |
| Linux x86_64 AppImage | vykar-gui-v0.12.13-x86_64.AppImage |
| macOS aarch64 | vykar-v0.12.13-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.13-x86_64-pc-windows-msvc.zip |
- Version number displayed in GUI status bar
Full changelog
GUI improvements and Windows runtime fix.
Features
- GUI: show version number in the status bar
Bug Fixes
- GUI: invert tray icon on dark themes for Linux/Windows
- Windows: statically link MSVC C runtime to avoid missing DLL errors on systems without Visual C++ Redistributable
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (static) | vykar-v0.12.12-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (glibc, GUI) | vykar-v0.12.12-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (static) | vykar-v0.12.12-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.12-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | vykar-v0.12.12-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.12-x86_64-pc-windows-msvc.zip |
- Added `env_file` config key to load `.env` files before variable expansion
- Windows binaries are now Authenticode-signed via Certum SimplySign (PKCS#11)
Full changelog
Fixes Windows and Linux platform issues, adds env_file config support, and introduces Windows Authenticode code signing.
Features
- Add
env_fileconfig key to load.envfiles before variable expansion - Windows binaries are now Authenticode-signed via Certum SimplySign (PKCS#11)
Bug Fixes
- SFTP: use POSIX path joins to prevent backslash path separators leaking into remote paths on Windows
- GUI: run tray icon on a dedicated GTK thread to fix Linux tray rendering issues (#69)
- Daemon: release glibc malloc arenas after each backup cycle to reduce RSS on long-running daemons
Docs
- Add Windows path quoting examples to config docs and templates
- Note that local repo paths need
ReadWritePaths=in systemd unit files - Use correct XDG paths in systemd service example
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (static) | vykar-v0.12.11-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (glibc, GUI) | vykar-v0.12.11-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (static) | vykar-v0.12.11-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.11-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | vykar-v0.12.11-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.11-x86_64-pc-windows-msvc.zip |
- Sortable columns added to WebDAV directory listings
Full changelog
This release mainly addresses rendering issues of the GUI client on Windows.
Features
- Add sortable columns to WebDAV directory listings in mount (#60)
Bug Fixes
- Replace tinyfiledialogs password box with native Slint dialog (#55)
- Switch GUI renderer from FemtoVG to Skia for native font rendering (#55)
- Show error dialog on GUI startup failure instead of silent exit
- Use ASCII hyphens in dialog titles for Windows compatibility
- Remove checksum verification from install script (broken by missing SHA256SUMS)
Infrastructure
- Fix boolean type for
publish_releaseworkflow input
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (static) | vykar-v0.12.10-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (glibc, GUI) | vykar-v0.12.10-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (static) | vykar-v0.12.10-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.10-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | vykar-v0.12.10-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.10-x86_64-pc-windows-msvc.zip |
- Removed redundant SHA256 checksum files from releases
- Improved snapshot list with stats, grouping, and honest error handling
Full changelog
Features
- Improved snapshot list with stats, grouping, and honest error handling (#53)
Bug Fixes
- Fix tooltip z-order and cursor overlap in GUI (#56)
- Upgrade Slint 1.13 → 1.15 to fix Windows font rendering
Dependencies
- Bump 7 breaking dependencies: ureq 3, russh 0.58, nix 0.31, lz4_flex 0.13, lru 0.16, dav-server 0.11, windows-sys 0.61
Infrastructure
- Add unit tests for S3 backend and http_util
- Remove redundant SHA256 checksum files from releases
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (static) | vykar-v0.12.9-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (glibc, GUI) | vykar-v0.12.9-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (static) | vykar-v0.12.9-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.9-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | vykar-v0.12.9-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.9-x86_64-pc-windows-msvc.zip |
- GUI lazy-create subwindows and FemtoVG rendering
- Config options `check.max_percent` and `check.full_every` for fine‑grained scheduling
Full changelog
Features
- Check config options
check.max_percentandcheck.full_everyfor fine-grained check scheduling (7e50787) - GUI: lazy-create subwindows, fix stale-tree race, switch rendering to FemtoVG (
ba7750d)
Performance
- Fix O(n²) index reconcile, add fast-path commit, reduce cache rebuilds (
d0bad6a) - Pre-size FileCache HashMap to eliminate resize doublings (
3774231) - Skip idle progress updates and repeated lookup work (
044bafd) - Consume PathBuf instead of copying for walk abs_path (
1f9be7e) - Auto-size worker threads by backend locality (
1036684) - Use
Arc<Vec<ChunkRef>>for shared cache-hit ownership (800ef67)
Bug Fixes
- Make vykar-dumps visible and guard against path collisions (
dbc7e2b) - CI: build slim Docker image last so it appears default on GHCR (
f3de13a)
Refactor
- Consolidate repo open functions into
OpenOptionsbuilder (66cf45a) - Deduplicate and rename duration parsers (
983e4d1)
Other
- Revert mimalloc allocator from GUI binary (
ed00d99) - Docs: add Ansible role install option (
c2e1768), merge reference tables inline (2df9525)
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 (musl) | vykar-v0.12.8-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (glibc) | vykar-v0.12.8-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.8-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.8-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | vykar-v0.12.8-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.8-x86_64-pc-windows-msvc.zip |
Checksums in SHA256SUMS.
- Inode-sorted walker for Linux reduces disk seeks on rotational media
- Hybrid file cache keyed by canonicalized source paths with parent‑snapshot fallback, hardened against corruption and torn writes
- SIGUSR1 ad‑hoc backup trigger for the daemon
Full changelog
Features
- Inode-sorted walker for Linux with per-directory filesystem detection — reduces disk seeks on rotational media (
937d954,1163f3c) - Hybrid file cache keyed by individual canonicalized source paths with parent-snapshot fallback, hardened against abort corruption and torn writes (
64d15aa,153ad7c,97f775b,6178599) - SIGUSR1 ad-hoc backup trigger for the daemon (
08838dd) - GUI: date column in Log tab, sorted newest-first (
dc0aa01) - Docker: apprise variant image for hook notifications (
e74bd1e) - File cache lifecycle diagnostics at info level (
8edf355)
Performance
- Skip file cache load for command-dump-only sources (
ca2d765)
Bug Fixes
- Eliminate idle CPU usage in GUI from Slint animation driver and polling loops (
d76ddd8,b468abe) - Make parent snapshot matching order-independent (
9ea8c45) - Use
u64forstatfsmagic constants to compile on musl (1a52d6c) - Use short hostname to avoid network-dependent FQDNs (
8d89d03)
Documentation
- Document compression defaults and CLI override (
5b8e597) - Consistent label-first ordering in sources docs (
a4f51a5)
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 (musl) | vykar-v0.12.7-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (glibc) | vykar-v0.12.7-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.7-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.7-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | vykar-v0.12.7-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.7-x86_64-pc-windows-msvc.zip |
Checksums in SHA256SUMS.
- S3: Added soft-delete mode for Object Lock compatibility.
- Core: Coalesce pack range reads to speed up item-stream loading.
- GUI: Cmd-W / Ctrl-W shortcut now closes window to tray.
Full changelog
What's Changed
Features
- S3: Add soft-delete mode for S3 Object Lock compatibility
- Core: Coalesce pack range reads for faster item-stream loading
- GUI: Add Cmd-W / Ctrl-W shortcut to close window to tray
Bug Fixes
- S3: Add Content-MD5 and Content-Type to presigned PUT requests
- GUI: Refresh repo details after backup and snapshot deletion
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 (glibc) | vykar-v0.12.6-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.6-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.6-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.6-aarch64-unknown-linux-musl.tar.gz |
| macOS Apple Silicon | vykar-v0.12.6-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.6-x86_64-pc-windows-msvc.zip |
| Docker | ghcr.io/borgbase/vykar:0.12.6 |
SHA256 checksums are available in SHA256SUMS and per-artifact .sha256 files.
- GUI: Sources tab rows are expandable for better overview
- Docker image now bundles curl, jq, and bash to support hook execution
Full changelog
What's Changed
Features
- GUI: Add expandable source rows in Sources tab for better overview
- Docker: Add
curl,jq, andbashto Docker image for hook support
Bug Fixes
- Core: Move hook orchestration to core so hooks run from all clients (CLI and GUI)
- Core: Treat EIO (os error 5) as a soft/skippable backup error
- GUI: Use display-width-aware truncation to prevent panic on multi-byte filenames
- GUI: Improve restore dialog UX with busy state, completion feedback, and cancellable distinction
Improvements
- GUI: Restructure with idiomatic Slint architecture
Documentation
- Clarify crypto design, add architecture rationale, update roadmap
- Restructure Exclude Patterns section for clarity
- Add network-aware backup recipes
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 (glibc) | vykar-v0.12.5-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.5-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.5-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.5-aarch64-unknown-linux-musl.tar.gz |
| macOS Apple Silicon | vykar-v0.12.5-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.5-x86_64-pc-windows-msvc.zip |
| Docker | ghcr.io/borgbase/vykar:0.12.5 |
SHA256 checksums are available in SHA256SUMS and per-artifact .sha256 files.
Fixed S3 LIST response decoding and removed buggy lock acquisition retry logic.
Full changelog
Bug Fixes
- Fix S3 LIST response key decoding for Garage compatibility (#29).
rusty_s3sendsencoding-type=urlwith ListObjectsV2 but never decodes the response. Garage URL-encodes/as%2F, which broke alllist()operations (locks, snapshots, packs, sessions). Keys are now percent-decoded after XML parsing. This is a no-op for backends that don't encode (AWS S3, MinIO). - Remove lock acquisition LIST retry loop that was based on an incorrect eventual-consistency diagnosis. Add a non-panic fallback for the edge case where LIST doesn't return a just-written key.
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 (glibc) | vykar-v0.12.4-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.4-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.4-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.4-aarch64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.12.4-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.4-x86_64-pc-windows-msvc.zip |
| Docker | ghcr.io/borgbase/vykar:0.12.4 |
- Renamed GUI action from "Backup All" to "Full Backup"
- Removed per‑repository Check and Compact buttons
- Added tooltips for the Full Backup option
- Daemon multi‑repo output now includes a prominent header and URL link
Full changelog
Features
- Rename "Backup All" to "Full Backup" in GUI, add tooltips, remove per-repo Check/Compact buttons
- Improve daemon multi-repo output with prominent header and URL (#30)
Bug Fixes
- Fix snapshot view showing only selected repo after Full Backup (#31)
- Handle S3 eventual consistency on lock acquire and improve lock error display (#29)
Infrastructure
- Fix release publish job failing due to Docker buildx cache artifact interfering with artifact download
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (glibc) | vykar-v0.12.3-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.3-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.3-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.3-aarch64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.12.3-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.3-x86_64-pc-windows-msvc.zip |
| Docker | ghcr.io/borgbase/vykar:0.12.3 |
- Coverage‑guided fuzz tests for parser and crypto paths
- SIGHUP‑based config hot‑reload in daemon mode
- Docker image published to GHCR on release
Full changelog
Bug Fixes
- Display CLI timestamps in local timezone instead of UTC
- Auto-refresh snapshot view after backup completes in GUI
- Handle inconsistent SFTP status codes in
mkdir_pfor symlinks
Features
- Add coverage-guided fuzz tests for parser and crypto paths
- Add SIGHUP-based config hot-reload for daemon mode
- Add Docker image published to GHCR on release
Documentation
- Add Testing section to architecture page
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (musl) | vykar-v0.12.2-x86_64-unknown-linux-musl.tar.gz |
| Linux x86_64 (glibc) | vykar-v0.12.2-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.2-aarch64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.2-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | vykar-v0.12.2-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.2-x86_64-pc-windows-msvc.zip |
| Docker | ghcr.io/borgbase/vykar:0.12.2 |
- New `check --repair` mode automatically fixes issues detected by `vykar check`
Full changelog
What's Changed
Features
check --repair: New repair mode forvykar checkthat automatically fixes detected issues, plus unified scan pipelines for consistency (c70e534)
Bug Fixes
- Accept both strings and lists for global/repo hook values in config (
901e5c5) - Suppress misleading plaintext passphrase warning when
passcommandis used (bbc24a7)
Testing
- Add proptest and matrix-style tests for compression, index delta, prune, and deserialize (
cd790b8) - Verify passcommand handles shell quoting via
sh -c(c00ba40)
Docs
- Add mermaid diagrams to architecture page and style globally (
ef495fe) - Restructure comparison into security, operations, and UX tables (
05b27c2)
Downloads
| Platform | File |
|---|---|
| macOS (Apple Silicon) | vykar-v0.12.1-aarch64-apple-darwin.tar.gz |
| Linux x86_64 (glibc) | vykar-v0.12.1-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.1-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.1-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.1-aarch64-unknown-linux-musl.tar.gz |
| Windows x86_64 | vykar-v0.12.1-x86_64-pc-windows-msvc.zip |
Verify downloads with SHA256SUMS.
- on-disk repository format changed; mutable manifest removed; existing v0.11.x repos are not compatible and must be recreated with `vykar delete` then `vykar init`, permanently removing all backup data
- Append-only repository layout (mutable manifest removed)
- TOFU repository identity pinning to prevent silent repo swaps
- YAML-driven scenario runner for automated backup testing
Full changelog
⚠️ Breaking Change
The on-disk repository format has changed to enable append-only repositories (mutable manifest removed). Existing repositories created with v0.11.x are not compatible. You must run vykar delete followed by vykar init to re-create them. This will permanently remove all existing backup data in the repository — ensure you have alternative copies of critical data before upgrading.
Features
- Append-only repository layout — Eliminate the mutable manifest for a simpler, more robust on-disk format.
- TOFU repository identity pinning — Prevent silent repo swaps by pinning the repository identity on first use.
- YAML-driven scenario runner — Automated backup testing via declarative YAML scenario files.
- Proptest round-trip properties — Property-based tests for crypto, serde, and backup pipelines.
Bug Fixes
- Batch-verify packs via shard listing — Fix
verify_delta_packsto use shard directory listing instead of index walk. - REST server backward-compat — Handle v1 repo format manifest key for older repositories.
- Harden config parsing and local write durability — Stricter config validation and fsync guarantees.
Testing
- Proptest property tests for the CDC chunker.
- Corruption fixture matrix tests for
vykar check.
Infrastructure
- Bypass faker-file for fast corpus generation (30s → 1s).
- Consolidate scripts into single testbench Python project.
- Migrate benchmark script to Python.
Docs
- Clarify that each source entry produces its own snapshot.
- Expand exclude patterns section with syntax reference and common mistakes.
Downloads
| Platform | Artifact |
|----------|----------|
| Linux x86_64 (glibc) | vykar-v0.12.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.12.0-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.12.0-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.12.0-aarch64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.12.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.12.0-x86_64-pc-windows-msvc.zip |
Checksums available in SHA256SUMS.
Fixed plaintext chunk_id_key consistency race during restore.
Full changelog
Bug Fixes
- fix: plaintext chunk_id_key consistency and restore race with compact — Ensure unencrypted repos derive a stable
chunk_id_keyand fix a race condition where restore could read a pack that compact was repacking. - fix(test): isolate scheduler lock in daemon tests — Use per-fixture
XDG_CONFIG_HOMEto prevent scheduler lock contention across parallel test runs.
Infrastructure
- Update e2e test guidance and REST backend defaults.
Downloads
| Platform | Artifact |
|----------|----------|
| Linux x86_64 (glibc) | vykar-v0.11.8-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.11.8-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.11.8-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.11.8-aarch64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.11.8-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.11.8-x86_64-pc-windows-msvc.zip |
Checksums available in SHA256SUMS.
- Full backup→prune→compact→check cycle centralized in vykar-core, exposed to both CLI and GUI
- Duplicate scheduler prevention using flock-based locking
- GUI remains running in system tray when its window is closed
Full changelog
Features
- Full backup cycle in core: Centralize the complete backup→prune→compact→check cycle in vykar-core, making it available to both CLI and GUI
- Duplicate scheduler prevention: Use flock-based locking to prevent multiple scheduler instances from running concurrently
- GUI stays in tray: Keep the app running in the system tray when the window is closed
Bug Fixes
- GUI Cancel button: Fix Cancel button not working during running backup operations
- Config validation: Reject unknown keys in source-level hooks configuration
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 (glibc) | vykar-v0.11.7-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.11.7-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.11.7-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.11.7-aarch64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.11.7-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.11.7-x86_64-pc-windows-msvc.zip |
Verify downloads with the SHA256SUMS file.
- Lock fencing detects stale locks during writes to avoid data corruption
- Verbose backup status (`--verbose`) provides per‑file progress reporting
Full changelog
Features
- Lock fencing: Detect stale locks during writes to prevent data corruption from expired lock holders (
6dbd1ac) - Verbose backup status: Per-file status reporting during backup with
--verboseflag (7c695fd)
Bug Fixes
- Allow
result_large_errlint on impl blocks with ureq closures (d7c069d)
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (glibc) | vykar-v0.11.6-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.11.6-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.11.6-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.11.6-aarch64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.11.6-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.11.6-x86_64-pc-windows-msvc.zip |
- Cron expressions (e.g., `0 2 * * *`) supported as an alternative to fixed intervals
- Dead-PID detection automatically removes stale sessions; added `break-lock --sessions` command
- aarch64 Linux release builds now produced in CI
Full changelog
Features
- Cron-style scheduling: use cron expressions (e.g.
0 2 * * *) as an alternative to fixed intervals - Dead-PID detection for sessions: stale sessions from crashed processes are now detected automatically; added
break-lock --sessionsto manually clear them; per-session.indexjournals are preserved for crash recovery - aarch64 Linux release builds now included in CI
Bug Fixes
- GUI: initialize GTK before tray icon creation on Linux, fixing startup crashes
- Mount: use snapshot creation date as mtime in WebDAV view
Other
- Logging and output made consistent across all command tiers
- Documentation: added desktop GUI page with install instructions, added Kopia to comparison table
Downloads
| Platform | File |
|----------|------|
| macOS (Apple Silicon) | vykar-v0.11.5-aarch64-apple-darwin.tar.gz |
| Linux x86_64 (glibc) | vykar-v0.11.5-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.11.5-x86_64-unknown-linux-musl.tar.gz |
| Linux aarch64 (glibc) | vykar-v0.11.5-aarch64-unknown-linux-gnu.tar.gz |
| Linux aarch64 (musl) | vykar-v0.11.5-aarch64-unknown-linux-musl.tar.gz |
| Windows x86_64 | vykar-v0.11.5-x86_64-pc-windows-msvc.zip |
Fixed GUI display of Windows paths by stripping the `\?\
Full changelog
What's Changed
Performance
- SFTP throughput improvements: Better connection pool sizing, directory existence cache, larger SSH windows, and zero-copy put for significantly faster SFTP backups
Bug Fixes
- GUI: Strip
\\?\prefix from Windows config path display
Improvements
- Simplified concurrency settings: Reduced from 13 configuration knobs to 5 flat fields
Infrastructure
- Added VM and SFTP end-to-end tests
Downloads
| Platform | Archive |
|----------|---------|
| Linux (x86_64, glibc) | vykar-v0.11.4-x86_64-unknown-linux-gnu.tar.gz |
| Linux (x86_64, musl) | vykar-v0.11.4-x86_64-unknown-linux-musl.tar.gz |
| macOS (Apple Silicon) | vykar-v0.11.4-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | vykar-v0.11.4-x86_64-pc-windows-msvc.zip |
Fixed SFTP write/flush/close timeouts to retry with fresh connections and increased the per‑request timeout.
Full changelog
Bug Fixes
- SFTP: retry on write/flush/close timeouts — russh-sftp wraps all SFTP errors as
io::ErrorKind::Other, which was classified as permanent. Write timeouts now trigger retries with fresh connections instead of aborting immediately. Also raises the default per-request SFTP timeout from 10s to 30s, enables SSH keepalive (30s interval) to detect dead connections and keep NAT mappings alive, and enables TCP_NODELAY. A newsftp_timeoutconfig option (5–300s) allows tuning per-request timeouts for slow links. - GUI: allow empty-repo config — the GUI now starts normally when no repositories are configured, instead of exiting with an error.
- GUI: persist state on macOS Cmd+Q and window resize — GUI state is now saved when quitting via Cmd+Q or resizing the window on macOS.
- REST/WebDAV: fix 405 on percent-encoded paths — resolves HTTP 405 errors when repository paths contain percent-encoded characters. Also fixes default config password prompt behavior.
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 (glibc) | vykar-v0.11.3-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl, static) | vykar-v0.11.3-x86_64-unknown-linux-musl.tar.gz |
| macOS Apple Silicon | vykar-v0.11.3-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.11.3-x86_64-pc-windows-msvc.zip |
- Hide console window on Windows release builds
- Vykar executable displays custom logo icon on Windows
- Normalize backslash path separators to forward slashes in backup rel_path for cross‑platform compatibility
Full changelog
Windows Improvements
- Hide console window: The GUI no longer opens a terminal/console window alongside the application on Windows release builds
- Executable icon: The Windows
.exenow displays the vykar logo icon instead of the generic Windows executable icon - Path separators: Fixed backslash path separators in backup
rel_pathon Windows, normalizing them to forward slashes for cross-platform compatibility
GUI
- Auto-init repos: Uninitialized repositories are now automatically initialized on GUI startup
Documentation
- Updated benchmark chart and summary data
Downloads
| Platform | CLI | GUI | Server |
|----------|-----|-----|--------|
| Linux x86_64 (glibc) | vykar-x86_64-unknown-linux-gnu.tar.gz | vykar-gui-x86_64-unknown-linux-gnu.tar.gz | vykar-server-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-x86_64-unknown-linux-musl.tar.gz | — | vykar-server-x86_64-unknown-linux-musl.tar.gz |
| macOS Apple Silicon | vykar-aarch64-apple-darwin.tar.gz | Vykar Backup.app.tar.gz | vykar-server-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-x86_64-pc-windows-msvc.zip | vykar-gui-x86_64-pc-windows-msvc.zip | vykar-server-x86_64-pc-windows-msvc.zip |
Verify downloads with SHA256SUMS.txt.
Fixed crash recovery to locate orphaned session journals without deleting live `.json` markers and improved error messages by showing the repository URL.
Full changelog
Bug Fixes
-
Crash recovery now finds orphaned session journals. Previously,
recover_pending_index()only looked for its own session ID's journal (sessions/<current_id>.index), which never matched an interrupted session's file since each backup gets a fresh random ID. Recovery now scans all.indexfiles undersessions/and classifies each by its companion.jsonmarker state (orphan, stale, active, unknown). Only orphaned and stale journals are recovered; active sessions are skipped conservatively. -
Recovery never deletes
.jsonsession markers. Session marker lifecycle is managed exclusively byderegister_session()(normal exit) andcleanup_stale_sessions()(72h threshold, under maintenance lock). This prevents a slow-refreshing but live backup from being misclassified as stale and having its marker deleted, which could allow maintenance to proceed while the backup is still active. -
Show repository URL in "repository not found" error instead of leaking internal storage detail.
Downloads
| Platform | Archive |
|---|---|
| Linux x86_64 (glibc) | vykar-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-x86_64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-x86_64-pc-windows-msvc.zip |
- Binary names changed: vger → vykar, vger-server → vykar-server, vger-gui → vykar-gui
- Config file renamed from vger.yaml to vykar.yaml
- Config directories migrated: ~/.config/vger/ → ~/.config/vykar/, /etc/vger/ → /etc/vykar/
- Reorganized recipe documentation with added VM backup section
- Simplified install script closing message
Full changelog
Project Rename: V'Ger → Vykar
This release renames the project from V'Ger to Vykar (from Latin vicarius, "substitute").
Breaking Changes
- Binary names:
vger→vykar,vger-server→vykar-server,vger-gui→vykar-gui - Config file:
vger.yaml→vykar.yaml - Config directories:
~/.config/vger/→~/.config/vykar/,/etc/vger/→/etc/vykar/ - Environment variables:
VGER_CONFIG→VYKAR_CONFIG,VGER_PASSPHRASE→VYKAR_PASSPHRASE,VGER_TOKEN→VYKAR_TOKEN - Cache/state paths:
~/.cache/vger/→~/.cache/vykar/ - Dump directory:
.vger-dumps/→.vykar-dumps/ - macOS app:
V'ger Backup.app→Vykar Backup.app
Migration
- Rename your config file:
mv ~/.config/vger/vger.yaml ~/.config/vykar/vykar.yaml - Update any environment variables in your shell profile or systemd units
- Update cron jobs or scripts referencing the old binary names
Repository format is unchanged — existing repos work without modification.
Other Changes
- Reorganize recipe docs, add VM backup section
- Simplify install script closing message
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (glibc) | vykar-v0.11.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl) | vykar-v0.11.0-x86_64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vykar-v0.11.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vykar-v0.11.0-x86_64-pc-windows-msvc.zip |
- Pin GNU build runner to Ubuntu 24.04 in CI workflow to avoid silent glibc version changes.
Full changelog
Bug Fixes
- Install script: auto-detect glibc version — The install script now probes the system's libc and glibc version, automatically selecting the statically-linked musl build when glibc is too old (< 2.39) or undetectable. Previously, the script always picked the GNU build, which failed at runtime on older distributions (e.g. Debian 11, Ubuntu 20.04) with
GLIBC_2.38 not founderrors. - Install script: fix
tmpdir: unbound variable— Fixed a crash at the end of the install script caused by a local variable escaping its scope underset -eu.
Infrastructure
- Pin GNU build runner to Ubuntu 24.04 — The release workflow now explicitly pins
ubuntu-24.04instead ofubuntu-latestto prevent silent glibc version changes.
Downloads
| Platform | Architecture | File |
|----------|-------------|------|
| Linux (glibc) | x86_64 | vger-v0.10.2-x86_64-unknown-linux-gnu.tar.gz |
| Linux (musl) | x86_64 | vger-v0.10.2-x86_64-unknown-linux-musl.tar.gz |
| macOS | Apple Silicon | vger-v0.10.2-aarch64-apple-darwin.tar.gz |
| Windows | x86_64 | vger-v0.10.2-x86_64-pc-windows-msvc.zip |
- `latest` alias for snapshots in `vger list` and `vger snapshot info`
- Hostname displayed in `vger list` output and GUI snapshot table
- Progress reporting shows command dump execution status alongside file processing
Full changelog
Features
latestalias for snapshots — Uselatestin place of a snapshot ID invger listandvger snapshot infoto refer to the most recent snapshot.- Hostname in snapshot list —
vger listand the GUI snapshot table now display the hostname where the backup was taken. - Progress reporting for command dumps — Backup progress now shows command dump execution status alongside file processing.
Infrastructure
- Signed and notarized macOS binaries — The CLI and GUI app bundle are now code-signed with a Developer ID certificate and notarized with Apple, eliminating Gatekeeper warnings on macOS.
Documentation
- Add command dumps section to the configuration reference.
- Consolidate config sections and add 3-2-1 backup tip.
- Update roadmap with new planned features.
Downloads
| Platform | File |
|----------|------|
| Linux (x86_64, glibc) | vger-v0.10.1-x86_64-unknown-linux-gnu.tar.gz |
| Linux (x86_64, musl) | vger-v0.10.1-x86_64-unknown-linux-musl.tar.gz |
| macOS (Apple Silicon) | vger-v0.10.1-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | vger-v0.10.1-x86_64-pc-windows-msvc.zip |
- Concurrent multi‑client backups with advisory lock serialization during commit phase
- GUI inline YAML config editing via new Edit tab in vger-gui
- macOS builds are now code signed and notarized
Full changelog
Features
- Concurrent multi-client backups — multiple machines can now back up to the same repository simultaneously. Only the brief commit phase is serialized via advisory locks. (docs)
- GUI: inline YAML config editing — new Edit tab in
vger-guifor editingvger.yamldirectly in the desktop app - macOS code signing and notarization — macOS builds are now signed and notarized for a smoother install experience
Performance
- Fix 17 GB peak heap from large command dumps —
command_dumpstdout is now streamed through the chunker instead of buffered in memory
Bug Fixes
- Fix stress test HTTP opt-in handling and S3 range request signing
Docs & Community
- Add
CONTRIBUTING.mdwith contribution guidelines - Add security contact to README
- Document concurrent multi-client backup workflow
Downloads
| Platform | File |
|----------|------|
| Linux (glibc) | vger-v0.10.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux (musl/static) | vger-v0.10.0-x86_64-unknown-linux-musl.tar.gz |
| macOS (Apple Silicon) | vger-v0.10.0-aarch64-apple-darwin.tar.gz |
| Windows | vger-v0.10.0-x86_64-pc-windows-msvc.zip |
Checksums are in SHA256SUMS.
- Harden REST server repo deletion
- Smart snapshot dispatch across multiple repositories
- Graceful Ctrl‑C handling with lock release and abort‑safe pack flushing
- Partial‑success exit code (3) to continue backup on unreadable files
Full changelog
Features
- Smart snapshot dispatch across multiple repositories
- Graceful Ctrl-C with lock release and abort-safe pack flushing
- Pending index journal for interrupted backup recovery
- Live progress during large file backup
- Partial-success exit code — continue backup on unreadable files (exit code 3)
- Static musl Linux build for glibc-independent binary
- Server: auto-detect filesystem quota with
quotactl_fd
Performance
- Dynamic pack size scaling
- Batch-verify pending packs via shard listing instead of per-pack HEAD
- Replace mmap with heap buffers for data-pack assembly
Bug Fixes
- Stream pack verification to prevent multi-GB memory spikes
- Use display width for progress line truncation with CJK chars
- Use ioctl/Win32 for terminal width instead of COLUMNS env var
- Prevent tracing warnings from corrupting progress line
- Only warn about plaintext passphrase during
init - Harden REST server repo deletion
- Fix macOS app icon margin
Infrastructure
- Auto-cancel superseded release workflow runs
- Add zstd compression example to generated config template
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 (glibc) | vger-x86_64-unknown-linux-gnu.tar.gz |
| Linux x86_64 (musl, static) | vger-x86_64-unknown-linux-musl.tar.gz |
| macOS aarch64 | vger-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-x86_64-pc-windows-msvc.zip |
SHA256 checksums are in SHA256SUMS.txt.
- Rename `rest_token` config field to `access_token`
- Package vger-gui as native macOS .app bundle
- Tray menu overhaul with config switching, state persistence, and cancel fix
- --upload-concurrency flag for tuning parallel uploads in vger backup
Full changelog
What's New
GUI
- Package vger-gui as a native macOS
.appbundle - Tray menu overhaul with config switching, state persistence, and cancel fix
- Add progress reporting, cancel support, and snapshot stats display
- Improve UI polish and startup config handling
Features
- Add
--upload-concurrencyflag tovger backupfor tuning parallel uploads - Rename
rest_tokenconfig field toaccess_token(breaking config change)
Performance
- Cache index blob locally for remote repositories — avoids re-downloading the full index on every backup
- Drain completed uploads first to fix FIFO head-of-line blocking
- Enable AES-GCM hardware acceleration on aarch64 (Apple Silicon / ARM servers)
- Increase BufWriter capacity and sync data before rename in
vger-serverPUT handler
Bug Fixes
- Move
--repoflag from parentsnapshotcommand to each subcommand for correct precedence - Retry body reads in REST and S3 backends on transient failures
Docs
- Document plaintext encryption mode (
none) - Reorder YAML examples to show
labelbeforeurl
Downloads
| Platform | Artifact |
|----------|----------|
| Linux x86_64 | vger-v0.8.1-x86_64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vger-v0.8.1-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-v0.8.1-x86_64-pc-windows-msvc.zip |
Checksums are available in SHA256SUMS.
- Replace OpenDAL with rusty-s3 + ureq; explicit S3 endpoint configuration is now required
- vger-server TOML config replaced by CLI flags and `VGER_TOKEN` env var
- Compact threshold default changed to 20%
- `vger daemon` subcommand for scheduled headless backups
- Server-side init uses a single REST endpoint (replaces 259 create_dir calls)
- `--worker-threads` / `--max-blocking-threads` flags to tune vger-server thread pools
Full changelog
What's new in v0.8.0
Features
vger daemon— new subcommand for scheduled headless backups without cron- Server-side init —
vger initover REST now uses a single server endpoint instead of 259 individualcreate_dircalls - Server single-repo mode —
vger-serverdefaults to localhost and supports single-repo mode for simpler setups --worker-threads/--max-blocking-threads— new flags to tunevger-serverthread pools- Server-side pack verification —
vger checkcan verify pack integrity on the server with automatic fallback to client-side - BLAKE2b content checksums — REST backend uploads include a content checksum for end-to-end integrity
- ZSTD-compressed chunk index — the chunk index is now ZSTD-compressed before encryption, reducing repo overhead
Performance
- Restore overhaul — replaced rayon with pack-affinity partitioning and LRU handle eviction; batch same-file writes; fd-based metadata ops; single-pass item deserialization; group-local buffers saving ~174 MiB RSS; ZSTD decompressor reuse; temp-dir-then-move for crash safety
- Compact — metadata-only size checks in Phase 1 replace full pack downloads
Storage
- Replaced OpenDAL with rusty-s3 + ureq — lighter dependency tree, explicit S3 endpoint configuration required
Refactoring
- Split
vger-coreintovger-types,vger-crypto, andvger-storagecrates - Extracted
vger-protocolcrate for shared check/compact logic - Renamed
extracttorestoreacross the codebase - Added type-safe
SnapshotIdnewtype - Replaced
vger-serverTOML config with CLI flags +VGER_TOKENenv var - Compact threshold default changed to 20%
Bug Fixes
- Fix restore path-based metadata on non-Unix platforms
- Cap GUI log model to prevent unbounded memory growth
- Harden short-read detection and add restore error context
- Fix Windows CI checkout with paths containing colons
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 | vger-v0.8.0-x86_64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vger-v0.8.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-v0.8.0-x86_64-pc-windows-msvc.zip |
SHA256 checksums are attached to each artifact and in SHA256SUMS.
- Streaming compress+encrypt pipeline emits one Vec per chunk, avoiding realloc-shrink issues (~140 MB RSS reduction)
- Zero‑copy `put_owned` for pack uploads eliminates full‑pack allocations
- Preallocated buffers and positional writes in REST restore halve syscalls per chunk
Full changelog
Performance
- Streaming compress+encrypt pipeline — backup hot path now produces one Vec per chunk instead of 3–4, with exact-sized pack buffers that avoid glibc ptmalloc2 realloc-shrink pitfalls (~140 MB RSS reduction)
- Eliminate redundant copies on pack upload — zero-copy
put_ownedfor remote backends (S3, REST) avoids one full-pack-size allocation per flush; pre-sized worker chunk Vecs avoid ~7 reallocations per 10 MiB file - REST backend restore — preallocated
get_rangebuffers and positionalwrite_all_aton Unix halve syscalls per chunk - LZ4/ZSTD compression — LZ4 writes directly into spare capacity (no zero-fill); ZSTD uses
compress_to_bufferto eliminate a ~131 KiB temp Vec per chunk - FileCache key compaction — replace full path strings with 16-byte BLAKE2b hashes as HashMap keys, saving ~20–35 MB RSS; backwards-compatible deserialization of legacy caches
Bug Fixes
- REST 404 on empty-prefix LIST —
list("")now uses the base URL directly instead of appending a trailing slash, with a newrepo_list_allhandler on the server
Documentation
- Low-resource background backup recipe (ionice, nice, cgroup limits)
Infrastructure
- Extracted shared script library (
scripts/lib/) and simplified CLIs for stress.sh, benchmark.sh, and profile.sh
Downloads
| Platform | Binary |
|----------|--------|
| Linux x86_64 | vger-x86_64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vger-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-x86_64-pc-windows-msvc.zip |
- Remote storage URLs now require HTTPS by default; set `allow_insecure_http` to opt in.
- Bind AEAD objects to identity context in AAD, preventing cross-repo ciphertext splicing
- Reduce passphrase exposure in subprocesses and environment
- Parallel large-file pipeline using crossbeam-channel stages
- `one_file_system` default changed to false (backups cross filesystem boundaries)
- XOR dedup prefilter for fast redundant chunk skipping
Full changelog
Security
- Enforce HTTPS by default for remote backends — remote storage URLs now require HTTPS; opt in with
allow_insecure_httpif needed - Bind AEAD objects to identity context in AAD — authenticated additional data now includes repository identity, preventing cross-repo ciphertext splicing
- Reduce passphrase exposure in subprocesses and environment — passphrase handling minimizes in-memory lifetime and avoids leaking into child process environments
Features & Improvements
- Parallel large-file pipeline — large files are segmented and chunked in parallel via explicit crossbeam-channel stages, replacing pariter
- XOR dedup prefilter — a fast xor-based filter skips redundant chunk transforms before hitting the full dedup index
one_file_systemdefault changed tofalse— backups now cross filesystem boundaries by default, so bind mounts and subvolumes are no longer silently skipped. Setone_file_system: trueto restore the old behavior.- Walk optimization — skip redundant
symlink_metadatacalls for files whenone_file_systemis enabled
Bug Fixes
- Fix deadlock between pariter reorder buffer and ByteBudget
- Make
delete-reposafe by classifying keys and fixing recursive list - Remove trailing encrypted header from pack files
- Server: recover from RwLock poison instead of panicking
- Windows: use HANDLE type alias for windows-sys 0.59 compatibility (Rust 1.93)
- Fix clippy 1.93 lint for
set_readonly(false)in tests
Dependencies
- Replace
filetimeandhttp-body-utilwith internal implementations - Replace
rpasswordanddirswith internal helpers
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 | vger-v0.7.0-x86_64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vger-v0.7.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-v0.7.0-x86_64-pc-windows-msvc.zip |
SHA256 checksums are available in SHA256SUMS.
- `cache_dir` config option to control mmap temp files and cache storage location
- Reuse ZSTD compression context via thread-local `Compressor` to reduce allocation churn
- Pre-size FileCache HashMap using previous cache length for initial capacity
Full changelog
Memory Optimization
This release dramatically reduces peak memory usage across all operations through mmap-backed storage and streaming processing:
- Mmap-backed pack assembly: Replace heap pack buffers with mmap-backed assembly, reducing backup heap usage from 384 MiB to ~4 MiB
- Pack buffer pool memory reduction: ~40% reduction in pack buffer pool memory (640→384 MiB) before mmap conversion
- Tiered dedup index: Add mmap cache and xor filter for memory-efficient chunk deduplication
- Index-free extract: Restore files without loading the full chunk index into memory, using mmap restore cache
- Streaming item serialization/deserialization: Eliminate temp allocations during backup and reduce extract peak memory
- Incremental index update: Reduce save_state() peak memory by flushing incrementally (~138M saved)
- Open-phase optimization: Reduce open-phase peak memory from ~227M to ~128M
- Restore planner compaction: Use SmallVec and filtered chunk index for ~40% better throughput
Features
cache_dirconfig option: Control where mmap temp files and cache data are stored- Reuse ZSTD compression context: Thread-local
Compressorreuse reduces allocation churn - Pre-size FileCache HashMap: Use old cache length for initial capacity
Bug Fixes
- Release pack buffer pool in
save_state()to avoid retaining memory past its useful life - Recalculate pack writer targets in
load_chunk_index()for correct sizing
Infrastructure
- Add profiling build option to release workflow
- Add
linux_onlyoption for manual release workflow runs
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 | vger-x86_64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vger-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-x86_64-pc-windows-msvc.zip |
Verify checksums with sha256sum -c SHA256SUMS.
- Add `break-lock` command for removing stale advisory locks
Full changelog
What's Changed
Features
- Add
break-lockcommand for removing stale advisory locks
Bug Fixes
- Fix
pipeline_buffer_mibto enforce actual memory cap and prevent thread oversubscription - Deduplicate pack existence checks in
checkandcompact, track corrupt/orphan packs
Performance
- backup: Remove redundant chunk existence checks and O(n) pack offset scan
- extract: Reduce memory usage by dropping unused data structures early
- server: Stream file reads and use async fs ops in object/admin handlers
- Optimize release profile
Refactoring
- restore: Use positional args and remove prefix matching
- cli: Split
main.rsinto focused modules - repo: Add dirty tracking to
save_state()and encapsulate mutable fields
Infrastructure
- Cache Rust dependencies across release workflow runs
- Raise REST server request limit
- Add vger-server systemd service instructions
Downloads
| Platform | Binary |
|----------|--------|
| Linux x86_64 | vger-x86_64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vger-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-x86_64-pc-windows-msvc.zip |
- Harden crypto, compression, and passphrase handling — use `Zeroizing<>` for key material, validate decompression sizes, clear passphrase env vars after use
- Harden key wrapping and command timeouts — enforce timeout on `passcommand` execution, strengthen encrypted key authentication
- Atomic writes and lazy directory creation in local storage backend
- Centralized dependency versions with workspace dependencies
- Workspace lints scaffolding (clippy::pedantic, forbid unsafe code)
Full changelog
What's Changed
Security
- Harden crypto, compression, and passphrase handling — use
Zeroizing<>for key material, validate decompression sizes, clear passphrase env vars after use - Harden key wrapping and command timeouts — enforce timeout on
passcommandexecution, strengthen encrypted key authentication
Performance
- Use atomic writes and lazy directory creation in local storage backend
Bug Fixes
- Fix cross-platform hostname resolution for Windows builds — replace unix-only
nix::unistd::gethostname()with platform-specific helper
Infrastructure
- Centralize dependency versions with
workspace.dependencies - Add workspace lints scaffolding (
clippy::pedantic,unsafe_code = "forbid") - Add SAFETY comments to all
unsafeblocks - Replace
.unwrap()with.expect()orif-letin production code paths - Remove unused dependencies:
indicatif,hostname,whoami,dialoguer
Refactoring
- Split monolithic
config.rsinto focused submodules (defaults,deserialize,hooks,limits,resolve,sources,types,util) - Narrow internal config visibility with
pub(super)and#[serde(deny_unknown_fields)]
Downloads
| Platform | File |
|----------|------|
| macOS (Apple Silicon) | vger-v0.6.1-aarch64-apple-darwin.tar.gz |
| Linux (x86_64) | vger-v0.6.1-x86_64-unknown-linux-gnu.tar.gz |
| Windows (x86_64) | vger-v0.6.1-x86_64-pc-windows-msvc.zip |
SHA256 checksums are included in SHA256SUMS.
- Changed `vger delete` behavior to remove an entire repository; snapshot deletion now uses `vger snapshot delete`.
- Native local backend with path traversal protection replacing the OpenDAL adapter
- SFTP backend using `russh` with connection pooling and reliability fixes
- REST backend support enabled
Full changelog
What's New
Features
- Native local backend with path traversal protection — replaces the OpenDAL local adapter with a purpose-built
std::fsbackend - SFTP backend — new
russh-based SFTP backend with connection pooling and reliability fixes - Restructured delete commands —
vger deletenow deletes an entire repository; snapshot deletion moved tovger snapshot delete - REST backend support enabled
Bug Fixes
- Parallel restore correctness — hardened extract command to fix race conditions and improve cancellation handling
- Windows build — gate SFTP backend on Unix targets to fix cross-platform compilation
- SFTP path handling — normalize joined paths with
Path::joinfor correct behavior
Documentation
- New backup recipes page covering databases, containers, filesystem snapshots, and monitoring hooks
- Fixed ZFS recipe: warn that
snapdir=visibleis required (not the default) - Fixed Btrfs recipe: note that snapshot parent directory must exist
- Added Podman volume paths and inspect commands to container recipes
- Updated command docs and added social share image tags
Downloads
| Platform | File |
|----------|------|
| Linux x86_64 | vger-v0.6.0-x86_64-unknown-linux-gnu.tar.gz |
| macOS ARM | vger-v0.6.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-v0.6.0-x86_64-pc-windows-msvc.zip |
SHA256 checksums are available in SHA256SUMS.
- --repo flag removed from global scope and must be provided per subcommand
- Restore snapshot ID changed from --snapshot to positional argument (vger extract <id>)
- `list` command split into two separate commands: one for listing snapshots, another for listing snapshot contents
- Snapshot find command (`vger snapshot find`) searches files across all snapshots
- Find Files window in GUI provides visual file search across backups
- --compact flag for prune automatically compacts the repo after pruning
Full changelog
What's New
Features
- Snapshot find command — search for files across all snapshots with
vger snapshot find - Find Files window in GUI — visual file search across backups
--compactflag for prune — automatically compact the repo after pruning- Interactive config subcommand —
vger confignow prompts interactively when no destination is specified - Curl-pipe installer — one-liner setup via
curl | sh
CLI Changes (Breaking)
--repomoved to per-subcommand — no longer a global flag- Restore snapshot ID is now positional —
vger extract <snapshot-id>instead of--snapshot listsplit into two subcommands — separate commands for listing snapshots vs. snapshot contents
Improvements
- Reject unquoted booleans, numbers, and nulls in YAML string fields (stricter config validation)
- Cleaner CLI table output with a lighter, modern look
- Hooks now limited to main backup commands only
- Config templates refocused on minimal setup and core concepts
- Unified backup label semantics
- Restore dialog dark mode support and full config path display in GUI
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 | vger-v0.5.0-x86_64-unknown-linux-gnu.tar.gz |
| macOS aarch64 | vger-v0.5.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-v0.5.0-x86_64-pc-windows-msvc.zip |
Verify downloads with SHA256SUMS.
- `create` renamed to `backup`
- `extract` renamed to `restore`
- `archive` renamed to `snapshot`
Full changelog
What's New in v0.4.0
A major release with a new desktop GUI, significant performance improvements, and many usability enhancements.
Desktop GUI
- New Slint-based desktop GUI (
vger-gui) with tabbed interface, per-repo/source backup controls, and ComboBox selectors - System tray icon with scheduled backup support
- Encryption mode selection from the GUI
- Available on macOS and Linux
Performance
- Pipeline parallelism — overlaps I/O and CPU during backup for significantly faster throughput
- Cross-file batching for small files, reducing per-file overhead
- Parallel ChunkId hashing via rayon thread pool
- Streaming backup support for large file sets without excessive memory use
- Rayon-parallelized chunk transform pipeline (compress + encrypt)
- Fix for unbounded memory growth when backing up large files
- S3 upload tuning and simplified upload path
New Features
- Multi-repository configuration — manage multiple backup targets in a single config file
- Hooks system — run shell commands before/after any vger command
vger combined— single command to run init, backup, prune, compact, and checkvger info— per-repository stats (size, chunk count, snapshots)vger mount— WebDAV server with browser-friendly HTML file browsercommand_dumps— capture command output (e.g.,pg_dump) directly into backups- Resource limits — built-in CPU, I/O, and network throttling for backups
- Live TTY progress with indicatif progress bars during backup
- Configurable retry with exponential backoff for remote backends
- Extended attributes (
xattr) preservation on Unix - Environment variable expansion in YAML config files
- Tilde expansion (
~) in repository URLs and source paths - Config resolution with search paths and
VGER_CONFIGenv var - Windows support (CLI only)
CLI Improvements
- Renamed
create→backupandextract→restorefor clarity - Renamed
archive→snapshotacross the entire codebase - Snapshot ID accepted as positional argument in
delete listnow shows source paths and unified labels- Combine multiple source paths into a single snapshot
- Improved table styling for CLI output
Bug Fixes
- Fix stale file cache causing empty restores after delete + compact
- Fix backup correctness issues in edge cases
- Hardened repository operations with backend-native locking and repack
Infrastructure
- CI workflow for main branch with integration tests
- Release builds for Linux (x86_64), macOS (aarch64), and Windows (x86_64)
- Expanded test coverage and reliability improvements
- License changed to GPL-3.0-only (to align with Slint UI dependency)
Downloads
| Platform | Archive |
|----------|---------|
| Linux x86_64 | vger-v0.4.0-x86_64-unknown-linux-gnu.tar.gz |
| macOS ARM | vger-v0.4.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | vger-v0.4.0-x86_64-pc-windows-msvc.zip |
Each archive contains vger (CLI), vger-server, and vger-gui (Linux/macOS only). SHA256 checksums are provided for all artifacts.
- `~` expansion now supported in repository URLs and source paths
- Hooks system added for pre/post command shell execution
- Configurable exponential‑backoff retry for remote backends
- `extract` is renamed to `restore`
- `create` is renamed to `backup`
- `archive` is renamed to `snapshot`
- Added `info` subcommand for per‑repository stats
- Added `combined` command to run all backup steps sequentially
- Mount WebDAV server with a browser‑friendly HTML file browser
Full changelog
What's New
New Commands & Options
infosubcommand for per-repository statscombinedcommand to run all backup steps in sequencemountWebDAV server with browser-friendly HTML file browser- Accept snapshot ID as positional argument in
delete - Rename
extract→restoreandcreate→backupfor clarity - Rename
archive→snapshotacross the codebase
Performance
- Parallel backup chunk transform pipeline with rayon
- Streaming support for larger backups
- S3 upload tuning and simplification
Configuration
- Multi-repository configuration support
- Config resolution workflow with search paths and env vars
- Environment variable expansion in YAML config loading
- Expand
~in repository URLs and source paths - Hooks system for running shell commands before/after vger commands
- Built-in backup resource limits for CPU, IO, and network
- Configurable retry with exponential backoff for remote backends
- Additional exclude options
CLI Improvements
- Live TTY progress bar for backup operations
- Improved table styling with color, Unicode/ASCII auto-detection, and
NO_COLORsupport - Show source paths and unified label in list output
Other
- Extended attribute (xattr) support
- Change license to GPL-3.0-only (to match Slint UI)
- Documentation restructured and migrated to mdbook
- Include vger-server in release tarballs
- REST server and client backend for remote repository access
- `compact` command to reclaim space from deleted/pruned archives
- Pack files: group chunks into ~32 MiB packs for efficient storage
Full changelog
What's New
- REST server and client backend for remote repository access
compactcommand to reclaim space from deleted/pruned archives- Pack files: group chunks into ~32 MiB packs for efficient storage
- Comprehensive test suite for vger-core
Assets
vger-0.2.0-aarch64-apple-darwin.tar.gz— macOS ARM64 binaries (vger+vger-server)