https://github.com/Zaczero/starlette-compress
Compression middleware for Starlette - supporting ZStd, Brotli, and GZip
https://github.com/Zaczero/starlette-compress
compression fastapi python starlette starlette-middleware
Last synced: about 1 year ago
JSON representation
Compression middleware for Starlette - supporting ZStd, Brotli, and GZip
- Host: GitHub
- URL: https://github.com/Zaczero/starlette-compress
- Owner: Zaczero
- License: 0bsd
- Created: 2024-05-07T00:13:26.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-06T10:07:07.000Z (over 1 year ago)
- Last Synced: 2025-03-21T02:51:15.251Z (about 1 year ago)
- Topics: compression, fastapi, python, starlette, starlette-middleware
- Language: Python
- Homepage: https://pypi.org/p/starlette-compress
- Size: 163 KB
- Stars: 16
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starlette - Starlette Compress - Fast middleware for compressing responses with Zstd, Brotli, and GZip. (Extensions / Compression)
README
# starlette-compress
[](https://pypi.org/project/starlette-compress)
[](https://liberapay.com/Zaczero/)
[](https://github.com/sponsors/Zaczero)
**starlette-compress** is a fast and simple middleware for compressing responses in [Starlette](https://www.starlette.io). It supports more compression algorithms than Starlette's built-in GZipMiddleware, and has more sensible defaults.
- Python 3.9+ support
- Compatible with `asyncio` and `trio` backends
- ZStd, Brotli, and GZip compression
- Sensible default configuration
- [Zero-Clause BSD](https://choosealicense.com/licenses/0bsd/) — public domain dedication
- [Semantic Versioning](https://semver.org) compliance
## Installation
```sh
pip install starlette-compress
```
## Basic Usage
### Starlette
```py
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette_compress import CompressMiddleware
middleware = [
Middleware(CompressMiddleware)
]
app = Starlette(routes=..., middleware=middleware)
```
### FastAPI
You can use starlette-compress with [FastAPI](https://fastapi.tiangolo.com) too:
```py
from fastapi import FastAPI
from starlette_compress import CompressMiddleware
app = FastAPI()
app.add_middleware(CompressMiddleware)
```
## Advanced Usage
### Changing Minimum Response Size
Control the minimum size of the response to compress. By default, responses must be at least 500 bytes to be compressed.
```py
# Starlette
middleware = [
Middleware(CompressMiddleware, minimum_size=1000)
]
# FastAPI
app.add_middleware(CompressMiddleware, minimum_size=1000)
```
### Tuning Compression Levels
Adjust the compression levels for each algorithm. Higher levels mean smaller files but slower compression. Default level is 4 for all algorithms.
```py
# Starlette
middleware = [
Middleware(CompressMiddleware, zstd_level=6, brotli_quality=6, gzip_level=6)
]
# FastAPI
app.add_middleware(CompressMiddleware, zstd_level=6, brotli_quality=6, gzip_level=6)
```
### Supporting Custom Content-Types
Manage the supported content-types. Unknown response types are not compressed. [Check here](https://github.com/Zaczero/starlette-compress/blob/main/starlette_compress/__init__.py) for the default configuration.
```py
from starlette_compress import add_compress_type, remove_compress_type
add_compress_type("application/my-custom-type")
remove_compress_type("application/json")
```