Releases: jLantxa/mapache
Release list
v0.5.2
v0.5.1
What's Changed
Fixed
- Fixed help text for init command.
Added
- Added Linux Android ARM64 target.
copycommand: Copy snapshots from one repository to another with support for--host,--tags, and--snapshotfilters.
Full Changelog: v0.5.0...v0.5.1
v0.5.0
What's changed
Added
--stdinforsnapshot: New--stdinflag to read backup data from stdin as a single virtual file at/stdin, with full deduplication and encryption.- Interruptible
clean: Theclean(andforget --clean) command can now be interrupted with SIGINT / SIGTERM. The shutdown signal is polled at safe checkpoints between GC phases. - JSON output for
find: Thefindcommand now supports--jsonoutput. - Error codes for
findandmount: Both commands now exit with meaningful error codes:10on repo open failure,20on command failure, and130on interrupt (mount only). - Sliding-window rate estimator: Replaced indicatif's lifetime-average
per_sec/etawith a configurable 10s sliding window for responsive ETA and throughput in progress bars (CLI and TUI). - Recursive filename search:
findnow searches recursively when the pattern does not contain a/(e.g.find file.txtmatches in any subdirectory). Use a leading/to restrict the search to the root (find /file.txt). dumpcommand: Newdumpcommand to print the contents of a single file from a snapshot to stdout. Supports snapshot ID prefixes andlatest.--no-lock: Added an option to open a repository without acquiring a lock.- Interactive diff screen (TUI): New
DiffScreenwith a navigable tree of changes (+/~/-), inline expand/collapse,uto toggle unchanged files,</>to browse adjacent snapshot pairs, live spinner while loading, and/to filter entries by path. - Interactive find screen (TUI): New
FindScreenwith real‑time glob search across all snapshots, progress bar with spinner, results table, inline detail panel, and direct navigation to file explorer and restore. - Redesigned TUI theme: The TUI now uses a refined colour palette and layout for improved readability.
Changed
- Restorer performance: Optimized the restorer with a flattened parallel pipeline, concurrent blob decoding, and JIT file initialization. This improves restoration performance while maintaining a low memory footprint.
- GC memory usage: Repack memory usage is now bounded by a configurable budget, preventing excessive memory consumption during garbage collection with large packs.
Fixes
- Exit code on interrupt:
snapshot,restore,sync,verify,forget,rechunk,amend, andrebuild-indexnow all exit with code130(the conventional128 + SIGINT) when the user cancels the operation. Previously several of these silently returned success (exit0) on interrupt, leaving scripts with no way to detect the cancellation.
Full Changelog: v0.4.2...v0.5.0
v0.4.2
What's changed
This release fixes a Man-in-the-Middle vulnerability in the SFTP backend by checking the remote SSH public key against the known hosts in the client.
Security
- Strict SSH Verification: Implemented strict host key verification for the SFTP backend. The system now verifies server keys against
known_hostsand prompts for confirmation on unknown hosts, preventing MITM attacks. Added support for defaultknown_hostslocations on Unix and Windows. - Memory Safety: Eliminated technical Undefined Behavior (UB) in
SecureStoragecompression by refactoring uninitialized buffer management. Maintained performance by avoiding zero-initialization while ensuring Rust's safety guarantees.
Fixes
- SFTP Backend: Improved error reporting in the SFTP backend to show the full cause chain, making it easier to diagnose authentication and connection failures. Fixed a bug where some authentication errors were partially swallowed.
- S3 Backend: Fixed a bug where paths in the S3 backend were incorrectly joined, potentially bypassing the prefix configuration.
Full Changelog: v0.4.1...v0.4.2
v0.4.1
What's changed
This is a bugfix release.
Fixes
- Fixed a regression introduced in v0.4.0 where parallel file writes within pack segments were lost, degrading restore speed. Per-file write batching with concurrent flush is now restored, and peak memory is further reduced by streaming pack segments and tightening the decoded data budget.
- Fixed progress bar never reaching 100% when restoring with
--strategy neweror--strategy skip. Skipped bytes are now correctly reported as processed.
Changes
- Overlap I/O and content-defined chunking with compression and encryption for improved snapshot throughput.
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's changed
Changes
- Experimental TUI: Introduced a modular Terminal User Interface for interactive repository management. Includes a dashboard, snapshot creation, restoration, and retention management.
Experimental: may be removed or replaced in a future release. - Bundle command: New
bundlecommand to create and restore standalone.mapachebundle files with full deduplication and encryption. - FUSE Bundle Mount: Mount
.mapachebundles as read-only filesystems via themountcommand. - TOML Config File: Added support for a
.tomlconfiguration file to centralize repository settings and runtime defaults. - Enhanced Retention Rules: Added
--host(multiple),--keep-hourly, and--keep-minflags to the forget command for more granular snapshot retention control. - Memory-Efficient Restore: Blobs are now written immediately after decoding, reducing peak memory from O(all blobs in segment) to O(1 blob). Cuts restore memory usage without sacrificing parallelism.
- Robust S3 Backend: Implemented multipart uploads for files >= 128 MiB and recursive listing to avoid hundreds of directory requests during garbage collection.
- Improved GC Efficiency: Stream snapshots instead of loading all into memory upfront and process repack chunks in parallel with pipelining.
- Memory-Efficient Verification: Refactored verification to use a streaming approach, capping memory usage for large packs.
- Enhanced Atomic Locks: Added better metadata and robust stale lock detection with detailed conflict reporting.
- Hardlink Restoration: Restorer now detects and recreates hardlinks from snapshots, preserving inode sharing and nlink counts on Unix.
- Access Time Preservation: Added
--with-atimeflag tosnapshotto optionally store and restore file access times. atime is not stored by default to avoid unnecessary metadata growth. On Linux,O_NOATIMEis used when reading files to prevent the backup process from modifying access times. - Key export: Added
key exportsubcommand to extract a key file from the repository and save it locally.
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's new
This release introduces a new, optimized restorer engine that significantly improves performance while minimizing I/O requests to the backend. The new restorer replaces the previous blob-sequential implementation, being more suitable for backends with high latency and/or metered requests like SFTP or S3.
Changes
- Multi-platform Build System: Overhauled the build system to support static, cross-platform releases for Linux (x64/ARM), Windows, and macOS.
- Self-contained binary: Link all dependencies statically for release
- Redesigned Restorer: Implemented a new high-performance, pack-centric restoration engine with background prefetching, range-based downloads, and concurrent restoration to significantly improve I/O efficiency.
- Improved Metadata Restoration: File and directory metadata are now restored in a separate bottom-up pass to ensure consistency.
- Environment Variables: Added support for
MAPACHE_REPOSITORY,MAPACHE_USERNAME, andMAPACHE_PASSWORDto simplify automation and scripting. - Enhanced CLI UI: Improved error and warning messages with clearer formatting and better cross-platform color support.
- Added
--exclude-fileand--include-fileto read include and exclude paths from file. - Return codes: Mapache can now return error codes. Experimental support added for the
init,snapshot,restore,verify,clean,sync,forgetandlscommands.
Fixes
- Make sure that locks are always released under normal termination.
- Update dependencies patching some vulnerabilities.
- Security fixes:
- Ensure files are never restored outside of the target directory.
- Zeroize sensitive data (passwords, keys, etc.) after use.
- Hardened FUSE permissions.
- Stability and Safety:
- Optimized memory usage during restoration by using a fixed-size buffer for file verification.
- Hardened garbage collection and retention logic by replacing risky panics with structured error handling.
- Fixed a bug in
restorewith--deletewhere some nodes were not correctly identified for deletion.
Full Changelog: v0.2.3...v0.3.0
v0.2.3
What's new
Fixes
- Minor optimizations and cosmetic fixes.
Changes
- Improved
mapache sync. - Allow snapshots with paths from multiple logical units (C:, D:, etc.).
- Extended metadata support.
- Unix extended attributes (xattr).
- Linux file attributes (
chattr/lsattr). - Windows file attributes (Hidden, System, etc.).
- Improved directory metadata restoration with a bottom-up pass.
Full Changelog: v0.2.2...v0.2.3
v0.2.2
What's new
Fixes
mapache restorecan now be interrupted again.
Changes
- Added a rate limiter for all backends. The upload and download rates can now be selected with the
--limit-uploadand--limit-downloadoptions. For backends that do not support streaming (local and S3), the upload and downloads will be done in bursts, with an targeting the limit as an average rate. SFTP implements native throttling by sending chunks of dynamic size, targeting the limit as an average rate.
Full Changelog: v0.2.1...v0.2.2
v0.2.1
What's new
Fixes
- The LockHandle will no longer try to refresh or delete a lock in a dry backend as there is no lock file to delete, sparing some operations and retries in the backend.
- Dry backends no longer try to create the backend.
- Updated aws-lc-sys dependencies solving some security vulnerabilities.
- Disable permission checking in mounted snapshot. This would prevent the user from accessing snapshot nodes if the UID and GID differ from the user's.
Changes
- When
mapache snapshotcannot open a directory or file, it will print a warning but still continue with the snapshot. - Replaced some sync utility functions with fully async versions.
- Improved scanning of node metadata, making the processing of small files a bit faster.
Full Changelog: v0.2.0...v0.2.1