Sourced from gunicorn's releases.
25.0.1
Bug Fixes
- Fix ASGI streaming responses (SSE) hanging: add chunked transfer encoding for HTTP/1.1 responses without Content-Length header. Without chunked encoding, clients wait for connection close to determine end-of-response.
Changes
- Update celery_alternative example to use FastAPI with native ASGI worker and uvloop for async task execution
Testing
- Add ASGI compliance test suite with Docker-based integration tests covering HTTP, WebSocket, streaming, lifespan, framework integration (Starlette, FastAPI), HTTP/2, and concurrency scenarios
Gunicorn 25.0.0
New Features
Dirty Arbiters: Separate process pool for executing long-running, blocking operations (AI model loading, heavy computation) without blocking HTTP workers ([PR #3460](benoitc/gunicorn#3460))
- Inspired by Erlang's dirty schedulers
- Asyncio-based with Unix socket IPC
- Stateful workers that persist loaded resources
- New settings:
--dirty-app,--dirty-workers,--dirty-timeout,--dirty-threads,--dirty-graceful-timeout- Lifecycle hooks:
on_dirty_starting,dirty_post_fork,dirty_worker_init,dirty_worker_exitPer-App Worker Allocation for Dirty Arbiters: Control how many dirty workers load each app for memory optimization with heavy models ([PR #3473](benoitc/gunicorn#3473))
- Set
workersclass attribute on DirtyApp (e.g.,workers = 2)- Or use config format
module:class:N(e.g.,myapp:HeavyModel:2)- Requests automatically routed to workers with the target app
- New exception
DirtyNoWorkersAvailableErrorfor graceful error handling- Example: 8 workers × 10GB model = 80GB → with
workers=2: 20GB (75% savings)HTTP/2 Support (Beta): Native HTTP/2 (RFC 7540) support for improved performance with modern clients ([PR #3468](benoitc/gunicorn#3468))
- Multiplexed streams over a single connection
- Header compression (HPACK)
- Flow control and stream prioritization
- Works with gthread, gevent, and ASGI workers
- New settings:
--http-protocols,--http2-max-concurrent-streams,--http2-initial-window-size,--http2-max-frame-size,--http2-max-header-list-size- Requires SSL/TLS and h2 library:
pip install gunicorn[http2]
... (truncated)
3bf529f
docs: sync news.md with 2026-news.md1f4f245
Merge pull request #3478
from benoitc/feature/asgi-compliance-testbede1519c0
docs: add ASGI compliance test suite to changelog0885005
fix(tests): correct assertions in ASGI compliance tests658924c
docs: update changelog for 25.0.1c5b6e82
chore: bump version to 25.0.1ce352dc
fix(asgi): add chunked transfer encoding for streaming responses29b8a3a
Merge pull request #3476
from benoitc/dependabot/github_actions/actions/check...791ab46
chore(deps): bump actions/checkout from 4 to 69235b72
Merge pull request #3475
from benoitc/dependabot/github_actions/actions/uploa...