elfshaker is a low-footprint, high-performance version control system fine-tuned for binaries.
- 
elfshaker is a CLI tool written in the Rust programming language. 
- 
It stores snapshots of directories into highly-compressed pack files and provides fast on-demand access to the stored files. It is particularly good for storing lots of similar files, for example object files from an incremental build. 
- 
It allows few-second access to any commit of clang with the manyclangs project. For example, this accelerates bisection of LLVM by a factor of 60x! This is done by extracting builds of LLVM on-demand from locally stored elfshaker packs, each of which contains ~1,800 builds and is about 100 MiB in size, even though the full originals would take TiBs to store! Extracting a single builds takes 2-4s on modern hardware. 
Getting started
See our Installation guide for instructions.
System Compatibility
The following platforms are used for our CI tests:
But we aim to support all popular Linux platforms, macOS and Windows in production.
We officially support the following architectures:
Current Status
The file format and directory structure is stable. We intend that pack files created with the current elfshaker version will remain compatible with future versions. Please kick the tyres and do your own validation, and file bugs if you find any. We have done a fair amount of validation for our use cases but there may be things we haven't needed yet, so please start a discussion and file issues/patches.
Documentation
See our Usage guide for instructions.
Contributing
Contributions are highly-appreciated. Refer to our Contributing guide.
Contact
The best way to reach us to join the elfshaker/community on Gitter. The original authors of elfshaker are Peter Waller (@peterwaller-arm) <peter.waller@arm.com> and Veselin Karaganev (@veselink1) <veselin.karaganev@arm.com> and you may also contact us via email.
Security
Refer to our Security policy.
License
elfshaker is licensed under the Apache License 2.0.
