NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #45 most downloaded on PyPI
The little ASGI library that shines.
Last release 11 days ago
23 Sep 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
8 years old
203 releases · first in 2018
Warning OpenTelemetryMiddleware is experimental. Its API and emitted telemetry may change in minor releases without a deprecation period.
This release adds experimental OpenTelemetry tracing, HTTP QUERY support, and response trailers in TestClient. Starlette now requires AnyIO 4.
Warning
OpenTelemetryMiddleware is experimental. Its API and emitted telemetry may change in minor releases without a deprecation period.
OpenTelemetryMiddleware for HTTP server spans, with URL exclusions and custom tracer providers #3438, #3463, and #3520.scope["route"] #3438.QUERY HTTP method in HTTPEndpoint, CORS, and OpenAPI 3.2 schema generation #3489.TestClient and expose them through response.extensions["http.response.trailers"] #3563.SessionMiddleware #3510.partitioned to Response.delete_cookie() on Python 3.14 and later #3376.TrustedHostMiddleware and TestClient #3471.anyio>=4.0.0,<5, dropping support for AnyIO 3 #3512.WebSocketDisconnected, a RuntimeError subclass, for disconnected WebSocket operations #2767.Collection[str] in CORSMiddleware configuration annotations, including sets and frozensets #3518.BaseHTTPMiddleware #3476.400 for invalid multipart parser input #3492.Vary: Origin on all normal CORS responses and vary preflight responses by all request headers that affect them #3516 and #3517.Host headers and IPv6 authorities consistently across URL construction, host routing, and redirect middleware #3472.Range headers when FileResponse has a status other than 200, preserving its status and full body #3568.If-None-Match: * in StaticFiles #3201.StaticFiles without raising an assertion error #3532.popitem() and |= #3436.WebSocketEndpoint.decode() #3372.identity on SimpleUser and UnauthenticatedUser #3271.HTTPException to use non-standard status codes without an explicit detail #3545.TestClient and add explicit imports in WSGIMiddleware for AnyIO 4.15 compatibility #3498 and #3501.ServerErrorMiddleware #2858.Full changelog: 1.6.0...1.7.0
One column per quarter.
Add max_body_size to Starlette and route classes by @Kludex in https://github.com/Kludex/starlette/pull/3431
max_body_size to Starlette and route classes by @Kludex in https://github.com/Kludex/starlette/pull/3431http.response.debug info via response extensions by @y2kbugger in https://github.com/Kludex/starlette/pull/3130Full Changelog: https://github.com/Kludex/starlette/compare/1.5.1...1.6.0
max_body_size to Starlette and route classes by @Kludex in #3431http.response.debug info via response extensions by @y2kbugger in #3130Full Changelog: 1.5.1...1.6.0
Add max_body_size to Starlette and route classes #3431 .
Expose http.response.debug information via response extensions #3130 .
Reject inverted single-byte Range like bytes=5-4 by @nikolauspschuetz in #3389
bytes=5-4 by @nikolauspschuetz in #3389FileResponse to 100 ranges by @Kludex in #3430Full Changelog: 1.5.0...1.5.1
bytes=5-4 by @nikolauspschuetz in https://github.com/encode/starlette/pull/3389FileResponse to 100 ranges by @Kludex in https://github.com/encode/starlette/pull/3430Full Changelog: https://github.com/encode/starlette/compare/1.5.0...1.5.1
Reject inverted single-byte ranges in FileResponse #3389 .
Limit FileResponse to 100 ranges #3430 .
This release is all about giving GZipMiddleware some love. 🗜️
This release is all about giving GZipMiddleware some love. 🗜️
exclude_content_types parameter to GZipMiddleware by @Kludex in #3418GZipMiddleware by @Kludex in #3420GZipMiddleware by @Kludex in #3421Full Changelog: 1.4.1...1.5.0
This release is all about giving GZipMiddleware some love. 🗜️
exclude_content_types parameter to GZipMiddleware by @Kludex in https://github.com/encode/starlette/pull/3418GZipMiddleware by @Kludex in https://github.com/encode/starlette/pull/3420GZipMiddleware by @Kludex in https://github.com/encode/starlette/pull/3421Full Changelog: https://github.com/encode/starlette/compare/1.4.1...1.5.0
Flush GZip output for each streamed chunk #3419 .
Skip compression of partial responses in GZipMiddleware #3420 .
Default thread_minimum_size in GZipResponder by @Kludex in #3415
Full Changelog: 1.4.0...1.4.1
thread_minimum_size in GZipResponder by @Kludex in https://github.com/Kludex/starlette/pull/3415Full Changelog: https://github.com/Kludex/starlette/compare/1.4.0...1.4.1
Lazily allocate GZipMiddleware compression resources by @Kludex in #3407
zlib.compressobj instead of GzipFile in GZipMiddleware by @Kludex in #3411Full Changelog: 1.3.1...1.4.0
zlib.compressobj instead of GzipFile in GZipMiddleware by @Kludex in https://github.com/Kludex/starlette/pull/3411Full Changelog: https://github.com/Kludex/starlette/compare/1.3.1...1.4.0
Use zlib.compressobj instead of GzipFile in GZipMiddleware , reducing memory usage during compression #3411 .
Lazily allocate GZipMiddleware compression resources, avoiding compressor allocation for responses that are never compressed #3407 .
Use StarletteDeprecationWarning instead of DeprecationWarning by @Kludex in #3119
StarletteDeprecationWarning instead of DeprecationWarning by @Kludex in https://github.com/Kludex/starlette/pull/3119max_fields and max_part_size in FormParser by @Kludex in https://github.com/Kludex/starlette/pull/3329FormParser limits in parser callbacks by @Kludex in https://github.com/Kludex/starlette/pull/3331Full Changelog: https://github.com/Kludex/starlette/compare/1.3.0...1.3.1
Enforce max_fields and max_part_size in FormParser #3329 .
Enforce FormParser limits in parser callbacks #3331 .
Clamp oversized suffix ranges in FileResponse by @jiyujie2006 in #3307
FileResponse by @jiyujie2006 in #3307OSError alongside MultiPartException when closing temp files by @N3XT3R1337 in #3191httpx2 to the full extra by @Kludex in #3323removeprefix to strip weak ETag indicator in is_not_modified by @gnosyslambda in #3193request.url from structured components by @Kludex in #3326Full Changelog: 1.2.1...1.3.0
FileResponse by @jiyujie2006 in https://github.com/Kludex/starlette/pull/3307OSError alongside MultiPartException when closing temp files by @N3XT3R1337 in https://github.com/Kludex/starlette/pull/3191httpx2 to the full extra by @Kludex in https://github.com/Kludex/starlette/pull/3323removeprefix to strip weak ETag indicator in is_not_modified by @gnosyslambda in https://github.com/Kludex/starlette/pull/3193request.url from structured components by @Kludex in https://github.com/Kludex/starlette/pull/3326Full Changelog: https://github.com/Kludex/starlette/compare/1.2.1...1.3.0
Add httpx2 to the full extra #3323 .
Annotate the URLPath protocol parameter with Literal #3285 .
Build request.url from structured components #3326 .
Clamp oversized suffix ranges in FileResponse #3307 .
Catch OSError alongside MultiPartException when closing temp files #3191 .
Avoid collapsing exception groups raised from user code #2830 .
Use removeprefix to strip the weak ETag indicator in is_not_modified #3193 .
Fix IndexError in URL.replace() on a URL with no authority #3317 .
Adjust testclient typing and warnings #3322 .
Use httpx2 for type checking in the testclient module by @leifwar in #3304
httpx2 for type checking in the testclient module by @leifwar in #3304Full Changelog: 1.2.0...1.2.1
httpx2 for type checking in the testclient module by @leifwar in https://github.com/Kludex/starlette/pull/3304Full Changelog: https://github.com/Kludex/starlette/compare/1.2.0...1.2.1
Use httpx2 for type checking in the testclient module #3304 .
Add assert error for requires() when the request parameter is not a Request type #3298 .
Support httpx2 in the test client by @Kludex in #3291
Full Changelog: https://github.com/Kludex/starlette/compare/1.1.0...1.2.0
Use "application/octet-stream" as the FileResponse media type fallback by @ATOM00blue in #3283
"application/octet-stream" as the FileResponse media type fallback by @ATOM00blue in #3283HTTPEndpoint by @Kludex in #3286StaticFiles.lookup_path by @Kludex in #3287Full Changelog: 1.0.1...1.1.0
"application/octet-stream" as the FileResponse media type fallback by @ATOM00blue in https://github.com/Kludex/starlette/pull/3283HTTPEndpoint by @Kludex in https://github.com/Kludex/starlette/pull/3286StaticFiles.lookup_path by @Kludex in https://github.com/Kludex/starlette/pull/3287Full Changelog: https://github.com/Kludex/starlette/compare/1.0.1...1.1.0
Only dispatch standard HTTP verbs in HTTPEndpoint #3286 .
Reject absolute paths in StaticFiles.lookup_path #3287 .
Ignore malformed Host header when constructing request.url by @Kludex in https://github.com/Kludex/starlette/pull/3279
Host header when constructing request.url by @Kludex in https://github.com/Kludex/starlette/pull/3279Full Changelog: https://github.com/Kludex/starlette/compare/1.0.0...1.0.1
After nearly eight years since its creation, Starlette has reached its first stable release.
Starlette 1.0 is here! 🎉
After nearly eight years since its creation, Starlette has reached its first stable release.
A special thank you to @lovelydinosaur, the creator of Starlette, Uvicorn, HTTPX and MkDocs, whose work helped to lay the foundation for the modern async Python ecosystem. 🙏
Thank you to @adriangb, @graingert, @agronholm, @florimondmanca, @aminalaee, @tiangolo, @alex-oleshkevich, @abersheeran, and @uSpike for helping make Starlette what it is today. And to all my sponsors - especially @tiangolo, @huggingface, and @elevenlabs - thank you for your support!
Thank you to all 290+ contributors who have shaped Starlette over the years! ❤️
Read more on the blog post.
Check out the full release notes at https://www.starlette.io/release-notes/#100-march-22-2026
Full Changelog: https://github.com/encode/starlette/compare/1.0.0rc1...1.0.0
Starlette 1.0 is here!
After nearly eight years since its creation, Starlette has reached its first stable release. Thank you to everyone who tested the release candidate and reported issues.
You can read more on the blog post .
Handle websocket denial responses in StreamingResponse and FileResponse #3189 .
Use bytearray for field accumulation in FormParser #3179 .
Move parser.finalize() inside try/except in MultiPartParser.parse() #3153 .
This release removes all deprecated features marked for 1.0.0, along with some last-minute bug fixes.
We're ready! 🚀
The first release candidate for Starlette 1.0 is here! After years on ZeroVer, we're finally making the jump.
This release removes all deprecated features marked for 1.0.0, along with some last-minute bug fixes.
A special thank you to @lovelydinosaur, the creator of Starlette, Uvicorn, HTTPX and MkDocs, whose work helped to lay the foundation for the modern async Python ecosystem. 🙏
Thank you to @adriangb, @graingert, @agronholm, @florimondmanca, @aminalaee, @tiangolo, @alex-oleshkevich, and @abersheeran for helping make Starlette what it is today. And to all my sponsors - especially @tiangolo, @huggingface, and @elevenlabs - thank you for your support!
Thank you to all 290+ contributors who have shaped Starlette over the years!
Check out the full release notes at https://www.starlette.io/release-notes/#100rc1-february-23-2026
Full Changelog: https://github.com/Kludex/starlette/compare/0.52.1...1.0.0rc1
We're ready! I'm thrilled to announce the first release candidate for Starlette 1.0.
Starlette was created in June 2018 by Tom Christie, and has been on ZeroVer for years. Today, it's downloaded almost 10 million times a day , serves as the foundation for FastAPI, and has inspired many other frameworks. In the age of AI, Starlette continues to play an important role as a dependency of the Python MCP SDK.
This release focuses on removing deprecated features that were marked for removal in 1.0.0, along with some last minute bug fixes. It's a release candidate, so we can gather feedback from the community before the final 1.0.0 release soon.
A huge thank you to all the contributors who have helped make Starlette what it is today. In particular, I'd like to recognize:
Kim Christie - The original creator of Starlette, Uvicorn, and MkDocs, and the current maintainer of HTTPX. Kim's work helped lay the foundation for the modern async Python ecosystem.
Adrian Garcia Badaracco - One of the smartest people I know, whom I have the pleasure of working with at Pydantic.
Thomas Grainger - My async teacher, always ready to help with questions.
Alex Grönholm - Another async mentor, always prompt to help with questions.
Florimond Manca - Always present in the early days of both Starlette and Uvicorn, and helped a lot in the ecosystem.
Amin Alaee - Contributed a lot with file-related PRs.
Sebastián Ramírez - Maintains FastAPI upstream, and always in contact to help with upstream issues.
Alex Oleshkevich - Helped a lot on templates and many discussions.
abersheeran - My go-to person when I need help on many subjects.
I'd also like to thank my sponsors for their support. A special thanks to @tiangolo , @huggingface , and @elevenlabs for their generous sponsorship, and to all my other sponsors:
@roboflow , @ogabrielluiz , @SaboniAmine , @russbiggs , @BryceBeagle , @chdsbd , @TheR1D , @ddanier , @larsyngvelundin , @jpizquierdo , @alixlahuec , @nathanchapman , @devid8642 , @comet-ml , @Evil0ctal , @msehnout , and @codingjoe .
Remove on_startup and on_shutdown parameters from Starlette and Router . Use the lifespan parameter instead #3117 .
Remove on_event() decorator from Starlette and Router . Use the lifespan parameter instead #3117 .
Remove add_event_handler() method from Starlette and Router . Use the lifespan parameter instead #3117 .
Remove startup() and shutdown() methods from Router #3117 .
Remove @app.route() decorator from Starlette and Router . Use Route in the routes parameter instead #3117 .
Remove @app.websocket_route() decorator from Starlette and Router . Use WebSocketRoute in the routes parameter instead #3117 .
Remove @app.exception_handler() decorator from Starlette . Use exception_handlers parameter instead #3117 .
Remove @app.middleware() decorator from Starlette . Use middleware parameter instead #3117 .
Remove iscoroutinefunction_or_partial() from starlette.routing #3117 .
Remove **env_options parameter from Jinja2Templates . Use a preconfigured jinja2.Environment via the env parameter instead #3118 .
Remove deprecated TemplateResponse(name, context) signature from Jinja2Templates . Use TemplateResponse(request, name, ...) instead #3118 .
Remove deprecated method parameter from FileResponse #3147 .
Include bytes unit in Content-Range header on 416 responses.
Handle null bytes in StaticFiles path #3139 .
Use sort-based merge for Range header parsing #3138 .
Set Content-Type instead of Content-Range on multi-range responses #3142 .
Use CRLF line endings in multipart byterange boundaries #3143 .
Avoid mutating FileResponse headers on range requests #3144 .
Return explicit origin in CORS response when credentials are allowed #3137 .
Enable autoescape by default in Jinja2Templates #3148 .
Only use typing_extensions in older Python versions by @Kludex in https://github.com/Kludex/starlette/pull/3109
typing_extensions in older Python versions by @Kludex in https://github.com/Kludex/starlette/pull/3109Full Changelog: https://github.com/Kludex/starlette/compare/0.52.0...0.52.1
In this release, State can be accessed using dictionary-style syntax for improved type safety (#3036).
In this release, State can be accessed using dictionary-style syntax for improved type safety (#3036).
from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from typing import TypedDict
import httpx
from starlette.applications import Starlette
from starlette.requests import Request
class State(TypedDict):
http_client: httpx.AsyncClient
@asynccontextmanager
async def lifespan(app: Starlette) -> AsyncIterator[State]:
async with httpx.AsyncClient() as client:
yield {"http_client": client}
async def homepage(request: Request[State]):
client = request.state["http_client"]
# If you run the below line with mypy or pyright, it will reveal the correct type.
reveal_type(client) # Revealed type is 'httpx.AsyncClient'
See Accessing State for more details.
Full Changelog: https://github.com/Kludex/starlette/compare/0.51.0...0.52.0
Increase warning stacklevel on DeprecationWarning for wsgi module #3082.
allow_private_network in CORSMiddleware #3065.DeprecationWarning for wsgi module #3082.Full Changelog: https://github.com/Kludex/starlette/compare/0.50.0...0.51.0
## Removed * Drop Python 3.9 support #3061. --- Full Changelog: https://github.com/Kludex/starlette/compare/0.49.3...0.50.0
Full Changelog: https://github.com/Kludex/starlette/compare/0.49.3...0.50.0
Relax strictness on Middleware type #3059.
Middleware type #3059.Full Changelog: https://github.com/Kludex/starlette/compare/0.49.2...0.49.3
This is the last release that supports Python 3.9, which will be dropped in the next minor release.
Ignore if-modified-since header if if-none-match is present in StaticFiles #3044.
if-modified-since header if if-none-match is present in StaticFiles #3044.Full Changelog: https://github.com/Kludex/starlette/compare/0.49.1...0.49.2
This release fixes a security vulnerability in the parsing logic of the Range header in FileResponse.
This release fixes a security vulnerability in the parsing logic of the Range header in FileResponse.
You can view the full security advisory: GHSA-7f5h-v6xp-fcq8
Full Changelog: https://github.com/Kludex/starlette/compare/0.49.0...0.49.1
Add encoding parameter to Config class #2996.
encoding parameter to Config class #2996.Request.cookies #3029.Literal type for WebSocketEndpoint encoding values #3027.Middleware when using BaseHTTPMiddleware #2976.Full Changelog: https://github.com/Kludex/starlette/compare/0.48.0...0.49.0
Add official Python 3.14 support #3013.
Full Changelog: https://github.com/Kludex/starlette/compare/0.47.3...0.48.0
Use asyncio.iscoroutinefunction for Python 3.12 and older by @mjpieters in https://github.com/encode/starlette/pull/2984
asyncio.iscoroutinefunction for Python 3.12 and older by @mjpieters in https://github.com/encode/starlette/pull/2984Full Changelog: https://github.com/encode/starlette/compare/0.47.2...0.47.3
Make UploadFile check for future rollover #2962.
UploadFile check for future rollover #2962.Full Changelog: https://github.com/encode/starlette/compare/0.47.1...0.47.2
Use Self in TestClient.__enter__ #2951
Add support for ASGI pathsend extension #2671.
pathsend extension #2671.partitioned attribute to Response.set_cookie #2501.methods parameter type from list[str] to Collection[str] #2903.import typing by from typing import ... in the whole codebase #2867.ExceptionMiddleware.http_exception as async to prevent thread creation #2922.Full Changelog: https://github.com/encode/starlette/compare/0.46.2...0.47.0
Use correct index on backwards compatible logic in TemplateResponse by @alex-oleshkevich in https://github.com/encode/starlette/pull/2909
TemplateResponse by @alex-oleshkevich in https://github.com/encode/starlette/pull/2909BaseHTTPMiddleware by @ramannanda9 in https://github.com/encode/starlette/pull/2911Full Changelog: https://github.com/encode/starlette/compare/0.46.1...0.46.2
Prevents reraising of exception from BaseHttpMiddleware #2911 .
Use correct index on backwards compatible logic in TemplateResponse #2909 .
Allow relative directory path when follow_symlinks=True #2896.
follow_symlinks=True #2896.Full Changelog: https://github.com/encode/starlette/compare/0.46.0...0.46.1
Add deprecated warning to TestClient(timeout=...) #2840.
GZipMiddleware: Make sure Vary header is always added if a response can be compressed #2865.GZipMiddleware: Don't compress on server sent events #2871.MultiPartParser: Rename max_file_size to spool_max_size #2780.TestClient(timeout=...) #2840.Full Changelog: https://github.com/encode/starlette/compare/0.45.3...0.46.0
Turn directory into string on lookup_path on commonpath comparison by @Kludex in https://github.com/encode/starlette/pull/2851
lookup_path on commonpath comparison by @Kludex in https://github.com/encode/starlette/pull/2851Full Changelog: https://github.com/encode/starlette/compare/0.45.2...0.45.3
Make create_memory_object_stream compatible with old anyio versions once again, and bump anyio minimum version to 3.6.2 by @graingert in #2833.
create_memory_object_stream compatible with old anyio versions once again, and bump anyio minimum version to 3.6.2 by @graingert in #2833.Full Changelog: https://github.com/encode/starlette/compare/0.45.1...0.45.2
Collect errors more reliably from WebSocket test client by @graingert in https://github.com/encode/starlette/pull/2814
MemoryObjectReceiveStream upon exception in BaseHTTPMiddleware children by @Kludex in https://github.com/encode/starlette/pull/2813Full Changelog: https://github.com/encode/starlette/compare/0.45.0...0.45.1
Close MemoryObjectReceiveStream left unclosed upon exception in BaseHTTPMiddleware children #2813 .
Collect errors more reliably from the WebSocket logic on the TestClient #2814 .
Remove deprecated WS_1004_NO_STATUS_RCVD and WS_1005_ABNORMAL_CLOSURE by @Kludex in https://github.com/encode/starlette/pull/2827
ExceptionMiddleware import proxy from starlette.exceptions module by @Kludex in https://github.com/encode/starlette/pull/2826WS_1004_NO_STATUS_RCVD and WS_1005_ABNORMAL_CLOSURE by @Kludex in https://github.com/encode/starlette/pull/2827Full Changelog: https://github.com/encode/starlette/compare/0.44.0...0.45.0
Drop Python 3.8 support #2823 .
Remove ExceptionMiddleware import proxy from starlette.exceptions module #2826 .
Remove deprecated WS_1004_NO_STATUS_RCVD and WS_1005_ABNORMAL_CLOSURE #2827 .
Add max_part_size parameter to Request.form() by @iudeen in https://github.com/encode/starlette/pull/2815
max_part_size parameter to Request.form() by @iudeen in https://github.com/encode/starlette/pull/2815client parameter to TestClient by @iudeen in https://github.com/encode/starlette/pull/2810Full Changelog: https://github.com/encode/starlette/compare/0.43.0...0.44.0
Add client parameter to TestClient #2810 .
Add max_part_size parameter to Request.form() #2815 .
Remove deprecated allow_redirects argument from TestClient #2808.
allow_redirects argument from TestClient #2808.Full Changelog: https://github.com/encode/starlette/compare/0.42.0...0.43.0
Raise ClientDisconnect on StreamingResponse #2732.
ClientDisconnect on StreamingResponse #2732.StaticFiles when follow_symlinks=True #2711.python-multipart version to 0.0.18 0ba8395.httpx version to 0.27.0 #2773.Full Changelog: https://github.com/encode/starlette/compare/0.41.3...0.42.0
Exclude the query parameters from the scope[raw_path] on the TestClient #2716.
Revert bump on python-multipart by @Kludex in https://github.com/encode/starlette/pull/2737
python-multipart by @Kludex in https://github.com/encode/starlette/pull/2737Full Changelog: https://github.com/encode/starlette/compare/0.41.1...0.41.2
Change python-multipart import to python_multipart by @Kludex in https://github.com/encode/starlette/pull/2733
python-multipart import to python_multipart by @Kludex in https://github.com/encode/starlette/pull/2733python-multipart version to 0.0.13 by @Kludex in https://github.com/encode/starlette/pull/2734Full Changelog: https://github.com/encode/starlette/compare/0.41.0...0.41.1
Bump minimum python-multipart version to 0.0.13 #2734 .
Change python-multipart import to python_multipart #2733 .
Allow to raise HTTPException before websocket.accept() https://github.com/encode/starlette/pull/2725
HTTPException before websocket.accept() https://github.com/encode/starlette/pull/2725This release fixes a Denial of service (DoS) via multipart/form-data requests.
This release fixes a Denial of service (DoS) via multipart/form-data requests.
You can view the full security advisory: GHSA-f96h-pmfr-66vw
max_part_size to MultiPartParser to limit the size of parts in multipart/form-data
requests fd038f3.Allow use of request.url_for when only "app" scope is available #2672.
Avoid regex re-compilation in responses.py and schemas.py #2700.
responses.py and schemas.py #2700.get_route_path by removing regular expression usage #2701.FileResponse.chunk_size when handling multiple ranges #2703.token_hex for generating multipart boundary strings #2702.Full Changelog: https://github.com/encode/starlette/compare/0.39.0...0.39.1
Add support for HTTP Range to FileResponse #2697
FileResponse #2697Full Changelog: https://github.com/encode/starlette/compare/0.38.6...0.39.0
Close unclosed MemoryObjectReceiveStream in TestClient #2693.
MemoryObjectReceiveStream in TestClient #2693.Full Changelog: https://github.com/encode/starlette/compare/0.38.5...0.38.6
Schedule BackgroundTasks from within BaseHTTPMiddleware #2688. This behavior was removed in 0.38.3, and is now restored.
BackgroundTasks from within BaseHTTPMiddleware #2688.
This behavior was removed in 0.38.3, and is now restored.Full Changelog: https://github.com/encode/starlette/compare/0.38.4...0.38.5
Ensure accurate root_path removal in get_route_path function #2600
root_path removal in get_route_path function #2600Full Changelog: https://github.com/encode/starlette/compare/0.38.3...0.38.4
Don't poll for disconnects in BaseHTTPMiddleware via StreamingResponse #2620.
Fix routing.get_name() not to assume all routines have __name__ #2648
routing.get_name() not to assume all routines have __name__ #2648Full Changelog: https://github.com/encode/starlette/compare/0.38.1...0.38.2
Revert "Add support for ASGI pathsend extension" #2649.
Full Changelog: https://github.com/encode/starlette/compare/0.38.0...0.38.1
Allow use of memoryview in StreamingResponse and Response #2576 and #2577.
memoryview in StreamingResponse and Response #2576
and #2577.StaticFiles #2583.Jinja2Template instantiation parameters #2568.WebSocketTestSession #2597.Full Changelog: https://github.com/encode/starlette/compare/0.37.2...0.38.0
Remove deprecated app argument passed to httpx.Client on the TestClient #2526.
Warn instead of raise for missing env file on Config #2485.
Config #2485.Full Changelog: https://github.com/encode/starlette/compare/0.37.0...0.37.1
Support the WebSocket Denial Response ASGI extension #2041.
Full Changelog: https://github.com/encode/starlette/compare/0.36.3...0.37.0
Create anyio.Event on async context #2459.
anyio.Event on async context #2459.Full Changelog: https://github.com/encode/starlette/compare/0.36.2...0.36.3
Upgrade python-multipart to 0.0.7 13e5c26.
Check if "extensions" in scope before checking the extension #2438.
Full Changelog: https://github.com/encode/starlette/compare/0.36.0...0.36.1
Add support for ASGI pathsend extension #2435.
pathsend extension #2435.WebSocketTestSession on close #2427.WebSocketDisconnect when WebSocket.send() excepts IOError #2425.FileNotFoundError when the env_file parameter on Config is not valid #2422.Full Changelog: https://github.com/encode/starlette/compare/0.35.1...0.36.0
Stop using the deprecated "method" parameter in FileResponse inside of StaticFiles #2406.
Your coding agent can read these notes before it upgrades. Set up the MCP server →