A feature release centred on hooks and network reliability: a before hook can now skip a run quietly with exit 75, REST and S3 verify certificates against the OS trust store, and stalled connections no longer hang the daemon. The Linux GUI also drops its GTK dependency.
This is the first published release since v0.20.1. The v0.21.0 tag exists, but Windows signing failed during its release, so it has no GitHub Release. Its Docker images (0.21.0) contain the same code as this release. These notes cover everything since v0.20.1.
Behaviour changes to check before updating
-
Linux hosts with no CA bundle now fail over HTTPS, including to public endpoints, with
No CA certificates were loaded from the system. This affects REST and S3 repositories on minimal containers and similar systems. Installca-certificates, or pointSSL_CERT_FILEorSSL_CERT_DIRat your certificates. There is deliberately no fallback to the previously bundled Mozilla roots. The official Docker images already includeca-certificates. -
macOS and Windows now use OS certificate verification, including any revocation checks it performs.
-
A
beforehook that already exits 75 now skips the run instead of failing it. -
A skipped run exits 0.
vykar backup && pingtherefore reports success even though no snapshot was created. For monitoring, ping from anafter_backuphook, which does not run on a skip. -
In GUI cycles,
beforehooks now run before the passphrase dialog, and a failure to open the repository now firesfailedandfinallyhooks. -
compacton append-only servers now leaves the repository larger. The repack succeeds and the deletion of the source packs fails, so the repository stays consistent but does not shrink.
Skipping a run from a hook
Setups like "only back up on home Wi-Fi" gate runs with a failing before hook, so every gated run was reported as an error. A before hook at the global, repository or source level can now exit 75 to skip the command: (#64)
hooks:
before_backup: nmcli -t -f active,ssid dev wifi | grep -q '^yes:HomeNetwork$' || exit 75- The command and its
afterandfailedhooks do not run.finallyhooks still do, and the CLI exits 0. - Skipping
backupin a cycle also skipsprune,compactandcheck, so nothing connects to the repository. - One skipped source lets the others continue. If every selected source skips, it counts as a repository-level skip.
- The daemon reports a new
skippedoutcome only when every attempted repository skipped.
Known limitation: the daemon's status paths still contact unreachable repositories (#206). See Skipping a run for the full behaviour.
Storage and TLS
-
REST and S3 use the OS trust store, so repositories behind a private CA now work when the OS already trusts that CA. (#202)
-
REST and S3 requests can no longer wait forever. A pooled connection to a silently vanished peer blocked indefinitely and hung the daemon. Both clients now set resolve, send-request and receive-response timeouts, with longer waits for admin actions (11 minutes) and repack (60 minutes). Repack is no longer retried, so a timeout surfaces instead of stalling the cycle. (#204)
-
S3 listings can no longer come back silently short. Listing completion now follows
IsTruncated, and a truncated page without a continuation token is an error. Only an object with a known size of zero counts as a soft-delete tombstone. -
SFTP: russh 0.65.1 brings client-side security fixes for unbounded
EXT_INFOallocation, a zero max-packet-size stall andkex_doneordering. The lockfile refresh also picks up advisory fixes in rustls, rustls-webpki, tokio, zstd and others.
Compact
- The client now deletes repacked source packs. The server used to delete them during repack, so a lost or timed-out response could leave the index pointing at deleted packs. Each batch's index updates are now persisted first, so the same failure leaves only unreferenced new packs. (#204)
Server
-
PUT is cancellation-safe. A client disconnecting mid-upload left
packs/<xx>/.tmp.*behind permanently, socompactwarned on every run and?verify-structurereported each file as two errors. Temp files are now removed on cancellation, error and panic. -
Old temp-file debris is swept. The quota walk removes temp files older than 24 hours, at startup, after each backup and hourly.
?verify-structurecounts them in a newtemp_filesfield instead of reporting them as malformed packs.
GUI
-
The passphrase prompt now appears inside the main window. As a separate window it could open underneath the main window on Linux. A prompt raised while the app is in the tray now opens the main window, and hiding to tray during a prompt cancels it. (#193)
-
The Linux GUI no longer needs GTK, AppIndicator or libxdo. The tray moved to Slint's built-in
SystemTrayIcon, with Slint updated to 1.18.1. The barevykar-guibinary now needs fontconfig, FreeType and xkbcommon at runtime. The tray needs a StatusNotifierItem host: KDE Plasma, Xfce and most other desktops include one, and GNOME needs the AppIndicator extension. Without a tray, close-to-tray now quits. -
Init is no longer offered for unavailable local repositories. A repository on an unplugged drive or unmounted share triggered the init dialog on startup and after every backup, and answering "Yes" could create it on the root disk under an empty mount point. A missing parent directory now shows "Not available", and a non-empty folder without a config shows an error.
-
Browse, restore and mount find the repository faster. The lookup now fetches snapshot metadata instead of decoding the full item stream and discarding it.
Other fixes
diffno longer downloads the index twice when the restore cache is missing or stale.findno longer swallows an interrupt on the cache path.deletenow names the snapshot when deleting its blob fails, asprunealready did.
Internal
- Hook lifecycle, delete/prune removal and restore-cache fallback each moved to one shared implementation.
- Clippy 1.99 lints are fixed, and agent configuration is consolidated on
AGENTS.md. - Windows signing was repaired: the job is pinned to
ubuntu-24.04, and the login automation matches SimplySign's current sign-in page.
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.21.1-x86_64-unknown-linux-gnu.tar.gz
|
| Linux x86_64 (musl) | vykar-v0.21.1-x86_64-unknown-linux-musl.tar.gz
|
| Linux aarch64 (gnu) | vykar-v0.21.1-aarch64-unknown-linux-gnu.tar.gz
|
| Linux aarch64 (musl) | vykar-v0.21.1-aarch64-unknown-linux-musl.tar.gz
|
| macOS aarch64 | vykar-v0.21.1-aarch64-apple-darwin.tar.gz
|
| Windows x86_64 | vykar-v0.21.1-x86_64-pc-windows-msvc.zip
|
| GUI (AppImage) | vykar-gui-v0.21.1-x86_64.AppImage
|
SHA256 digests are shown next to each asset on this release page.