Squash provides a single API to access many compression libraries, allowing applications a great deal of flexibility in choosing compression algorithms, including the option to pass that choice along to the user.
Because Squash provides a single API, any algorithms which Squash has a plugin to support will be useable from any language for which Squash provides bindings.
The actual integration with individual compression libraries is done through plugins which can be installed separately from Squash itself and are not loaded until they are required. This allows Squash consumers to utilize a great many compression algorithms without rewriting code or unnecessary bloat.
In addition to a permissively licensed library, Squash provides some generic tools which use the library for common tasks. Currently, this includes a command-line interface similar to gzip, bzip2, xz, etc. called squash. There is also a separate project to generate the Squash Benchmark.
For a guide to building Squash, see Building Squash.
For the squash command line tool, see the squash(1) man page
Squash currently has plugins for the following libraries:
* Currently only available or enabled in git; it will be generally available in the next release.
** Currently disabled pending bug fixes in upstream library.
The number of codecs to choose from can be a bit overwhelming. They all have different performance characteristics, and Squash provides benchmarks to help you decide which codecs are appropriate for your library, or you can do your own testing—swapping codecs is typically just a matter of changing a string, so you can try them all with minimal effort.
Squash is written in C, so it should be possible to create bindings for virtually any programming language. Currently, Squash has bindings for the following languages:
If you're interested in helping to add support for more languages, please get in touch with us. This is an area where we could really use help; it is best if bindings are written by people familiar with the language (including idioms and best practices), so we really can't just go about adding bindings for languages we don't know.
If you would like to be notified of new releases via e-mail, you can subscribe to the squash-announce mailing list.
git clone https://github.com/quixdb/squash.git
To be notified of new releases via e-mail you can subscribe to the squash-announce mailing list. We will only send messages for new releases or other major events.
Squash is licensed under the MIT License, which is highly permissive and allows Squash to be integrated into any application virtually without restriction. That said, please keep in mind that some plugins use libraries which are subject to more restrictive terms (such as the GNU GPL), and using Squash as an intermediary does not release you from the obligations of those licenses if you choose to actually use plugins which use those libraries. Squash includes an API for programmatically determining the license of a plugin, and it is possible to use it to avoid any GPL'd plugins even if they are installed. Each plugin's page in the C documentation lists the license of the library, or libraries, it uses.
Several of the GPL libraries used by Squash plugins are also available for integration with proprietary software under commercial licenses.