Skip to content

Releases: borgbase/vykar

v0.17.0

10 Jun 18:53

Choose a tag to compare

⚠️ Breaking Changes — Coordinated Upgrade Required

This release stamps snapshots with format version 1 to support non-UTF8 path fidelity. Compatibility is backward-readable but not forward-compatible:

  • New 0.17.0 binaries read all existing repositories and older snapshots.
  • Older binaries cannot read snapshots written by 0.17.0 — they fail cleanly with a decode error, not silent corruption.

If multiple machines share a repository, upgrade them all at the same time. An older binary restoring a snapshot written by 0.17.0 is the direction that is not supported. Existing repositories and old snapshots remain fully readable by this release.

Features

  • Hard links: regular files with multiple links are now preserved across backup and restore. Each member records its source (dev, ino); restore regroups members and relinks them, with the relink path hardened against malformed-snapshot attacks (authoritative chunk-id fingerprint, parent-containment checks, O_EXCL creation).
  • Non-UTF8 paths: filenames and symlink targets that are not valid UTF-8 are now preserved byte-faithfully through backup and restore on Unix. Snapshots additively gain a format_version discriminator (see Breaking Changes).
  • Restore metadata: restore now applies uid/gid (when run as root), directory mtimes, and symlink mtimes, with a uniform chown → xattrs → chmod → mtime ordering so restored caps/setuid and read-only modes survive.
  • S3 multipart upload: packs larger than 16 MiB upload via the S3 multipart API, so a connection reset mid-transfer costs one 16 MiB part instead of restarting the whole pack. Each part is retried independently. We recommend an AbortIncompleteMultipartUpload lifecycle rule (#154).
  • Special files: FIFOs, sockets, and device nodes that vykar cannot represent now emit a per-entry warning instead of being dropped silently. Warn-only — the backup still succeeds.
  • GUI: notifies you with a clickable "(update)" link when a newer release is available.

Bug Fixes

  • Restore durability: restored files are now fsynced (data + inode) before rename, and the destination directory is fsynced after — closing a window where a crash could leave correct-sized files with unflushed contents.
  • Restore retry: a killed restore no longer leaves a temp dir that blocks the next attempt; reserved temp dirs are swept safely on the following run.

Documentation

  • Corrected crash-orphan reclamation guidance (vykar check --repair) in the architecture and maintenance docs, with a regression test.

Updating

To update to the latest version, run:

curl -fsSL https://vykar.borgbase.com/install.sh | sh

See the quickstart guide for other install options.

Downloads

Platform Artifact
Linux x86_64 (gnu) vykar-v0.17.0-x86_64-unknown-linux-gnu.tar.gz
Linux x86_64 (musl) vykar-v0.17.0-x86_64-unknown-linux-musl.tar.gz
Linux aarch64 (gnu) vykar-v0.17.0-aarch64-unknown-linux-gnu.tar.gz
Linux aarch64 (musl) vykar-v0.17.0-aarch64-unknown-linux-musl.tar.gz
macOS aarch64 vykar-v0.17.0-aarch64-apple-darwin.tar.gz
Windows x86_64 vykar-v0.17.0-x86_64-pc-windows-msvc.zip
GUI (AppImage) vykar-gui-v0.17.0-x86_64.AppImage

SHA256 checksums are attached to this release.

v0.16.2

08 Jun 11:14

Choose a tag to compare

Bug Fixes

  • Windows backup: skip locked files instead of aborting the whole backup when a file can't be opened (#147)
  • List: show restore size and add an "Added" column reporting newly stored bytes per snapshot (#153)

Improvements

  • S3: surface an actionable hint when a PUT fails due to a connection close, pointing at the likely cause (#151)

Updating

To update to the latest version, run:

curl -fsSL https://vykar.borgbase.com/install.sh | sh

See the quickstart guide for other install options.

Downloads

Platform Artifact
Linux x86_64 (gnu) vykar-v0.16.2-x86_64-unknown-linux-gnu.tar.gz
Linux x86_64 (musl) vykar-v0.16.2-x86_64-unknown-linux-musl.tar.gz
Linux aarch64 (gnu) vykar-v0.16.2-aarch64-unknown-linux-gnu.tar.gz
Linux aarch64 (musl) vykar-v0.16.2-aarch64-unknown-linux-musl.tar.gz
macOS aarch64 vykar-v0.16.2-aarch64-apple-darwin.tar.gz
Windows x86_64 vykar-v0.16.2-x86_64-pc-windows-msvc.zip
GUI (AppImage) vykar-gui-v0.16.2-x86_64.AppImage

SHA256 checksums are attached to this release.

v0.16.1

19 May 09:13

Choose a tag to compare

Bug Fixes

  • Prune now groups by source label regardless of local config. Previously, running prune from a repo without a configured sources: block (e.g. on a central server backing up clients) pooled every snapshot into a single bucket and ignored source labels, producing wrong retention. Labels are intrinsic to each snapshot, so grouping is now consistent with how snapshots were created. (#138)
  • SFTP pool-acquire waits no longer masquerade as transport retries. On connection-capped servers (e.g. Hetzner Storage Box), concurrent uploads previously logged connection error (attempt N/5) for pure pool contention and consumed the user-visible retry budget. Pool waits now log distinctly (waited Ns for connection pool slot), do not touch the retry budget, and don't trigger backoff. A wedged-pool fuse preserves liveness if a slot ever leaks.
  • Multi-path sources can now share the same basename. Snapshots prefix each source-path's contents by the full configured absolute path, so paths like /etc and /var/lib/machines/base/etc can coexist in one source. Single-path single-source files keep the legacy basename layout. (#143)
  • Windows path normalization fixed. A str::replace regression in the duplicate-basename fix broke compilation on x86_64-pc-windows-msvc. The Linux/macOS builds never compile that branch, so the issue surfaced only on Windows.
  • GUI link error on macOS fixed. Pinned slint and slint-build to ~1.15 to avoid duplicate muda Objective-C class registration that broke macOS release linking.

Dependencies

  • Security: russh bumped to 0.60.3 and russh-sftp to 2.1.2 for two upstream CVEs — GHSA-f5v4-2wr6-hqmg (keyboard-interactive OOM) and CVE-2026-46673 (compression ZIP-bomb that bypassed max-packet checks).
  • Hygiene bumps: rusty-s3 0.9.1, fastcdc 4.0.1, nix 0.31.3, tray-icon 0.22.2, lru 0.18.
  • ureq unified on v3 across the workspace, eliminating a duplicate v2 from the CLI dev-dep test pipeline.

Infrastructure

  • All Node.js-based GitHub Actions bumped to current majors for Node.js 24 compatibility (the runner forces Node 24 by default starting 2026-06-02).

Downloads

Platform Asset
Linux x86_64 (glibc) vykar-v0.16.1-x86_64-unknown-linux-gnu.tar.gz
Linux x86_64 (musl) vykar-v0.16.1-x86_64-unknown-linux-musl.tar.gz
Linux aarch64 (glibc) vykar-v0.16.1-aarch64-unknown-linux-gnu.tar.gz
Linux aarch64 (musl) vykar-v0.16.1-aarch64-unknown-linux-musl.tar.gz
Linux x86_64 (GUI AppImage) vykar-gui-v0.16.1-x86_64.AppImage
macOS aarch64 vykar-v0.16.1-aarch64-apple-darwin.tar.gz
Windows x86_64 vykar-v0.16.1-x86_64-pc-windows-msvc.zip

v0.16.0

06 May 14:05

Choose a tag to compare

Bug fixes

  • Backup performance on iCloud-heavy macOS trees: skip getxattr on dataless inodes. The walker was round-tripping to fileproviderd for 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_mut to satisfy Rust 1.95 clippy::pedantic on Linux-only code paths.

Reliability & code quality

  • Crypto: MasterKey::generate now propagates OsRng failures instead of panicking — relevant for sandboxed/container environments where kernel entropy may be temporarily unavailable.
  • Storage: document that synchronous StorageBackend methods (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; lossy as-casts replaced with checked integer math.
  • Types: encapsulate ChunkId / PackId / SnapshotId newtypes behind from_bytes() / as_bytes(); drop the unused VykarError::Storage variant.
  • CLI: split main.rs into lib.rs + helpers, introduce a thiserror-based CliError, group run_backup arguments into BackupRunOpts.
  • Core: gate BudgetGuard and dead helpers on cfg(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

04 May 07:27

Choose a tag to compare

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

27 Apr 21:26

Choose a tag to compare

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 daemon now 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 daemon
    

    Endpoints: GET / (HTML), GET /healthz (plain text liveness probe), GET /api/status.json (JSON). Non-loopback binds are rejected at startup unless --http-allow-public (or VYKAR_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.

Screenshot 2026-04-27 at 21 42 36

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

27 Apr 18:26

Choose a tag to compare

Features

  • GUI + CLI diff command: 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.
Screenshot 2026-04-27 at 09 23 06

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 + 1 to detect files growing during backup.
  • Validate Item::size invariant 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_dump failures as typed errors instead of expect() panics.

Refactors

  • Split backup/pipeline.rs into orchestrator + stage submodules.
  • Split commands/restore.rs into 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

23 Apr 07:30

Choose a tag to compare

Features

  • GUI: New sidebar-driven layout. Tabs and multi-window are gone; pages are now split into ui/components/ and ui/pages/, repo selection persists by name (survives reordering/renaming), Overview shows the newest three snapshots, an in-window Cancel button mirrors the tray path, and Page is 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).
v0-13-0

Performance

  • File cache: ~33% smaller on disk and in RAM. The save path is now zstd-compressed behind a new FORMAT_VERSION_BYTE 0x10, csize is 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 as Vec<CachedChunkRef> with zero Vec allocation 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_run as Instant; on macOS and Linux monotonic clocks freeze during sleep, so a 2h interval effectively restarted from wake. next_run is now SystemTime, 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 SessionGuard heartbeat thread replaces pipeline-driven refreshes, refresh_session is now non-resurrecting, and VykarError::ActiveSessions now carries host/pid/age plus a structural None for 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/data was silently rejected every run, costing ~7 min of parent-reuse rebuild per backup. Cap removed; decode outcomes are now split into Loaded / Rejected / Malformed so rejections and parse failures log distinctly (49a1ea3).
  • Retry: default backoff widened to ~70s. max_retries raised from 3 to 5 and retry_delay_ms from 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

19 Apr 07:19

Choose a tag to compare

Bug Fixes

  • Restore file and symlink source paths via unified root policy (8d9862b)

Infrastructure

  • Eliminate APPIMAGE env 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

18 Apr 04:33

Choose a tag to compare

Features

  • GUI: New autostart and start-in-background settings (#82).
  • GUI: Restore window tree view now shows source paths (#57).
  • CLI: --repo / --source options 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 vykar command; 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-sys build failure (#90).

Internal

  • Consolidated filesystem walkers across platforms (#101).
  • Unified entry materialization across the pipeline and sequential backup paths.
  • Split worker.rs megaswitch (GUI) and repo/mod.rs facade into focused submodules.
  • Privatized core chunker and limits modules; 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