Starlette is the ASGI layer under FastAPI, so a Starlette release is a FastAPI release whether or not your requirements.txt mentions it by name. 1.10.0 is mostly performance and correctness, with a few behavior changes worth reading before you bump.
Leaner Form Parsing
The headline is the form parser. It now builds each field inside the parser callbacks instead of queueing every event and replaying it, which cuts both CPU and memory on multipart and URL-encoded forms. On the project’s benchmarks, parsing 1,000 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 dropped from 6,880 bytes to 864. Two correctness fixes ride along: the last field is no longer dropped when a request stream ends without a trailing empty chunk, and two FormData objects holding several uploads under one key can finally be compared without raising TypeError.
A Memory Fix That Shows Up Under Load
The change I’d flag for anyone running Starlette or FastAPI in production is smaller than the form work but matters more over time: handled exceptions no longer keep requests alive. Starlette now clears the traceback after an exception handler runs, so an exception instance that’s reused across requests, like a module-level HTTPException, no longer pins per-request objects in memory. That’s the kind of slow, hard-to-attribute memory growth that only shows up once an app has been serving traffic for a while.
Behavior Changes to Read Before You Upgrade
A few changes can shift behavior, so scan these before bumping:
- Multidict equality now preserves the order of values under a repeated key, so
QueryParams("a=1&a=2")andQueryParams("a=2&a=1")are no longer equal. If any tests or cache keys rely on that comparison, check them. starlette.formparsers.FormMessageis deprecated andFormParser.messagesis gone.url_path_for()keeps path-parameter values that look like a placeholder, so a value of{id}is no longer accidentally substituted.WSGIMiddlewarenow stripsroot_pathonly at a path-segment boundary, fixing the bug where/applicationunder aroot_pathof/appbecame/lication.FileResponseignoresRangeon methods other thanGETandHEAD, per RFC 9110.
Why This One Hits Wide
FastAPI is one of the most widely deployed Python web frameworks, and every FastAPI app runs on Starlette. You may pick up 1.10.0 the next time you update FastAPI without ever installing Starlette directly, so it’s worth knowing what moved. pip install starlette==1.10.0 (or the FastAPI release that requires it) gets you the fixes.
How Scout Sees What Changes After You Upgrade
Scout Monitoring traces your Starlette and FastAPI endpoints with their timing and memory, alongside database queries, external calls, and background work. The two changes most worth watching after this upgrade both surface there: the form-parser efficiency as time and allocations on upload-heavy routes, and the handled-exception memory fix as a flatter memory profile on a long-running process. If one of the behavior changes trips a route, it shows up in the same trace view rather than as a mystery.
For application monitoring with errors, logs, and traces, Scout Monitoring provides the fastest insights without the bloat.