Releases: borgbase/vykar
v0.16.0
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
v0.15.0
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 |
v0.14.1
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.
v0.14.0
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 |
v0.13.0
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 |
v0.12.15
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 |
v0.12.14
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 |
v0.12.13
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 |
v0.12.12
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 |
v0.12.11
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 |