You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(deps): update dependency starlette to v1.10.0 - autoclosed - #1224
Starlette 1.10.0 parses URL-encoded forms with less memory and CPU, no longer drops the last field when a stream ends early, and lets you compare FormData that holds several uploads under one key.
uv pip install starlette==1.10.0
Forms with many fields parse faster and use less memory (#3724). FormParser builds each field in the parser callbacks instead of queueing every event and replaying it. On CodSpeed, 1000 fields went from 42.8 ms to 34.9 ms and from 63.5 KB to 54.5 KB, and the max_fields limit case went from 6,880 B to 864 B.
The last field is kept when the request stream ends without an empty chunk (#3599). The parser is now finalized once the stream is exhausted, so custom streams that never yield a final b"" no longer lose their last field.
FormData with repeated uploads can be compared (#3619). Comparing two FormData objects with several UploadFile values under the same key used to raise TypeError.
⚠️ Behaviour changes
Multidict equality keeps the order of values under a repeated key (#3619). Keys can still appear in any order, but QueryParams("a=1&a=2") and QueryParams("a=2&a=1") are no longer equal, matching what getlist() returns.
starlette.formparsers.FormMessage is deprecated (#3724). The parser no longer uses it, and FormParser.messages is gone. Calling FormMessage(...) emits a StarletteDeprecationWarning.
🧭 Routing and URL generation
Path parameter values that look like a placeholder are kept as they are (#3725). url_path_for("route", category="{id}", id="42") on /{category}/{id} now returns /{id}/42 instead of /42/42. Substitution also got faster, from 549 ns to 520 ns with two parameters and from 1,078 ns to 779 ns with five.
Route matching does less work per request (#3665, #3722). Match members are compared by identity, cutting up to 4.9% of the instructions per dispatch in the routing benchmarks.
WSGIMiddleware strips root_path only at a path segment boundary (#3718). A request to /application under a root_path of /app no longer becomes /lication.
FloatConvertor reports NaN and infinity correctly (#3716). NaN was reported as a negative float.
🛡️ Middleware, responses and config
Handled exceptions no longer keep requests alive (#3205). Starlette clears the traceback after an exception handler runs, so an exception instance reused across requests, such as a module-level HTTPException, no longer pins per-request objects in memory.
Middlewares accept http.response.start without headers (#3721). BaseHTTPMiddleware, GZipMiddleware and SessionMiddleware default the omitted field to an empty list instead of raising KeyError.
FileResponse ignores Range on methods other than GET and HEAD (#3679). A POST endpoint that returns a file now sends the full file, as RFC 9110 requires.
Config strips one pair of matching outer quotes from env file values (#3720). KEY='say "hi"' now reads as say "hi" instead of say "hi.
Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>
Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer TIP This summary will be updated as you push new changes.
There hasn't been any activity on this pull request recently. Therefore, this pull request has been automatically marked as stale and will be closed if no further activity occurs within seven days. Thank you for your contributions.
renovateBot
changed the title
chore(deps): update dependency starlette to v1.10.0
chore(deps): update dependency starlette to v1.10.0 - autoclosed
Nov 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==1.9.0→==1.10.0Release Notes
Kludex/starlette (starlette)
v1.10.0: Version 1.10.0Compare Source
📝 Leaner URL-encoded form parsing
Starlette 1.10.0 parses URL-encoded forms with less memory and CPU, no longer drops the last field when a stream ends early, and lets you compare
FormDatathat holds several uploads under one key.uv pip install starlette==1.10.0FormParserbuilds each field in the parser callbacks instead of queueing every event and replaying it. On CodSpeed, 1000 fields went from 42.8 ms to 34.9 ms and from 63.5 KB to 54.5 KB, and themax_fieldslimit case went from 6,880 B to 864 B.b""no longer lose their last field.FormDatawith repeated uploads can be compared (#3619). Comparing twoFormDataobjects with severalUploadFilevalues under the same key used to raiseTypeError.QueryParams("a=1&a=2")andQueryParams("a=2&a=1")are no longer equal, matching whatgetlist()returns.starlette.formparsers.FormMessageis deprecated (#3724). The parser no longer uses it, andFormParser.messagesis gone. CallingFormMessage(...)emits aStarletteDeprecationWarning.🧭 Routing and URL generation
url_path_for("route", category="{id}", id="42")on/{category}/{id}now returns/{id}/42instead of/42/42. Substitution also got faster, from 549 ns to 520 ns with two parameters and from 1,078 ns to 779 ns with five.Matchmembers are compared by identity, cutting up to 4.9% of the instructions per dispatch in the routing benchmarks.WSGIMiddlewarestripsroot_pathonly at a path segment boundary (#3718). A request to/applicationunder aroot_pathof/appno longer becomes/lication.FloatConvertorreports NaN and infinity correctly (#3716). NaN was reported as a negative float.🛡️ Middleware, responses and config
HTTPException, no longer pins per-request objects in memory.http.response.startwithoutheaders(#3721).BaseHTTPMiddleware,GZipMiddlewareandSessionMiddlewaredefault the omitted field to an empty list instead of raisingKeyError.FileResponseignoresRangeon methods other thanGETandHEAD(#3679). APOSTendpoint that returns a file now sends the full file, as RFC 9110 requires.Configstrips one pair of matching outer quotes from env file values (#3720).KEY='say "hi"'now reads assay "hi"instead ofsay "hi.Full changelog: 1.9.0...1.10.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.