Releases: borgbase/vger
Releases · borgbase/vger
v0.10.0
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-guifor editingvger.yamldirectly 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 dumps —
command_dumpstdout 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.mdwith 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
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
What's New
GUI
- Package vger-gui as a native macOS
.appbundle - 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-concurrencyflag tovger backupfor tuning parallel uploads - Rename
rest_tokenconfig field toaccess_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-serverPUT handler
Bug Fixes
- Move
--repoflag from parentsnapshotcommand 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
labelbeforeurl
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
What's new in v0.8.0
Features
vger daemon— new subcommand for scheduled headless backups without cron- Server-side init —
vger initover REST now uses a single server endpoint instead of 259 individualcreate_dircalls - Server single-repo mode —
vger-serverdefaults to localhost and supports single-repo mode for simpler setups --worker-threads/--max-blocking-threads— new flags to tunevger-serverthread pools- Server-side pack verification —
vger checkcan 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-coreintovger-types,vger-crypto, andvger-storagecrates - Extracted
vger-protocolcrate for shared check/compact logic - Renamed
extracttorestoreacross the codebase - Added type-safe
SnapshotIdnewtype - Replaced
vger-serverTOML config with CLI flags +VGER_TOKENenv 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
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_ownedfor 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_rangebuffers and positionalwrite_all_aton Unix halve syscalls per chunk - LZ4/ZSTD compression — LZ4 writes directly into spare capacity (no zero-fill); ZSTD uses
compress_to_bufferto 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 LIST —
list("")now uses the base URL directly instead of appending a trailing slash, with a newrepo_list_allhandler 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
Security
- Enforce HTTPS by default for remote backends — remote storage URLs now require HTTPS; opt in with
allow_insecure_httpif 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_systemdefault changed tofalse— backups now cross filesystem boundaries by default, so bind mounts and subvolumes are no longer silently skipped. Setone_file_system: trueto restore the old behavior.- Walk optimization — skip redundant
symlink_metadatacalls for files whenone_file_systemis enabled
Bug Fixes
- Fix deadlock between pariter reorder buffer and ByteBudget
- Make
delete-reposafe 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
filetimeandhttp-body-utilwith internal implementations - Replace
rpasswordanddirswith 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
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_dirconfig option: Control where mmap temp files and cache data are stored- Reuse ZSTD compression context: Thread-local
Compressorreuse 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_onlyoption 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
What's Changed
Features
- Add
break-lockcommand for removing stale advisory locks
Bug Fixes
- Fix
pipeline_buffer_mibto enforce actual memory cap and prevent thread oversubscription - Deduplicate pack existence checks in
checkandcompact, 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.rsinto 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
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
passcommandexecution, 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
unsafeblocks - Replace
.unwrap()with.expect()orif-letin production code paths - Remove unused dependencies:
indicatif,hostname,whoami,dialoguer
Refactoring
- Split monolithic
config.rsinto 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
What's New
Features
- Native local backend with path traversal protection — replaces the OpenDAL local adapter with a purpose-built
std::fsbackend - SFTP backend — new
russh-based SFTP backend with connection pooling and reliability fixes - Restructured delete commands —
vger deletenow deletes an entire repository; snapshot deletion moved tovger 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::joinfor correct behavior
Documentation
- New backup recipes page covering databases, containers, filesystem snapshots, and monitoring hooks
- Fixed ZFS recipe: warn that
snapdir=visibleis 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.