Applesauce is a command-line interface (CLI) program written in Rust that compresses, decompresses, and prints information about compressed files for HFS+/APFS transparent compression on macOS. It is based on afsctool and offers several key improvements, including better performance, improved multithreading (even for a single file), and reduced memory usage. Applesauce supports all three compression algorithms used by HFS+/APFS: LZFSE, LZVN, and ZLIB.
To install Applesauce using Homebrew, run the following command:
brew install Dr-Emann/homebrew-tap/applesauce
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Dr-Emann/applesauce/releases/latest/download/applesauce-cli-installer.sh | sh
To use Applesauce, run the following command:
applesauce [compress|decompress|info] file/directory
The options are as follows:
compress
: Compresses the specified file/directory using one of three compression algorithms (LZFSE, LZVN, or ZLIB).decompress
: Decompresses the specified file/directory.info
: Prints information about the specified compressed file/directory, including the compression ratio and
compression algorithm used.For example, to compress a file named example.txt
using the ZLIB compression algorithm, you would run:
applesauce compress -c ZLIB example.txt
Applesauce has the following key features:
Applesauce supports three compression algorithms:
-l 9
, but not always: it depends on the
type of data being compressed).Applesauce defaults to using LZFSE compression. Depending on the type of data being compressed and the desired balance between compression ratio and speed, one of these algorithms may be more suitable than the others.
Applesauce is based on afsctool, but offers several key improvements, including:
afcstool can compress multiple files in parallel, but applesauce parallelizes at the block level, so even a single file can be compressed in parallel. Applesauce can often be several times faster than afsctool, especially for small numbers of large files.
afcstool will load the entire file into memory before compressing it (although it does attempt to use mmap for large files). Applesauce will only keep the block(s) currently being compressed in memory.
Applesauce outputs a pretty progress bar while it's working, providing a more user-friendly experience than afsctool's sparse output.
afsctool will compress a file which fits in the xattr after compression, even if doing so actually adds more overhead than leaving the file uncompressed. Applesauce will not compress a file if it would result in a larger file.
afcstool overwrites files in place. Although it attempts to restore the file if an error occurs, if it is forcefully terminated while compressing a file, the file may be left in an invalid state.
Applesauce compresses/decompresses files to a temporary file and then atomically renames the temporary file to the original file only when the operation is complete: the file is never left in an invalid state, even if the program is harshly terminated.
This is no replacement for backups: please do not use applesauce on files you cannot afford to lose.
Applesauce is licensed under the GNU General Public License version 3 (GPLv3).
Contributions to Applesauce are welcome! If you would like to contribute code, please open a pull request on the GitHub repository. If you find a bug or have a feature request, please open an issue on the repository.