Skip to content

Releases: jLantxa/mapache

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 08 Jul 07:52

What's changed

Fixed

  • Fixed --exclude paths in mapache bundle.

Full Changelog: v0.5.1...v0.5.2

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 27 Jun 22:06
Immutable release. Only release title and notes can be modified.
v0.5.1
ad25953

What's Changed

Fixed

  • Fixed help text for init command.

Added

  • Added Linux Android ARM64 target.
  • copy command: Copy snapshots from one repository to another with support for --host, --tags, and --snapshot filters.

Full Changelog: v0.5.0...v0.5.1

v0.5.0

Choose a tag to compare

@jLantxa jLantxa released this 23 Jun 21:23
Immutable release. Only release title and notes can be modified.
v0.5.0
6e9b1bb

What's changed

Added

  • --stdin for snapshot: New --stdin flag to read backup data from stdin as a single virtual file at /stdin, with full deduplication and encryption.
  • Interruptible clean: The clean (and forget --clean) command can now be interrupted with SIGINT / SIGTERM. The shutdown signal is polled at safe checkpoints between GC phases.
  • JSON output for find: The find command now supports --json output.
  • Error codes for find and mount: Both commands now exit with meaningful error codes: 10 on repo open failure, 20 on command failure, and 130 on interrupt (mount only).
  • Sliding-window rate estimator: Replaced indicatif's lifetime-average per_sec/eta with a configurable 10s sliding window for responsive ETA and throughput in progress bars (CLI and TUI).
  • Recursive filename search: find now searches recursively when the pattern does not contain a / (e.g. find file.txt matches in any subdirectory). Use a leading / to restrict the search to the root (find /file.txt).
  • dump command: New dump command to print the contents of a single file from a snapshot to stdout. Supports snapshot ID prefixes and latest.
  • --no-lock: Added an option to open a repository without acquiring a lock.
  • Interactive diff screen (TUI): New DiffScreen with a navigable tree of changes (+/~/-), inline expand/collapse, u to toggle unchanged files, </> to browse adjacent snapshot pairs, live spinner while loading, and / to filter entries by path.
  • Interactive find screen (TUI): New FindScreen with 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, and rebuild-index now all exit with code 130 (the conventional 128 + SIGINT) when the user cancels the operation. Previously several of these silently returned success (exit 0) on interrupt, leaving scripts with no way to detect the cancellation.

Full Changelog: v0.4.2...v0.5.0

v0.4.2

Choose a tag to compare

@jLantxa jLantxa released this 31 May 21:59
Immutable release. Only release title and notes can be modified.
v0.4.2
4665256

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_hosts and prompts for confirmation on unknown hosts, preventing MITM attacks. Added support for default known_hosts locations on Unix and Windows.
  • Memory Safety: Eliminated technical Undefined Behavior (UB) in SecureStorage compression 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

Choose a tag to compare

@jLantxa jLantxa released this 31 May 00:08
Immutable release. Only release title and notes can be modified.
v0.4.1
33dd894

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 newer or --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

Choose a tag to compare

@jLantxa jLantxa released this 28 May 22:12
Immutable release. Only release title and notes can be modified.
v0.4.0
e6b2ad7

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 bundle command to create and restore standalone .mapache bundle files with full deduplication and encryption.
  • FUSE Bundle Mount: Mount .mapache bundles as read-only filesystems via the mount command.
  • TOML Config File: Added support for a .toml configuration file to centralize repository settings and runtime defaults.
  • Enhanced Retention Rules: Added --host (multiple), --keep-hourly, and --keep-min flags 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-atime flag to snapshot to optionally store and restore file access times. atime is not stored by default to avoid unnecessary metadata growth. On Linux, O_NOATIME is used when reading files to prevent the backup process from modifying access times.
  • Key export: Added key export subcommand to extract a key file from the repository and save it locally.

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@jLantxa jLantxa released this 06 May 09:12
Immutable release. Only release title and notes can be modified.
v0.3.0
1a3f79f

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, and MAPACHE_PASSWORD to simplify automation and scripting.
  • Enhanced CLI UI: Improved error and warning messages with clearer formatting and better cross-platform color support.
  • Added --exclude-file and --include-file to 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, forget and ls commands.

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 restore with --delete where some nodes were not correctly identified for deletion.

Full Changelog: v0.2.3...v0.3.0

v0.2.3

Choose a tag to compare

@jLantxa jLantxa released this 01 Apr 17:37
Immutable release. Only release title and notes can be modified.
v0.2.3
0f43404

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

Choose a tag to compare

@jLantxa jLantxa released this 22 Mar 00:17
Immutable release. Only release title and notes can be modified.
v0.2.2
655937b

What's new

Fixes

  • mapache restore can now be interrupted again.

Changes

  • Added a rate limiter for all backends. The upload and download rates can now be selected with the --limit-upload and --limit-download options. 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

Choose a tag to compare

@jLantxa jLantxa released this 08 Mar 17:25
Immutable release. Only release title and notes can be modified.
v0.2.1
19b1792

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 snapshot cannot 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