Compression

Stario automatically compresses responses to save bandwidth. It prioritizes modern, high-ratio algorithms while maintaining universal fallback support.

Selection Logic

Priority order: zstd > brotli > gzip.

The server checks the client's Accept-Encoding header and selects the best supported algorithm.

Configuration

Compression is enabled by default. You can tune it via CompressionConfig:

from stario import Stario, CompressionConfig

app = Stario(
    tracer,
    compression=CompressionConfig(
        min_size=1024,     # Minimum bytes to compress
        zstd_level=3,      # 1-22 (3 default)
        brotli_level=4,    # 0-11 (4 default)
        gzip_level=6       # 1-9  (6 default)
    )
)

To disable: app = Stario(tracer, compression=None).

Supported Content Types

Stario compresses text-based formats: - text/html, text/plain, text/css - application/json, application/javascript - image/svg+xml

Binary formats (JPG, PNG, MP4) are skipped as they are already compressed.

Pre-Compression for Assets

When you use app.assets(), Stario pre-compresses files at startup. This means the CPU work is done once, and compressed bytes are served directly from the cache.

Why three algorithms?

  • zstd: Fastest and best ratio. Available in Python 3.14+ stdlib.
  • brotli: Excellent compression for text, supported by 97%+ of browsers.
  • gzip: Universal fallback for older clients and proxies.