Zlib Decompress Online — Deflate Base64 to Text

Decode RFC 1950 zlib (deflate) base64 payloads back to plain text in milliseconds. Same engine used by Python, Node, MySQL, and PNG — no upload, no library, no rate limits.

Zlib vs Deflate vs Gzip — pick the right decoder

All three formats use the DEFLATE algorithm but differ in the wrapper. Zlib (RFC 1950) starts with a 2-byte header (typically 0x78 0x9C) and ends with an Adler-32 checksum — the format used by PNG, Git, JAR, and most language standard libraries. Gzip (RFC 1952) starts with 0x1F 0x8B and ends with CRC-32. Raw deflate (RFC 1951) has no header. If your input is not zlib, switch to the matching tool.

This decoder uses the browser's built-in DecompressionStream('deflate') — interoperable with Python zlib.decompress, Node zlib.inflateSync, Java Inflater, and any RFC 1950 implementation.

How to decompress zlib — 4 steps

  1. Paste the base64. Drop the zlib-encoded base64 string into the Input panel. Click Load Sample for a working example.
  2. Click Decompress. The browser base64-decodes the input and pipes the bytes through the native zlib inflate engine.
  3. Inspect the result. The Output panel shows the original UTF-8 text. The badge reports compressed vs original size.
  4. Copy or post-process. Use the Copy button, or paste the result into a JSON / XML formatter for further inspection.

Sample input & output

Input — zlib base64

eJxLzs8tSEzOTM/TUcjJzEsHACk9BMo=

Output — recovered text

compressed text payload

Adler-32 Verified

The browser checks the trailing Adler-32 checksum. Truncated or corrupt streams fail loudly instead of returning partial data.

Streaming Decoder

Built on DecompressionStream — handles multi-megabyte payloads without freezing the page, using the browser native engine.

Local Only

Base64 decoding and zlib inflate both run inside the page. Compressed payloads with secrets, tokens, or PII never leave your device.

Common use cases

  • check_circleInspecting HTTP responses with Content-Encoding: deflate
  • check_circleDecoding payloads stored compressed inside JSON or BLOB columns
  • check_circleReading MySQL COMPRESS() / PostgreSQL bytea data dumped via psql
  • check_circleRecovering Git pack file objects after extracting a single object
  • check_circleDecoding PNG IDAT chunks during image format research
  • check_circleReading WebSocket per-message-deflate frames captured in DevTools
  • check_circleReconstructing test fixtures stored as base64 strings in source control
  • check_circleDebugging library output to confirm parity with the spec

Gzip vs Brotli vs Deflate decoders

FormatMagic BytesTrailerWhen You See It
zlib (deflate)78 9C / 78 DAAdler-32PNG, Git, JAR, MySQL, language stdlib
gzip1F 8BCRC-32 + ISIZE.gz files, HTTP Content-Encoding
deflate-rawnonenoneZIP entries, PNG IDAT inner stream
brotlino fixed bytesnoneHTTPS responses (Content-Encoding: br)

Need the inverse, or a different format?

Compress fresh data, switch to gzip, or run additional transforms.

Frequently Asked Questions

What does this zlib decompressor do?

It accepts a base64 string that represents a zlib (RFC 1950) byte stream — the format produced by Python zlib.compress, Node zlib.deflateSync, MySQL COMPRESS(), and PNG IDAT chunks — and decodes it back to UTF-8 text.

Why does it say deflate when I want zlib?

The browser Compression Streams spec uses the name "deflate" for what RFC 1950 calls "zlib": DEFLATE bytes wrapped with a 2-byte header and an Adler-32 checksum. The naming is unfortunate but matches HTTP's Content-Encoding: deflate header. For raw RFC 1951 DEFLATE without a wrapper, use a deflate-raw tool.

Why am I getting a decode error?

Common causes: the input is gzip (RFC 1952) — try the Gzip Decompress tool — or it is raw DEFLATE without the 2-byte header. Verify the first decoded byte is 0x78 (typical zlib magic) followed by 0x9C, 0xDA, or 0x01. Whitespace and line breaks in the base64 are stripped automatically.

How does it work without a server?

Modern browsers expose DecompressionStream (Chrome 80+, Firefox 113+, Safari 16.4+). The tool base64-decodes your input into a Uint8Array, pipes the bytes through new DecompressionStream("deflate"), and reads the output as UTF-8 text. No JavaScript zlib library is bundled.

Does the decoder validate the Adler-32 checksum?

Yes. The browser's DecompressionStream verifies the trailing Adler-32 checksum embedded in the zlib footer. A truncated or tampered stream throws an error rather than silently returning partial data.

How do I produce input compatible with this tool from the CLI?

In Python: import zlib, base64; print(base64.b64encode(zlib.compress(b"hello"))). In Node.js: zlib.deflateSync("hello").toString("base64"). The result will start with eJ — the base64 prefix of the typical zlib header bytes 0x78 0x9C.

Is the input uploaded?

No. Decoding runs in JavaScript inside your browser. Open DevTools Network tab and click Decompress — you will see no requests fire. Compressed payloads with sensitive data never leave your device.

Can it decompress a PNG IDAT chunk?

Yes — PNG IDAT chunks contain raw zlib (RFC 1950) data. Extract the IDAT bytes from the PNG file, base64-encode them, paste here, and the decoder will return the unfiltered pixel scanlines. You will then need to apply PNG line filters to reconstruct the bitmap.

Zlib Decompress Online — Free Deflate Base64 to Text Decoder