Awesome
lz-string
LZ-based compression algorithm for JavaScript
[!IMPORTANT] The file layout has changed in version 2, this is now a joint
commonjs
/esmodule
project so modern build tools should be happy with it, but if importing a file directly (such as in a direct javascript project) it is important to use the correct one.
[!TIP] The "old style" minified AMD file is available as
dist/index.umd.js
via various CDNs or package managers.
Install via npm
$ npm install -g lz-string
$ lz-string input.txt > output.txt
Home page
Home page for this program with examples, documentation and a live demo: http://pieroxy.net/blog/pages/lz-string/index.html
Command line
If installed globally there is a command line tool available, and a test suite that can use it to show things are working properly. If other langauges build a command line tool that supports the same arguments then the test suite can be run against them too.
$ lz-string -h
Usage: cli [options] [input-file]
Use lz-string to compress or decompress a file
Arguments:
input-file file to process, if no file then read from stdin
Options:
-V, --version output the version number
-d, --decompress if unset then this will compress
-e, --encoder <type> character encoding to use (choices: "base64", "encodeduri", "raw", "uint8array", "utf16", default: "raw")
-v, --verify verify before returning (default: true)
-b, --binary <file> lz-string binary to use (default: "../dist/index.js")
-l, --legacy use legacy mode where uint8array decompression must be an even length
-o, --output <output-file> output file, otherwise write to stdout
-q, --quiet don't print any error messages
-h, --help display help for command
Other languages
This lib has numerous ports to other languages, for server side processing, mostly. Here they are:
[!CAUTION] These are all developed separately, so if you are using two versions to transfer data (such as a client and server version) it is important to check that they are compatible and have identical behaviours on the data!
[!NOTE] Version 1.3.8 of this package had a slight change in the encoding which might impact compatibility.
- Java: by Diogo Duailibe
- Java: by rufushuang, with base64 support and better performances
- C#: by Jawa-the-Hutt
- C#: by kreudom, another implementation in C#, more up to date
- PHP: by nullpunkt
- Python3: by eduardtomasek
- Another Python: by marcel-dancak
- Ruby by Altivi
- Go I helped a friend to write a Go implementation of the decompression algorithm
- Go Austin wrote the decompression part as well
- Go by daku10, another implementation supports multiple encoding formats and can be used as a CLI tool
- Elixir by Michael Shapiro
- C++/QT by AmiArt
- C++ by Andrey Krasnov, another implementation in C++11
- VB.NET by gsemac
- Salesforce Apex (Java like language): bilal did the port
- Kotlin: from Zen Liu
- Dart: from skipness
- Haxe: from markknol
- Rust: from adumbidiot