This release reworks the GUI and hardens the server and index against mid-operation failures and silent local corruption. The local full-index cache format changes to v2 — v1 caches are rejected and transparently rebuilt from the AEAD-verified remote index on first open, with no migration step and no repository changes required.
Features
- GUI rework: the desktop app is restructured around per-domain units (new
bootstrap.rs) with an RAII operation guard replacing manual begin/end calls. New onboarding flow with a welcome empty state when no repositories are configured, failed repos now stay in the sidebar as error cards with per-repo retry, and read operations run under the busy guard with cancel support (tray cancel now covers any operation, not just backups). Adopts Slint 1.13–1.17 features: open-url, password visibility toggle, tooltips, and a snapshots context menu.
Bug Fixes
- Index cache integrity (data-loss fix): the fast-path commit promoted the plaintext local full-index cache to the authoritative remote index after only magic/version/generation/size checks, so silent local corruption (bitrot, torn write) could be re-encrypted with valid AEAD and become authoritative — an understated refcount could cascade to permanent chunk loss via prune and compact. Format v2 appends a BLAKE2b-256 trailer over the entry region, verified on open; a mismatch falls back to rebuilding the cache from the verified remote index (#dc6022a).
- Server atomicity: repack is now all-or-nothing — new packs are renamed first (rolling back on error, never touching pre-existing content-addressed packs) and sources are deleted only after every op succeeds. Fixes mid-plan failures that deleted sources without returning results, and a latent bug where a keep-everything op destroyed its own pack. Adds RAII quota reservations that close the pre-check/commit race, fsync of temp data and parent directories before ack, and append-only handling of temp-file debris.
- Server-cap batching: repack plans are split into batches within the server output cap and applied to the index as each completes (a later batch failure no longer discards work the server already performed), falling back to client-side repack when a single op exceeds the cap. REST batch deletes are chunked to 100k keys per request.
- GUI empty configs & error surfacing: repo-less configs are accepted so reload/save/switch land on the welcome page instead of rejecting the starter template; repo-info failures surface as a persistent red footer status; and restore, mount, and snapshot-contents re-prompt on a wrong passphrase and self-heal a stale cached entry.
Performance
- Incremental backup memory: index rollback checkpoints no longer clone the entire refcount map (which grows with every dedup and cache hit over a backup). An undo log armed on the delta makes rollback O(in-scope mutations) instead of O(map size), cutting memcpy and allocator churn on large incremental backups (#71f4315).
Infrastructure
- Bumped all workspace dependencies.
Updating
To update to the latest version, run:
curl -fsSL https://vykar.borgbase.com/install.sh | shSee the quickstart guide for other install options.
Downloads
| Platform | Artifact |
|---|---|
| Linux x86_64 (gnu) | vykar-v0.18.0-x86_64-unknown-linux-gnu.tar.gz
|
| Linux x86_64 (musl) | vykar-v0.18.0-x86_64-unknown-linux-musl.tar.gz
|
| Linux aarch64 (gnu) | vykar-v0.18.0-aarch64-unknown-linux-gnu.tar.gz
|
| Linux aarch64 (musl) | vykar-v0.18.0-aarch64-unknown-linux-musl.tar.gz
|
| macOS aarch64 | vykar-v0.18.0-aarch64-apple-darwin.tar.gz
|
| Windows x86_64 | vykar-v0.18.0-x86_64-pc-windows-msvc.zip
|
| GUI (AppImage) | vykar-gui-v0.18.0-x86_64.AppImage
|
SHA256 checksums are attached to this release.