LZ4 is a very fast lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.
LZ4 is available as a C Open Source project, hosted on Github, under a BSD license. A list of ports to other language (Java, C#, Python, etc.) is also maintained on this page.
The executable version proposed here is for Windows. It works on both 32 and 64 bits systems. It implements multi-threading, and can automatically detect how many cores are available on your system.
LZ4 Framing Format specification
The LZ4 Framing Format specification has progressed quite a bit, taking into consideration most issues raised by commenters. It has now reached version 1.5 (see edit below), which looks stable enough.
LZ4 Frame format : Specifications v1.5
As a consequence, save any last-minute important item raised by contributors, the currently published specification will be used in upcoming LZ4 releases.
[Edit] : and last-minute change there is. Following a suggestion by Takayuki Matsuoka, the header checksum is now slightly different, in an effort to become more friendly with read-only media, hopefully improving clarity in the process. Specification version is now raised to v1.3.
[Edit 2] : A first version of LZ4c, implementing the above specification, is available at Google Code.
[Edit 3] : Following recommendations from Mark Adler, version v1.4 re-introduce frame content checksum. It’s not correct to assume that block checksum makes frame content checksum redundant : block checksum only validates that each block has no error, while frame content checksum verify that all blocks are present and in correct order. Finally, frame content checksum also validates the encoding & decoding stages.
v1.4 also introduces the definition of “skippable frames”, which can be used to encapsulate any kind of user-defined data into a flow of appended LZ4 frames.
[Edit 4] : Changed naming convention in v1.4.1 to “frame”.
[Edit 5] : Removed Dict_ID from specification