A Massively Spiffy Yet Delicately Unobtrusive Compression Library

(Also Free, Not to Mention Unencumbered by Patents)

(Not Related to the Linux zlibc Compressing File-I/O Library)

Welcome to the zlib home page, web pages originally created by Greg Roelofs and maintained by Mark Adler. If this page seems suspiciously similar to the PNG Home Page, rest assured that the similarity is completely coincidental. No, really.

zlib was written by Jean-loup Gailly (compression) and Mark Adler (decompression).

Current release: zlib 1.2.11 January 15, 2017

Version 1.2.11 has these key improvements over 1.2.10:

Fix deflate stored bug when pulling last block from window

Permit immediate deflateParams changes before any deflate input

Version 1.2.10 has these key improvements over 1.2.9:

Fix bug in deflate_stored() for zero-length input

Fix bug in gzwrite.c that produced corrupt gzip files

Version 1.2.9 has these key improvements over 1.2.8:

Improve compress() and uncompress() to support large lengths

and to support large lengths Allow building zlib outside of the source directory

Fix bug when level 0 used with Z_HUFFMAN or Z_RLE

Fix bugs in creating a very large gzip header

Add uncompress2() function, which returns the input size used

function, which returns the input size used Dramatically speed up deflation for level 0 (storing)

Add gzfread() and gzfwrite() , duplicating the interfaces of fread() and fwrite ()

and , duplicating the interfaces of and () Add crc32_z() and adler32_z() functions with size_t lengths

and functions with lengths Many portability improvements

zlib is designed to be a free, general-purpose, legally unencumbered -- that is, not covered by any patents -- lossless data-compression library for use on virtually any computer hardware and operating system. The zlib data format is itself portable across platforms. Unlike the LZW compression method used in Unix compress(1) and in the GIF image format, the compression method currently used in zlib essentially never expands the data. (LZW can double or triple the file size in extreme cases.) zlib's memory footprint is also independent of the input data and can be reduced, if necessary, at some cost in compression. A more precise, technical discussion of both points is available on another page.

zlib was written by Jean-loup Gailly (compression) and Mark Adler (decompression). Jean-loup is also the primary author of gzip(1), the author of the comp.compression FAQ list and the former maintainer of Info-ZIP's Zip; Mark is also the author of gzip's and UnZip's main decompression routines and was the original author of Zip. Not surprisingly, the compression algorithm used in zlib is essentially the same as that in gzip and Zip, namely, the `deflate' method that originated in PKWARE's PKZIP 2.x.

Mark and Jean-loup can be reached by e-mail at . Please read the FAQ and the manual before asking us for help. We are getting too many questions which already have an answer in the zlib documentation.

The deflate and zlib specifications both achieved official Internet RFC status in May 1996, and zlib itself was adopted in version 1.1 of the Java Development Kit (JDK), both as a raw class and as a component of the JAR archive format.

The lovely zlib-vise image above was provided courtesy of Bruce Gardner, art director of Dr. Dobb's Journal. It appears in Mark Nelson's article in the January 1997 issue (see below).

The current release is publicly available here:

Note that zlib is an integral part of libpng and has been tested extensively as part of many PNG-supporting applications.

zlib Information

CRC (Cyclic Redundancy Check) Bonus Information

Ross Williams' classic "A Painless Guide to CRC Error Detection Algorithms" Code to generate any CRC, with a list of CRC descriptions. crcany.c can take a description of a CRC and compute that CRC efficiently. It includes bit-wise, table-driven byte-wise, and table-driven word-wise CRC algorithms. Code to modify a message so that it generates the desired CRC. spoof.c takes an abbreviated description of the CRC, the exclusive-or of the current CRC of the message and the desired CRC, the length of the message, and a list of bit locations in a message, and tells you which of those bits should be inverted in the message to get the desired CRC. Note that it does not need the message itself, due to the linearity property of CRCs.

ZIP File Processing Bonus Software

Code to read a zip file as a stream and extract its contents. sunzip.c will read a zip file from stdin and extract the files therein that use compression methods 0, 8, 9, or 12 (stored, deflate, deflate64, or bzip2). It accepts Zip64 input. Code to merge multiple zip files into a single zip file. zipknit.c accepts Zip64 input files, and will create Zip64 output if the combined size of the merged zip file warrants it. All compression formats are permitted, since no decompression or recompression is performed. Encrypted entries are permitted, and pass through unscathed.

Related External Links

This page last updated December 15th, 2017.