Brotli is a data format specification for data streams compressed with a specific combination of the general-purpose LZ77 lossless compression algorithm, Huffman coding and 2nd order context modelling. Brotli is a compression algorithm developed by Google and serves best for text compression. Google employees Jyrki Alakuijala and Zoltán Szabadka initially developed Brotli to decrease the size of transmissions of WOFF2 web fonts, and in that context Brotli was a continuation of the development of zopfli, which is a zlib-compatible implementation of the standard gzip and deflate specifications. Brotli allows a denser packing than gzip and deflate because of several algorithmic and format level improvements: the use of context models for literals and copy distances, describing copy distances through past distances, use of move-to-front queue in entropy code selection, joint-entropy coding of literal and copy lengths, the use of graph algorithms in block splitting, and a larger backward reference window are example improvements. The Brotli specification was generalized in September 2015 for HTTP stream compression. This generalized iteration also improved the compression ratio by using a pre-defined dictionary of frequently used words and phrases.
History
Alakuijala and Szabadka completed the Brotli specification during 20132016. The specification was accompanied with a reference implementation developed by two additional authors, Evgenii Kliuchnikov and Lode Vandevenne, who had previously developed Google's zopfli implementation of deflate and gzip compatible compression in 2013. Unlike zopfli, which was a reimplementation of an existing data format specification, Brotli was a new data format, and allowed the authors to improve compression ratios even further. The Internet Engineering Task Force approved the Brotli compressed data format specification as an informational request for comment in July 2016. The Brotli data format is an integral part of the 2nd iteration of the Web Open Font Format. While Google's zopfli implementation of the deflate compression algorithm is named after zöpfli, the Swiss German word for a snack-sized braided buttery bread, brotli is named after brötli, the Swiss German word for a bread roll. Google's own implementation of the Brotli specification was released under the terms of the permissive free softwareMIT license in 2016. A formal validation of the Brotli specification was independently implemented by Mark Adler, one of the co-authors of the zlib/gzip compression format and library. Adler's implementation was released under the terms of the similarly permissive Apache license. Other implementations of the specification also exist, including one in the source-to-source haxe language. Brotli is available as a port for Android in a terminal-interface with its own shared library.
About
Brotli was first released in 2013 for off-line compression of web fonts. The version of Brotli released in September 2015 by the Googlesoftware engineers contained enhancements in generic lossless data compression, with particular emphasis on use for HTTP compression. The encoder was partly rewritten, with the result that the compression ratio improved, both the encoder and the decoder have been sped up, the streaming API was improved, and more compression quality levels have been added. Additionally, the new release shows performance improvements across platforms, with decoding memory reduction. Unlike most general purpose compression algorithms, Brotli uses a pre-defined dictionary, roughly 120 KiB in size, in addition to the dynamically populated dictionary. The pre-defined dictionary contains over 13000 common words, phrases and other substrings derived from a large corpus of text and HTML documents. Using a pre-defined dictionary has been shown to increase compression where a file mostly contains commonly used words. Brotli's sliding window is limited to 16 MiB. This enables decoding on mobile phones with limited resources, but makes Brotli underperform on compression benchmarks having larger files. The constraints of the small window size can be alleviated by using Large Window Brotli, which is not compatible with RFC7932. Streams compressed with Brotli have the content encoding type "br".
Industry support
Browsers and other clients
Mozilla Firefox introduced support for the 'br' content-encoding method in version 44.
Google Chrome has supported the 'br' content-encoding method since version 50.
Opera has supported the 'br' content-encoding method since version 38.
Microsoft Edge has supported the 'br' content-encoding method since version 15.
Safari has supported the 'br' content-encoding method since version 11.
cURL has a compile-time option to support the 'br' content-encoding method using libbrotli as of version 7.57, released on 29 November 2017.
Web servers
For Apache HTTP Server, the 'br' content-encoding method has been supported by the ' module since version 2.4.26.
Microsoft IIS has a ' community extension since March 2016 that adds support for the 'br' content-encoding method.