Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
431 commits
Select commit Hold shift + click to select a range
be54850
docs: rename example title to Celery Alternative
benoitc Feb 1, 2026
772e4a2
chore(deps): bump actions/setup-python from 5 to 6
dependabot[bot] Feb 1, 2026
0d8c3ab
chore(deps): bump actions/upload-artifact from 4 to 6
dependabot[bot] Feb 1, 2026
26674b2
Merge pull request #3474 from benoitc/dependabot/github_actions/actio…
benoitc Feb 1, 2026
9235b72
Merge pull request #3475 from benoitc/dependabot/github_actions/actio…
benoitc Feb 1, 2026
791ab46
chore(deps): bump actions/checkout from 4 to 6
dependabot[bot] Feb 1, 2026
29b8a3a
Merge pull request #3476 from benoitc/dependabot/github_actions/actio…
benoitc Feb 1, 2026
ce352dc
fix(asgi): add chunked transfer encoding for streaming responses
benoitc Feb 2, 2026
c5b6e82
chore: bump version to 25.0.1
benoitc Feb 2, 2026
658924c
docs: update changelog for 25.0.1
benoitc Feb 2, 2026
0885005
fix(tests): correct assertions in ASGI compliance tests
benoitc Feb 2, 2026
e1519c0
docs: add ASGI compliance test suite to changelog
benoitc Feb 2, 2026
1f4f245
Merge pull request #3478 from benoitc/feature/asgi-compliance-testbed
benoitc Feb 2, 2026
3bf529f
docs: sync news.md with 2026-news.md
benoitc Feb 2, 2026
a7e14e1
docs: replace sponsors section with expanded support section
benoitc Feb 2, 2026
3373e4b
docs: add CNAME file for custom domain
benoitc Feb 2, 2026
b19c648
fix: lazy import dirty module for gevent compatibility
benoitc Feb 3, 2026
15cadf8
Merge pull request #3483 from benoitc/fix/gevent-concurrent-futures-i…
benoitc Feb 3, 2026
3bf718e
fix: graceful disconnect handling for ASGI worker
benoitc Feb 3, 2026
866e88c
Merge pull request #3485 from benoitc/fix/asgi-graceful-disconnect
benoitc Feb 3, 2026
e780508
fix: resolve ASGI concurrent request failures through nginx proxy
benoitc Feb 6, 2026
026167a
refactor: extract _normalize_sockaddr utility function
benoitc Feb 6, 2026
95b7ffe
chore: prepare release 25.0.2
benoitc Feb 6, 2026
2c0f959
fix: remove trailing blank line in instrument/__init__.py
benoitc Feb 6, 2026
68abb98
fix: passing maxsplit in re.split() as positional argument is deprecated
tyrossel Feb 6, 2026
9508df6
test: increase CI timeout for signal tests on PyPy
benoitc Feb 6, 2026
d301d53
fix: resolve RuntimeError when StopIteration raised in ASGI coroutine
benoitc Feb 7, 2026
70d571b
docs: update homepage title and remove version display
benoitc Feb 7, 2026
7293b21
docs: add prominent sponsorship options
benoitc Feb 6, 2026
874e8be
docs: shorten sponsor section on homepage
benoitc Feb 7, 2026
2ead70d
docs: add Sponsor to top-level navigation
benoitc Feb 7, 2026
1afb2b7
Merge pull request #3490 from tyrossel/master
benoitc Feb 7, 2026
a52c81f
Merge pull request #3492 from benoitc/feature/improve-sponsorship
benoitc Feb 7, 2026
787602f
docs: shorten README sponsor section
benoitc Feb 7, 2026
fc85068
chore: prepare release 25.0.3
benoitc Feb 7, 2026
fb698ef
docs: update forwarded_allow_ips to Markdown
Juneezee Feb 10, 2026
cc974da
Update config.py
Juneezee Feb 10, 2026
c095960
Use markdown-grid-tables for multiline table
Juneezee Feb 11, 2026
0e0dc66
feat(dirty): add TLV binary encoder/decoder
benoitc Feb 11, 2026
1665857
feat(dirty): implement binary protocol
benoitc Feb 11, 2026
6d2139b
feat(dirty): update worker for binary protocol
benoitc Feb 11, 2026
98b1b64
feat(dirty): update arbiter for binary protocol
benoitc Feb 11, 2026
477b747
feat(dirty): update client for binary protocol
benoitc Feb 11, 2026
00da702
docs(dirty): update examples and docs for binary protocol
benoitc Feb 11, 2026
c0cc8c0
test(dirty): add Docker setup for dirty example integration tests
benoitc Feb 11, 2026
68ce658
fix(dirty): convert dict int keys to strings in TLV encoder
benoitc Feb 11, 2026
6d691b3
chore: use different ports in example docker-compose files
benoitc Feb 11, 2026
f4e2197
fix(dirty): disable pylint too-many-return-statements in TLV
benoitc Feb 11, 2026
415aa77
fix: revert embedding_service port to 8000 for CI
benoitc Feb 11, 2026
1cd4db8
docs: fix Markdown formatting in /configure
Juneezee Feb 12, 2026
4b90e4b
Merge pull request #3500 from benoitc/feature/binary-dirty-protocol
benoitc Feb 12, 2026
236c937
Merge pull request #3502 from Juneezee/docs/issues-3498
benoitc Feb 12, 2026
709a6ad
feat(dirty): add stash - global shared state between workers (#3503)
benoitc Feb 12, 2026
7f6cf90
release: 25.1.0
benoitc Feb 12, 2026
ac00c86
docs: mark ASGI as stable, Dirty Arbiters as beta
benoitc Feb 12, 2026
2639215
feat(dirty): add TTIN/TTOU signal support for dynamic worker scaling
benoitc Feb 12, 2026
0077b05
docs: add TTIN/TTOU to changelog
benoitc Feb 12, 2026
3cba17b
Merge pull request #3504 from benoitc/feature/dirty-ttin-ttou
benoitc Feb 12, 2026
a57507c
feat(ctl): add gunicornc control interface
benoitc Feb 13, 2026
3963e85
fix(dirty): reduce log verbosity for worker spawn skip
benoitc Feb 13, 2026
9f7000f
feat(ctl): add 'show all' command for process overview
benoitc Feb 13, 2026
3e6d6b9
feat(ctl): query dirty arbiter for worker info in 'show all'
benoitc Feb 13, 2026
be27ed4
fix(ctl): properly encode/decode MSG_TYPE_STATUS for dirty worker query
benoitc Feb 13, 2026
7df2609
fix(ctl): use 'result' key from dirty protocol response
benoitc Feb 13, 2026
e05e40d
feat(ctl): add message-based dirty worker management
benoitc Feb 13, 2026
3e60d29
docs: add gunicornc control interface guide
benoitc Feb 13, 2026
54eb411
Enable hard_linebreaks
Juneezee Feb 13, 2026
7486baa
fix: remove unused imports
benoitc Feb 13, 2026
6d81c9e
fix: resolve pylint warnings
benoitc Feb 13, 2026
02ea985
fix(tests): improve server test reliability on FreeBSD
benoitc Feb 13, 2026
cd77bcc
fix(tests): increase wait time for all server tests
benoitc Feb 13, 2026
63df19b
fix(tests): use process groups for reliable signal handling in PyPy
benoitc Feb 13, 2026
730350e
Merge pull request #3505 from benoitc/feature/gunicornc-control-inter…
benoitc Feb 13, 2026
bf4ad8d
docs: update 25.1.0 release date to 2026-02-13
benoitc Feb 13, 2026
2d43101
docs: merge gunicornc into 25.1.0 release
benoitc Feb 13, 2026
b3b98b1
perf(asgi): optimize HTTP parser for improved performance
benoitc Feb 18, 2026
aa29987
chore(logging): enrich request handling log line with request method
lukqw Feb 18, 2026
3f0c1f9
fix(lint): remove unused io import
benoitc Feb 19, 2026
b5f127e
fix(gthread): prevent thread pool exhaustion from slow clients
benoitc Feb 19, 2026
d3f80e8
fix(ctl): prevent fork deadlock and file watcher triggers
benoitc Feb 19, 2026
41c6bf8
fix: prevent UnboundLocalError in sd_notify when socket creation fails
bysiber Feb 20, 2026
6ada1ce
fix: ensure pidfile fd is closed on rename failure
bysiber Feb 20, 2026
eb6b693
Merge pull request #3513 from benoitc/feature/asgi-performance-optimi…
benoitc Feb 20, 2026
cef6b33
Merge pull request #3519 from benoitc/fix/gthread-slow-client-resilience
benoitc Feb 20, 2026
32e46a5
Merge pull request #3522 from bysiber/fix-sd-notify-unbound-error
benoitc Feb 20, 2026
d606336
Merge pull request #3523 from bysiber/fix-pidfile-fd-leak
benoitc Feb 20, 2026
089ad45
fix(ctl): prevent fork deadlock in control socket server
benoitc Feb 26, 2026
474f3ff
fix(lint): resolve pylint warnings in ctl/server and gtornado
benoitc Feb 27, 2026
7499da9
docs: regenerate settings.md for control_socket default
benoitc Feb 27, 2026
7d101cb
chore(deps): bump actions/upload-artifact from 6 to 7
dependabot[bot] Mar 1, 2026
24e7ced
Merge pull request #3520 from benoitc/fix/control-socket-issues
benoitc Mar 6, 2026
667f76c
Merge pull request #3533 from benoitc/dependabot/github_actions/actio…
benoitc Mar 6, 2026
8caf79e
Merge pull request #3494 from Juneezee/docs/forwarded_allow_ips
benoitc Mar 9, 2026
2cc3850
Merge pull request #3514 from lukqw/enrich-error-logging
benoitc Mar 13, 2026
b833a9b
Add optional fast HTTP parser for ASGI workers
benoitc Mar 21, 2026
7f175fb
Add fast HTTP parser support for WSGI workers
benoitc Mar 21, 2026
d89564b
Add HTTP parser benchmark comparing Python vs Fast
benoitc Mar 21, 2026
fa96774
Optimize ASGI performance with fast parser integration
benoitc Mar 21, 2026
7818401
Optimize ASGI protocol for 16x performance improvement
benoitc Mar 21, 2026
ae76530
Add callback-based HTTP parser for ASGI protocol
benoitc Mar 21, 2026
23c7210
Bump gunicorn_h1c to 0.2.0 for callback parser
benoitc Mar 21, 2026
22bdca2
Integrate callback parsers into ASGI protocol
benoitc Mar 21, 2026
464cbbf
Add write flow control and HTTP/2 streaming
benoitc Mar 21, 2026
ea37eaa
Add streaming body support to HTTP2Stream
benoitc Mar 21, 2026
0ca0d0c
Fix body polling and HTTP/2 request streaming
benoitc Mar 21, 2026
87bfb7d
Add RFC 7230 validation for chunked transfer-encoding
benoitc Mar 21, 2026
e8150e2
Simplify ASGI parser to always use callback mode
benoitc Mar 22, 2026
8ad49b8
Update settings.md for simplified http_parser options
benoitc Mar 22, 2026
86c0baf
Fix lint issues in ASGI parser and protocol
benoitc Mar 22, 2026
f308e7a
Add parametrized tests for ASGI callback parsers
benoitc Mar 22, 2026
03cc85e
Integrate gunicorn_h1c 0.4.1 exception types and limit parameters
benoitc Mar 22, 2026
2bf2632
Update docs and changelog for gunicorn_h1c 0.4.1 integration
benoitc Mar 22, 2026
4ce6aa1
Fix limit handling and add default max limit tests
benoitc Mar 22, 2026
932331d
Regenerate settings.md
benoitc Mar 22, 2026
ba1aaa5
Fix non-ASCII URL handling in ASGI worker
benoitc Mar 22, 2026
4bff2f3
Add raw_path to mock requests in tests
benoitc Mar 22, 2026
ae776cf
Add ASGI performance documentation
benoitc Mar 22, 2026
f76a494
Remove eventlet from test dependencies
benoitc Mar 22, 2026
241c479
Fix WebSocket race condition in callback-based _read_exact()
benoitc Mar 23, 2026
af8897a
Add pytest and requests to embedding_service Dockerfile
benoitc Mar 23, 2026
f9ca296
Fix WebSocket and body receiver issues in ASGI protocol
benoitc Mar 23, 2026
f164d9d
Add /slow endpoint to benchmark app
benoitc Mar 23, 2026
3568af1
Skip SIGINT shutdown test on PyPy
benoitc Mar 23, 2026
3667a10
Merge pull request #3549 from benoitc/feature/optional-http-parser
benoitc Mar 23, 2026
0ad47db
Use user-writable default path for control socket (#3551)
benoitc Mar 23, 2026
f8fca7a
fix: add __iter__ and __next__ to FileWrapper for PEP 3333 compliance…
r266-tech Mar 24, 2026
f555180
Add FileWrapper iterator fix to changelog
benoitc Mar 24, 2026
385a921
Fix uwsgi incomplete header error with async workers (#3554)
benoitc Mar 24, 2026
cb708b4
Add uwsgi async fix to changelog
benoitc Mar 24, 2026
22443a8
Bump tornado to 6.5.5 in lock file
benoitc Mar 24, 2026
6f601a0
Bump version to 25.2.0
benoitc Mar 24, 2026
dcaf2e1
Add 25.2.0 to 2026 changelog
benoitc Mar 24, 2026
18f5d0e
Fix 25.2.0 changelog: correct ASGI parser optimization description
benoitc Mar 25, 2026
c32903f
Update Docker images to Python 3.14
benoitc Mar 25, 2026
5d9f865
Update sponsorship: remove Open Collective, add Enki Multimedia
benoitc Mar 25, 2026
a49a46f
Add sponsor reminder to issue templates
benoitc Mar 25, 2026
8fba44c
fix: prevent HTTP/2 ASGI request body duplication
benleembruggen Mar 26, 2026
ffcebce
Fix ASGI callback parser header validation
benoitc Mar 25, 2026
1f8e60c
Add finish() method to ASGI callback parser for EOF handling
benoitc Mar 26, 2026
389438f
Require gunicorn_h1c >= 0.6.0 for finish() method support
benoitc Mar 26, 2026
3b763dd
Merge pull request #3560 from benoitc/fix/asgi-callback-parser-eof-ha…
benoitc Mar 26, 2026
997eec4
Fix pylint superfluous-parens warning
benoitc Mar 26, 2026
cbd27e8
Merge pull request #3559 from benleembruggen/fix/http2-asgi-body-dupl…
benoitc Mar 26, 2026
d43acb8
Update to gunicorn_h1c >= 0.6.2 for asgi_headers support
benoitc Mar 26, 2026
7057fc9
Fix http_protocols documentation to use string syntax
benoitc Mar 26, 2026
bdb2ebd
Reject chunk extensions with bare CR bytes (RFC 9112)
benoitc Mar 26, 2026
b00f125
Integrate gunicorn_h1c 0.6.3 with InvalidChunkExtension support
benoitc Mar 26, 2026
da8bd48
Remove unused AsyncRequest class
benoitc Mar 26, 2026
d40a374
Fix pytest-asyncio configuration and treq_asgi hex escapes
benoitc Mar 26, 2026
8d08aaa
Fix --limit-request-line 0 to mean unlimited
benoitc Mar 26, 2026
2a15fdb
Fix pylint isinstance-second-argument-not-valid-type warning
benoitc Mar 26, 2026
9bce72c
Update changelog with missing 25.3.0 changes
benoitc Mar 26, 2026
3e2167c
Add InvalidChunkExtension mapping and fast parser support for ASGI te…
benoitc Mar 31, 2026
bcb13b1
Fix _handle_stream_ended to set _body_complete in async HTTP/2 handler
benleembruggen Apr 1, 2026
9243b2a
chore: remove integration test file and trim docstring
benleembruggen Apr 1, 2026
cd9fecf
chore(deps): bump docker/setup-qemu-action from 3 to 4
dependabot[bot] Apr 2, 2026
cba82e3
chore(deps): bump docker/build-push-action from 6 to 7
dependabot[bot] Apr 2, 2026
229da6b
chore(deps): bump docker/login-action from 3 to 4
dependabot[bot] Apr 2, 2026
22b8b92
chore(deps): bump docker/metadata-action from 5 to 6
dependabot[bot] Apr 2, 2026
7953c25
Fix ASGI disconnect handling for Django-style apps
benoitc Apr 2, 2026
7263de9
Merge pull request #3575 from benoitc/asgi-disconnect-regression-tests
benoitc Apr 2, 2026
4e9db71
Merge pull request #3568 from benleembruggen/fix/h2-stream-ended-body…
benoitc Apr 2, 2026
88c5e9a
Merge pull request #3569 from benoitc/dependabot/github_actions/docke…
benoitc Apr 2, 2026
387ed99
Merge pull request #3570 from benoitc/dependabot/github_actions/docke…
benoitc Apr 2, 2026
4d56a20
Merge pull request #3571 from benoitc/dependabot/github_actions/docke…
benoitc Apr 2, 2026
4dad439
chore(deps): bump docker/setup-buildx-action from 3 to 4
dependabot[bot] Apr 2, 2026
aefbd32
Merge pull request #3572 from benoitc/dependabot/github_actions/docke…
benoitc Apr 2, 2026
72138b3
Merge pull request #3573 from benoitc/dependabot/github_actions/docke…
benoitc Apr 2, 2026
1c82d4b
Add ASGI test suite enhancement with 134 new tests
benoitc Apr 3, 2026
26ae6e6
Add ASGI framework compatibility E2E test suite
benoitc Apr 3, 2026
136a124
Add unit tests reproducing ASGI framework compatibility failures
benoitc Apr 3, 2026
47bd20a
Fix HTTP 100 Continue adding Transfer-Encoding: chunked
benoitc Apr 3, 2026
3fc9a2f
Fix WebSocket close handshake to comply with RFC 6455
benoitc Apr 3, 2026
51d350a
Close transport after WebSocket close handshake completes
benoitc Apr 3, 2026
cf92b23
Fix duplicate Transfer-Encoding header for BlackSheep streaming
benoitc Apr 3, 2026
65ba40b
Update Docker setup to install gunicorn from local source
benoitc Apr 3, 2026
cbba5cb
Fix Quart WebSocket close test app - add missing accept()
benoitc Apr 3, 2026
9c2bedc
Fix Litestar HTTP endpoints for compatibility tests
benoitc Apr 3, 2026
746cc04
Skip HTTP 100 Continue test - invalid per RFC 7231
benoitc Apr 3, 2026
725c03e
Fix WebSocket binary send when text key is None
benoitc Apr 3, 2026
db9030b
Fix Quart headers endpoint - normalize keys to lowercase
benoitc Apr 3, 2026
06e59d2
Fix Litestar request handling - use raw ASGI receive for body/headers
benoitc Apr 4, 2026
97fcc6f
Update ASGI compatibility grid - 438/444 tests passing
benoitc Apr 4, 2026
d607372
Merge pull request #3578 from benoitc/asgi-framework-compat-tests
benoitc Apr 4, 2026
3936905
Fix RFC 9110 section reference: 8.6 not 15.2
benoitc Apr 4, 2026
8cf10ec
Merge pull request #3579 from benoitc/asgi-framework-compat-tests
benoitc Apr 4, 2026
9aa5470
Update ASGI compatibility grid to 438/444 (98%)
benoitc Apr 4, 2026
7ae6503
fix: validate headers in early_hints callback to match process_headers
eddieran Apr 13, 2026
38ea126
Pass only the header name to InvalidHeader exception
eddieran Apr 16, 2026
e5c30b4
Merge pull request #3588 from eddieran/fix/early-hints-header-validation
benoitc Apr 19, 2026
9d422c3
fix: drain connection on close per RFC 9112 section 9.6
benoitc Apr 19, 2026
f1c2046
test: codify RFC 9112 request-target and TE/CL vectors (phase 1)
benoitc Apr 19, 2026
5de5937
Merge pull request #3590 from benoitc/fix/graceful-connection-close
benoitc Apr 19, 2026
369b8d7
Merge pull request #3591 from benoitc/test/rfc9112-compliance-corpus-…
benoitc Apr 19, 2026
e896a65
test: codify absolute-form and IPv6 authority request-target vectors …
benoitc Apr 19, 2026
b90626c
Merge pull request #3592 from benoitc/test/rfc9112-compliance-corpus-…
benoitc Apr 19, 2026
2c57071
test: add failing fixture for asterisk-form with non-OPTIONS method
benoitc Apr 19, 2026
82d33d4
fix: reject asterisk-form request-target outside OPTIONS (RFC 9112 se…
benoitc Apr 19, 2026
e3ba1e0
Merge pull request #3594 from benoitc/fix/rfc9112-reject-asterisk-for…
benoitc Apr 19, 2026
e7fd6a1
test: add failing fixture for authority-form with non-CONNECT method
benoitc Apr 19, 2026
882e636
fix: reject authority-form request-target outside CONNECT (RFC 9112 s…
benoitc Apr 19, 2026
37771e8
Merge pull request #3595 from benoitc/fix/rfc9112-reject-authority-fo…
benoitc Apr 19, 2026
6225222
test: codify rejection of relative-reference request-target (RFC 9112…
benoitc Apr 19, 2026
ba8776d
Merge pull request #3596 from benoitc/test/rfc9112-relative-target-fi…
benoitc Apr 19, 2026
3b3752e
test: add failing fixtures for forbidden trailer fields
benoitc Apr 19, 2026
a9270e3
fix: reject forbidden trailer field-names (RFC 9110 section 6.5.1)
benoitc Apr 19, 2026
9f7f930
Merge pull request #3597 from benoitc/fix/rfc9110-forbidden-trailer-f…
benoitc Apr 19, 2026
826bfc7
test: add failing fixtures for control chars in header value
benoitc Apr 19, 2026
2073e13
fix: reject control characters in header field-value (RFC 9110 sectio…
benoitc Apr 19, 2026
dac3fa8
Merge pull request #3598 from benoitc/fix/rfc9110-reject-control-char…
benoitc Apr 19, 2026
2391901
test: codify chunked size/extension edge cases (RFC 9112 section 7.1)
benoitc Apr 19, 2026
5d0f1e9
Merge pull request #3599 from benoitc/test/rfc9112-chunked-edge-cases
benoitc Apr 19, 2026
e223e30
test: codify field-syntax cases (RFC 9110 section 5.5 and 5.6.2)
benoitc Apr 19, 2026
fad75c2
Merge pull request #3600 from benoitc/test/rfc9110-field-syntax-fixtures
benoitc Apr 19, 2026
8450ae0
test: codify body-framing cases (RFC 9110 section 8.6 and RFC 9112 se…
benoitc Apr 19, 2026
4da46ed
Merge pull request #3601 from benoitc/test/rfc9110-body-framing-fixtures
benoitc Apr 19, 2026
73e6436
test: codify rejection of Content-Length list form (RFC 9112 section …
benoitc Apr 19, 2026
a635b95
Merge pull request #3602 from benoitc/test/rfc9112-cl-list-form-fixture
benoitc Apr 19, 2026
408b1f0
chore: require gunicorn_h1c >=0.6.4 and drop python_only markers
benoitc Apr 19, 2026
377e8f8
test: skip fast parser on PyPy (gunicorn_h1c C extension is CPython-o…
benoitc Apr 19, 2026
3af35da
Merge pull request #3603 from benoitc/chore/drop-python-only-after-h1…
benoitc Apr 20, 2026
98eac0b
chore: require gunicorn_h1c >=0.6.5 and drop last python_only marker
benoitc Apr 20, 2026
4bcda32
Merge pull request #3604 from benoitc/chore/drop-last-python-only-aft…
benoitc Apr 20, 2026
80983a8
Looks like this `.md` crept in as part of the MkDocs migration
zc-mattcen Apr 30, 2026
e90b1c2
fix: address six WSGI/ASGI parser and protocol findings
benoitc May 3, 2026
6f9ed30
lint: use dict literal and hoist mock import
benoitc May 3, 2026
8e25cb2
fix: tighten keepalive gate and scope finish_body byte cap
benoitc May 3, 2026
d6443e5
test: poll for control socket re-creation after SIGHUP
benoitc May 3, 2026
1cbe7d1
Merge pull request #3614 from benoitc/fix/parser-protocol-findings
benoitc May 3, 2026
2191832
fix: drop body framing on HEAD/204/304 even when framework set it
benoitc May 3, 2026
0d35d2a
fix: warn once when ASGI app emits a body for a no-body response
benoitc May 3, 2026
02c53cf
Merge pull request #3616 from benoitc/fix/asgi-protocol-review-followups
benoitc May 3, 2026
fe3655b
refactor: split BodyReceiver._closed into transport vs body-wait
benoitc May 3, 2026
8d9d903
Merge pull request #3617 from benoitc/fix/asgi-bodyreceiver-closed-se…
benoitc May 3, 2026
0a736ea
fix: keep _body_receiver alive across the keepalive smuggling gate
benoitc May 3, 2026
4e4a60e
Merge pull request #3618 from benoitc/test/asgi-pipelined-smuggling-r…
benoitc May 3, 2026
35c6a2a
test: parametrize smuggling regression across python and fast parsers
benoitc May 3, 2026
9902bc7
Merge pull request #3619 from benoitc/test/asgi-pipelined-smuggling-f…
benoitc May 3, 2026
112d535
fix: enforce proxy_allow_ips and tighten PROXY parsing in ASGI
benoitc May 3, 2026
41ec752
fix: keep Content-Length on HEAD and 304 responses
benoitc May 3, 2026
31f2618
Merge pull request #3620 from benoitc/fix/asgi-proxy-protocol-trust-a…
benoitc May 3, 2026
68843c8
Merge pull request #3621 from benoitc/fix/asgi-preserve-content-lengt…
benoitc May 3, 2026
54d38af
test: unblock docker fixtures on macOS hosts
benoitc May 4, 2026
f4ac8e1
test: pass action name to dirty client and stabilize after TTOU spam
benoitc May 4, 2026
201df19
chore: remove eventlet worker; add h2 and uvloop to test deps
benoitc May 4, 2026
5a655af
Merge pull request #3622 from benoitc/test/docker-port-and-ipv4-fixes
benoitc May 4, 2026
99c8d48
Merge pull request #3623 from benoitc/chore/drop-eventlet-add-h2-uvlo…
benoitc May 4, 2026
b45c70d
Merge pull request #3611 from zc-mattcen/docs-typo
benoitc May 4, 2026
5d819cf
release: 26.0.0
benoitc May 5, 2026
9bc5891
fix: drop body framing on HEAD/1xx/204/304 in WSGI responses
benoitc May 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
130 changes: 130 additions & 0 deletions .github/DISCUSSION_TEMPLATE/issue-triage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
title: "[Triage] "
labels:
- triage
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report an issue or suggest a feature!

**Before submitting, please:**
- Search [existing discussions](https://github.com/benoitc/gunicorn/discussions) and [issues](https://github.com/benoitc/gunicorn/issues) for duplicates
- Check the [FAQ](https://gunicorn.org/faq/) and [documentation](https://gunicorn.org/)

- type: dropdown
id: type
attributes:
label: Type
description: What type of issue is this?
options:
- Bug Report
- Feature Request
- Performance Issue
- Documentation Issue
validations:
required: true

- type: textarea
id: description
attributes:
label: Description
description: A clear description of the issue or feature request
placeholder: |
For bugs: What happened? What did you expect?
For features: What problem does this solve?
validations:
required: true

- type: textarea
id: reproduce
attributes:
label: Steps to Reproduce (for bugs)
description: Minimal steps to reproduce the behavior
placeholder: |
1. Create a simple app with...
2. Run gunicorn with...
3. Send request...
4. See error...
validations:
required: false

- type: textarea
id: config
attributes:
label: Configuration
description: Your gunicorn configuration (command line or config file)
render: bash
placeholder: |
gunicorn --workers 4 --bind 0.0.0.0:8000 myapp:app
validations:
required: false

- type: textarea
id: logs
attributes:
label: Logs / Error Output
description: Relevant logs or error messages (use --log-level debug for more detail)
render: text
validations:
required: false

- type: input
id: gunicorn-version
attributes:
label: Gunicorn Version
description: Output of `gunicorn --version`
placeholder: gunicorn 24.1.0
validations:
required: true

- type: input
id: python-version
attributes:
label: Python Version
description: Output of `python --version`
placeholder: Python 3.12.0
validations:
required: true

- type: dropdown
id: worker-class
attributes:
label: Worker Class
description: Which worker type are you using?
options:
- sync (default)
- gthread
- gevent
- tornado
- asgi (beta)
- custom
- N/A (feature request)
validations:
required: true

- type: input
id: os
attributes:
label: Operating System
description: Your OS and version
placeholder: Ubuntu 22.04, macOS 14.0, etc.
validations:
required: true

- type: textarea
id: additional
attributes:
label: Additional Context
description: Any other context (proxy setup, Docker, proposed solution, etc.)
validations:
required: false

- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have searched existing discussions and issues for duplicates
required: true
- label: I have checked the documentation and FAQ
required: true
50 changes: 50 additions & 0 deletions .github/DISCUSSION_TEMPLATE/question.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
title: "[Question] "
body:
- type: markdown
attributes:
value: |
Have a question about Gunicorn?

Before asking, please check:
- [Documentation](https://gunicorn.org/)
- [FAQ](https://gunicorn.org/faq/)
- [Settings Reference](https://gunicorn.org/reference/settings/)
- [Existing discussions](https://github.com/benoitc/gunicorn/discussions)

- type: textarea
id: question
attributes:
label: Question
description: What would you like to know?
validations:
required: true

- type: textarea
id: context
attributes:
label: Context
description: Any relevant context (your setup, what you've tried, etc.)
placeholder: |
I'm running gunicorn with...
I've tried...
validations:
required: false

- type: textarea
id: config
attributes:
label: Configuration (if relevant)
description: Your gunicorn configuration
render: bash
validations:
required: false

- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have checked the documentation and FAQ
required: true
- label: I have searched existing discussions
required: true
2 changes: 2 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github: [benoitc]
custom: ["https://checkout.revolut.com/pay/ac271e5e-172a-408b-947b-2f9f79d3a88a"]
11 changes: 11 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: Bug Report / Feature Request
url: https://github.com/benoitc/gunicorn/discussions/new?category=issue-triage
about: Report a bug or request a feature (triaged before becoming an issue)
- name: Question
url: https://github.com/benoitc/gunicorn/discussions/new?category=q-a
about: Ask a question about configuration, deployment, or usage
- name: ❤️ Support Gunicorn
url: https://gunicorn.org/sponsor/
about: Gunicorn is volunteer-maintained. Consider sponsoring to support development.
18 changes: 18 additions & 0 deletions .github/ISSUE_TEMPLATE/preapproved.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
name: Pre-Discussed and Approved Topics
about: Only for topics already discussed and approved in GitHub Discussions
title: ''
labels: ''
assignees: ''
---

**Only for topics already discussed and approved in the GitHub Discussions section.**

DO NOT OPEN A NEW ISSUE. PLEASE USE THE DISCUSSIONS SECTION.

Link to approved discussion:

---

<!-- Gunicorn is volunteer-maintained. If it powers your production, consider sponsoring: https://gunicorn.org/sponsor/ -->

45 changes: 45 additions & 0 deletions .github/workflows/docker-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Docker Integration Tests

on:
push:
branches: [master]
paths:
- 'gunicorn/uwsgi/**'
- 'tests/docker/uwsgi/**'
- '.github/workflows/docker-integration.yml'
pull_request:
paths:
- 'gunicorn/uwsgi/**'
- 'tests/docker/uwsgi/**'
- '.github/workflows/docker-integration.yml'

permissions:
contents: read

env:
FORCE_COLOR: 1

jobs:
uwsgi-nginx:
name: uWSGI Protocol with nginx
runs-on: ubuntu-latest
timeout-minutes: 15

steps:
- uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
cache-dependency-path: requirements_test.txt

- name: Install test dependencies
run: |
python -m pip install --upgrade pip
python -m pip install pytest pytest-cov requests

- name: Run uWSGI integration tests
run: |
pytest tests/docker/uwsgi/ -v --tb=short
58 changes: 58 additions & 0 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Docker Publish
on:
push:
tags:
- 'v*'
- '[0-9]+.[0-9]+.[0-9]+'
workflow_dispatch:

permissions:
contents: read
packages: write

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-and-push:
name: Build and Push Docker Image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- name: Set up QEMU
uses: docker/setup-qemu-action@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

- name: Log in to Container Registry
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest,enable={{is_default_branch}}

- name: Build and push
uses: docker/build-push-action@v7
with:
context: .
file: docker/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
Loading