brotli

Python bindings for Google's Brotli compression algorithm — optimized for web content compression with better ratios than gzip for text. brotli features: brotli.compress()/brotli.decompress() for one-shot, quality parameter (0-11, default 11), mode parameter (GENERIC/TEXT/FONT), lgwin for window size control, brotli.Compressor for incremental streaming, brotli.Decompressor for streaming decompression, process()/finish() for streaming API, and C extension binding to the official brotli library. Brotli is supported in all modern browsers as Content-Encoding: br — better ratio than gzip for HTML/CSS/JS.

Evaluated Mar 06, 2026 (0d ago) v1.x
Homepage ↗ Repo ↗ Developer Tools python brotli compression web google http browser
⚙ Agent Friendliness
65
/ 100
Can an agent use this?
🔒 Security
91
/ 100
Is it safe for agents?
⚡ Reliability
84
/ 100
Does it work consistently?

Score Breakdown

⚙ Agent Friendliness

MCP Quality
--
Documentation
80
Error Messages
78
Auth Simplicity
99
Rate Limits
99

🔒 Security

TLS Enforcement
92
Auth Strength
92
Scope Granularity
90
Dep. Hygiene
90
Secret Handling
92

Compression library with no network calls. Decompression bomb risk: valid brotli data can expand to large output — always set size limits when decompressing untrusted input. brotli does not encrypt — compress then encrypt separately. C extension: validate source or use pip install from PyPI only.

⚡ Reliability

Uptime/SLA
82
Version Stability
85
Breaking Changes
88
Error Recovery
82
AF Security Reliability

Best When

Web content compression where browser compatibility is needed and best text compression ratio matters — brotli is the standard for serving HTML/CSS/JS with Content-Encoding: br.

Avoid When

General file compression (use zstd), binary data, real-time compression at high throughput (use lz4/quality=0), or environments without browser compatibility requirement.

Use Cases

  • Agent web asset compression — import brotli; html_content = b'<html>...</html>'; compressed = brotli.compress(html_content, quality=6, mode=brotli.MODE_TEXT); response.headers['Content-Encoding'] = 'br' — web compression; agent pre-compresses static assets for faster web serving; quality=6 balances speed vs ratio for dynamic content; quality=11 for maximum ratio on pre-compressed static files
  • Agent file compression — import brotli; with open('large.json', 'rb') as f: data = f.read(); compressed = brotli.compress(data, quality=11); with open('large.json.br', 'wb') as f: f.write(compressed) — high-ratio compression; agent compresses JSON/text files for storage; brotli achieves 15-25% better compression than gzip on text
  • Agent streaming compression — import brotli; compressor = brotli.Compressor(quality=6); chunks = []; for chunk in data_stream: chunks.append(compressor.process(chunk)); chunks.append(compressor.finish()); compressed = b''.join(chunks) — streaming API; agent compresses large data without buffering entire content in memory
  • Agent decompression — import brotli; compressed_data = fetch_brotli_content(); decompressed = brotli.decompress(compressed_data); text = decompressed.decode('utf-8') — decompress; agent handles brotli-encoded API responses or CDN content; brotli.decompress() is one-shot for complete compressed data
  • Agent browser-compatible compression — import brotli; for asset in static_assets: compressed = brotli.compress(asset.content, quality=11); store(asset.path + '.br', compressed) — pre-compression; agent generates .br pre-compressed files for nginx brotli_static serving; 30-40% smaller than equivalent gzip for HTML/CSS/JS

Not For

  • Non-web compression — brotli is optimized for web text content; for general-purpose use zstd (faster) or gzip (universal compatibility)
  • Real-time streaming at scale — quality=11 is slow (~50 KB/s); for real-time use quality 0-4 or switch to zstd/lz4
  • Non-text binary data — brotli's advantages are for text; for binary data (images, video) zstd provides better speed/ratio balance

Interface

REST API
No
GraphQL
No
gRPC
No
MCP Server
No
SDK
Yes
Webhooks
No

Authentication

Methods: none
OAuth: No Scopes: No

No auth — local compression library.

Pricing

Model: open_source
Free tier: Yes
Requires CC: No

brotli is MIT licensed. Free for all use.

Agent Metadata

Pagination
none
Idempotent
Full
Retry Guidance
Not documented

Known Gotchas

  • import brotli not import brotli.brotli — the pip package is brotli; pip install brotli; import brotli; brotli.compress(data); there is also a Brotlipy package (different pure-Python implementation); ensure pip install brotli installs the C extension version (faster); check: brotli.__version__ should be present
  • quality=11 is very slow for dynamic content — quality=11 (default) optimizes for best compression but is 10-40x slower than quality=6; agent code compressing dynamic HTTP responses should use quality=4-6 for speed; quality=11 only for pre-compressed static assets stored on disk; never use quality=11 per-request in web servers
  • mode parameter significantly affects text compression ratio — brotli.compress(text_bytes, mode=brotli.MODE_TEXT) enables text-specific compression features; mode=brotli.MODE_GENERIC for binary; mode=brotli.MODE_FONT for WOFF fonts; agent compressing HTML/CSS/JS must use MODE_TEXT for best ratio — otherwise gets generic binary compression
  • decompressor streaming requires state — brotli.Decompressor is stateful; process() must be called sequentially; once decompress() (one-shot) or all process() chunks are done, Decompressor is finished; cannot reuse; agent code: create new Decompressor per decompression session; brotli.decompress() is simpler for one-shot use
  • brotli.error on truncated input — partial brotli data raises brotli.error: BrotliDecompress failed; agent code downloading brotli content must ensure complete transfer before decompressing; validate content-length or use chunked streaming via Decompressor.process() which handles partial input correctly
  • Not all Python HTTP servers support brotli natively — Flask/Django/FastAPI don't add Content-Encoding: br automatically; agent code serving brotli must either use nginx/caddy for brotli encoding or explicitly compress in Python and set headers; brotli responses without Accept-Encoding: br from client cause decompression errors in browsers

Alternatives

Full Evaluation Report

Comprehensive deep-dive: security analysis, reliability audit, agent experience review, cost modeling, competitive positioning, and improvement roadmap for brotli.

AI-powered analysis · PDF + markdown · Delivered within 30 minutes

$99

Package Brief

Quick verdict, integration guide, cost projections, gotchas with workarounds, and alternatives comparison.

Delivered within 10 minutes

$3

Score Monitoring

Get alerted when this package's AF, security, or reliability scores change significantly. Stay ahead of regressions.

Continuous monitoring

$3/mo

Scores are editorial opinions as of 2026-03-06.

5229
Packages Evaluated
26151
Need Evaluation
173
Need Re-evaluation
Community Powered