Skip to content

Releases: borgbase/vger

v0.10.0

27 Feb 13:11

Choose a tag to compare

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-gui for editing vger.yaml directly 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 dumpscommand_dump stdout 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.md with 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.

v0.9.0

25 Feb 21:06

Choose a tag to compare

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.

v0.8.1

23 Feb 16:22

Choose a tag to compare

What's New

GUI

  • Package vger-gui as a native macOS .app bundle
  • 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-concurrency flag to vger backup for tuning parallel uploads
  • Rename rest_token config field to access_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-server PUT handler

Bug Fixes

  • Move --repo flag from parent snapshot command 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 label before url

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.

v0.8.0

22 Feb 13:56

Choose a tag to compare

What's new in v0.8.0

Features

  • vger daemon — new subcommand for scheduled headless backups without cron
  • Server-side initvger init over REST now uses a single server endpoint instead of 259 individual create_dir calls
  • Server single-repo modevger-server defaults to localhost and supports single-repo mode for simpler setups
  • --worker-threads / --max-blocking-threads — new flags to tune vger-server thread pools
  • Server-side pack verificationvger check can 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-core into vger-types, vger-crypto, and vger-storage crates
  • Extracted vger-protocol crate for shared check/compact logic
  • Renamed extract to restore across the codebase
  • Added type-safe SnapshotId newtype
  • Replaced vger-server TOML config with CLI flags + VGER_TOKEN env 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.

v0.7.1

19 Feb 21:48

Choose a tag to compare

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_owned for 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_range buffers and positional write_all_at on Unix halve syscalls per chunk
  • LZ4/ZSTD compression — LZ4 writes directly into spare capacity (no zero-fill); ZSTD uses compress_to_buffer to 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 LISTlist("") now uses the base URL directly instead of appending a trailing slash, with a new repo_list_all handler 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

v0.7.0

19 Feb 14:27

Choose a tag to compare

Security

  • Enforce HTTPS by default for remote backends — remote storage URLs now require HTTPS; opt in with allow_insecure_http if 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_system default changed to false — backups now cross filesystem boundaries by default, so bind mounts and subvolumes are no longer silently skipped. Set one_file_system: true to restore the old behavior.
  • Walk optimization — skip redundant symlink_metadata calls for files when one_file_system is enabled

Bug Fixes

  • Fix deadlock between pariter reorder buffer and ByteBudget
  • Make delete-repo safe 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 filetime and http-body-util with internal implementations
  • Replace rpassword and dirs with 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.

v0.6.3

17 Feb 23:00

Choose a tag to compare

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_dir config option: Control where mmap temp files and cache data are stored
  • Reuse ZSTD compression context: Thread-local Compressor reuse 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_only option 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.

v0.6.2

16 Feb 17:27

Choose a tag to compare

What's Changed

Features

  • Add break-lock command for removing stale advisory locks

Bug Fixes

  • Fix pipeline_buffer_mib to enforce actual memory cap and prevent thread oversubscription
  • Deduplicate pack existence checks in check and compact, 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.rs into 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

v0.6.1

15 Feb 23:26

Choose a tag to compare

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 passcommand execution, 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 unsafe blocks
  • Replace .unwrap() with .expect() or if-let in production code paths
  • Remove unused dependencies: indicatif, hostname, whoami, dialoguer

Refactoring

  • Split monolithic config.rs into 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.

v0.6.0

15 Feb 17:46

Choose a tag to compare

What's New

Features

  • Native local backend with path traversal protection — replaces the OpenDAL local adapter with a purpose-built std::fs backend
  • SFTP backend — new russh-based SFTP backend with connection pooling and reliability fixes
  • Restructured delete commandsvger delete now deletes an entire repository; snapshot deletion moved to vger 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::join for correct behavior

Documentation

  • New backup recipes page covering databases, containers, filesystem snapshots, and monitoring hooks
  • Fixed ZFS recipe: warn that snapdir=visible is 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.