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.
