Update all non-major dependencies #2
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/all-minor-patch"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
==2.10.1→==2.15.1==0.116.1→==0.162.0==2.11.7→==2.14.1==2.10.1→==2.16.23.12-alpine→3.15-alpine==0.0.20→==0.0.32==0.35.0→==0.54.0Release Notes
jpadilla/pyjwt (PyJWT)
v2.15.1Compare Source
Changed
DecodeErrorinstead of exposing a raw
RecursionError.Added
JWKSetCachenow stores the parsedPyJWKSetrather than the raw JWKSpayload, so a cache hit no longer re-parses every key.
JWKSetCache.put()accepts either form and raises
PyJWKSetErrorfor anything else. As aresult,
PyJWKClient.get_jwk_set()returns the samePyJWKSetinstancefor as long as it stays cached, rather than a freshly built one per call in
#​1208 <https://github.com/jpadilla/pyjwt/pull/1208>__PyJWKClient.fetch_data()now raisesPyJWKClientError("The JWKS endpoint did not return a JSON object")whenthe endpoint response is not a JSON object, instead of returning it for
get_jwk_set()to reject. Callers reaching the JWKS throughget_jwk_set()see the same error as before in#​1208 <https://github.com/jpadilla/pyjwt/pull/1208>__Fixed
JWKS, array, encoded, BOM-prefixed, DER, or PEM input. See
GHSA-r6x4-923q-g947 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-r6x4-923q-g947>,GHSA-ffc3-869f-jxw9 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-ffc3-869f-jxw9>,GHSA-p4g4-x82p-q773 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-p4g4-x82p-q773>,and
GHSA-w2cx-738m-mc7w <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w2cx-738m-mc7w>.PyJWKClientfetches a JWKS, preventingredirected destinations from being treated as trusted key sources. See
GHSA-9v7f-9g4p-ffgj <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj>__.normal key-rotation behavior. See
GHSA-2gx3-rcp4-g85q <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q>__.errors or whole-set parsing failures. See
GHSA-8wjv-2p76-3863 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-8wjv-2p76-3863>__and
GHSA-w6j9-cwv2-h6wq <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w6j9-cwv2-h6wq>__.optionsmapping during decodewhen
verify_signatureis false, so a mapping reused across asignature-disabled peek and a fully verified decode cannot silently
skip registered-claim verification. See
GHSA-gvp8-978c-rx2q <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-gvp8-978c-rx2q>__.GHSA-hxm8-2xgr-2p9m <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m>__.@xclow3n <https://github.com/xclow3n>__ for reporting this behavior; fixed in commit37b54877 <https://github.com/jpadilla/pyjwt/commit/37b54877bf7bea67e8149130e96929e3ec798122>__.Fixed
HMACAlgorithm.prepare_keyto close an algorithm-confusion gap thatthe existing PEM/SSH guard did not cover. Reported by @aradona91 in
GHSA-xgmm-8j9v-c9wx <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx>__.algtoPyJWK.algorithm_nameduringverification so the caller's
algorithms=[...]allow-list cannot bebypassed when decoding with a
PyJWK/PyJWKClientkey. Reportedby @sushi-gif in
GHSA-jq35-7prp-9v3f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f>__.http(s)URI schemes inPyJWKClientso attacker-influenced URIs cannot read local files or reach unintended schemes via
urllib's default
file:///ftp:///data:handlers. Reportedby @KEIJOT in
GHSA-993g-76c3-p5m4 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4>__.PyJWKClient.fetch_data.The previous
finally-blockput(None)pattern cleared the cacheon any transient outage, turning one bad JWKS request into application-
wide auth failure. Reported by @eddieran in
GHSA-fhv5-28vv-h8m8 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8>__.when
b64=falseis set in the protected header, and require thatsegment to be empty (RFC 7515 Appendix F detached form). Closes an
unauthenticated DoS amplifier. Reported by @thesmartshadow in
GHSA-w7vc-732c-9m39 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39>__.Fixed
dev,docs, andtestspackage extras to dependency groups by @kurtmckee in#​1152 <https://github.com/jpadilla/pyjwt/pull/1152>__v2.15.0Compare Source
See the 2.15.0 changelog for complete release details.
v2.14.0Compare Source
See the 2.14.0 changelog for the complete release details and related security advisories.
v2.13.0Compare Source
PyJWT 2.13.0 — Security Release
This release bundles five security fixes plus three additional hardening / spec-compliance changes. We recommend all users upgrade.
Security
GHSA-xgmm-8j9v-c9wx— JWK JSON accepted as HMAC secret (algorithm confusion).HMACAlgorithm.prepare_keypreviously rejected PEM- and SSH-formatted asymmetric keys but did not catch a JWK passed as a raw JSON string. In a verifier configured with both symmetric and asymmetric algorithms inalgorithms=[…]and a raw-JSON JWK as the key, an attacker could forge HS256 tokens using the JWK text as the HMAC secret. The guard has been extended to reject any JWK-shaped JSON. Reported by @aradona91.GHSA-jq35-7prp-9v3f— Algorithm allow-list bypass withPyJWK/PyJWKClient. When verifying with aPyJWK, the caller'salgorithms=[…]allow-list was checked against the token headeralgas a string only; actual verification used the algorithm bound to thePyJWK. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token headeralgto match thePyJWK's algorithm before verification. Reported by @sushi-gif.GHSA-w7vc-732c-9m39— DoS via base64 decode of unused payload segment whenb64=false. For detached-payload JWS (b64=false), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplieddetached_payload. An attacker could inflate the unused segment to force CPU + memory cost without holding a valid signature. The segment is now required to be empty per RFC 7515 Appendix F, and is no longer decoded. Reported by @thesmartshadow.GHSA-993g-76c3-p5m4—PyJWKClientaccepts non-HTTP(S) URIs.PyJWKClient.fetch_datapassed its URI tourllib.request.urlopen, which by default also handlesfile://,ftp://, anddata:schemes. An application that fed an attacker-influenced URI intoPyJWKClientcould be coerced into reading local files or reaching other unintended schemes.PyJWKClientnow rejects any URI whose scheme isn'thttporhttps. Reported by @KEIJOT.GHSA-fhv5-28vv-h8m8—PyJWKClientcache wiped on fetch error. Afinally-blockput(jwk_set=None)cleared the JWK Set cache whenever a fetch raised, turning a transient JWKS-endpoint outage into application-wide auth failure. The cache write was moved into the success path; transient errors no longer evict valid cached keys. Reported by @eddieran.Fixed
HMACAlgorithm.prepare_keywithInvalidKeyErrorinstead of accepting them with only a warning. Defends against theos.getenv("JWT_SECRET", "")footgun. Thanks to @SnailSploit and @spartan8806 for the reports.options(includingenforce_minimum_key_length) fromPyJWT.decodethrough toPyJWS._verify_signature. The option was previously silently dropped between the two layers, so it only took effect when set on thePyJWTinstance. Thanks to @WLUB for the report.b64=false: the encoder now auto-adds"b64"tocrit, and the decoder rejects tokens that setb64=falsewithout listing it incrit. Thanks to @MachineLearning-Nerd for the report.Changed
dev,docs, andtestspackage extras to dependency groups, by @kurtmckee in #1152.Upgrade notes
Most fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:
""orb""as a secret (often via a missing env var, e.g.os.getenv("JWT_SECRET", "")),encode/decodewill now raiseInvalidKeyError. This is the intended behavior — fix the configuration.PyJWKdecoding now requires the token'salgto match the JWK's algorithm. Previously a mismatch was silently honored if the headeralgappeared in the allow-list. Tokens that relied on this mismatch will now fail withInvalidAlgorithmError.PyJWKClientnow rejects non-HTTP(S) URIs at construction time. Tests or dev environments that fetched JWKS fromfile://URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. constructPyJWKSet.from_dict(...)directly).b64=falsetokens are now strictly RFC 7515 / 7797 compliant. Tokens with a non-empty compact-form payload segment, or that omit"b64"fromcrit, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.enforce_minimum_key_lengthset per-call now takes effect. Callers who passedoptions={"enforce_minimum_key_length": True}tojwt.decode()previously got no enforcement; they will now getInvalidKeyErroron undersized keys, as documented.Full changelog: https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0
v2.12.1Compare Source
Fixed
#​1134 <https://github.com/jpadilla/pyjwt/pull/1134>__HTTPErrorresponse to preventResourceWarningon Python 3.14 by @veeceey in#​1133 <https://github.com/jpadilla/pyjwt/pull/1133>__algorithmsdict in PyJWK instances by @akx in#​1143 <https://github.com/jpadilla/pyjwt/pull/1143>__GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>__#​1148 <https://github.com/jpadilla/pyjwt/pull/1148>__Added
#​1105 <https://github.com/jpadilla/pyjwt/pull/1105>__#​964 <https://github.com/jpadilla/pyjwt/pull/964>__#​1041 <https://github.com/jpadilla/pyjwt/pull/1041>__issclaim is a string during encoding and decoding by @pachewise in#​1040 <https://github.com/jpadilla/pyjwt/pull/1040>__optionsin decode, decode_complete by @pachewise in#​1045 <https://github.com/jpadilla/pyjwt/pull/1045>__#​1068 <https://github.com/jpadilla/pyjwt/pull/1068>__SyntaxWarning\s/DeprecationWarning\s caused by invalid escape sequences by @kurtmckee in#​1103 <https://github.com/jpadilla/pyjwt/pull/1103>__#​1114 <https://github.com/jpadilla/pyjwt/pull/1114>__increase the strictness of the type checking, and remove the mypy pre-commit hook
by @kurtmckee in
#​1112 <https://github.com/jpadilla/pyjwt/pull/1112>__Added
issclaim by @fabianbadoi inGHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>__v2.12.0Compare Source
Fixed
#​1134 <https://github.com/jpadilla/pyjwt/pull/1134>__HTTPErrorresponse to preventResourceWarningon Python 3.14 by @veeceey in#​1133 <https://github.com/jpadilla/pyjwt/pull/1133>__algorithmsdict in PyJWK instances by @akx in#​1143 <https://github.com/jpadilla/pyjwt/pull/1143>__GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>__#​1148 <https://github.com/jpadilla/pyjwt/pull/1148>__Added
#​1105 <https://github.com/jpadilla/pyjwt/pull/1105>__#​964 <https://github.com/jpadilla/pyjwt/pull/964>__#​1041 <https://github.com/jpadilla/pyjwt/pull/1041>__issclaim is a string during encoding and decoding by @pachewise in#​1040 <https://github.com/jpadilla/pyjwt/pull/1040>__optionsin decode, decode_complete by @pachewise in#​1045 <https://github.com/jpadilla/pyjwt/pull/1045>__#​1068 <https://github.com/jpadilla/pyjwt/pull/1068>__SyntaxWarning\s/DeprecationWarning\s caused by invalid escape sequences by @kurtmckee in#​1103 <https://github.com/jpadilla/pyjwt/pull/1103>__#​1114 <https://github.com/jpadilla/pyjwt/pull/1114>__increase the strictness of the type checking, and remove the mypy pre-commit hook
by @kurtmckee in
#​1112 <https://github.com/jpadilla/pyjwt/pull/1112>__Added
issclaim by @fabianbadoi inGHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>__v2.11.0Compare Source
What's Changed
optionsin decode, decode_complete; Improve docs by @pachewise in #1045algorithm=Noneto "none" by @qqii in #1056PyJWKClient.get_signing_key_from_jwtannotation by @khvn26 in #1048floatinstead ofintforlifespanandtimeoutby @nikitagashkov in #1068SyntaxWarningcaused by invalid escape sequences by @kurtmckee in #1103pep517, which is deprecated, tobuildby @kurtmckee in #1108New Contributors
Full Changelog: https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0
fastapi/fastapi (fastapi)
v0.162.0Compare Source
Omitted
boolandbool | Noneform fields now use their declared defaults or produce missing-field errors, consistent with other fields and Pydantic behavior. FastAPI no longer infersFalsefor omitted booleans. This applies to individual form parameters, form models, and unions of form models.Omitted boolean model fields are excluded from
model_dump(exclude_unset=True), and their defaults no longer count as submitted fields during union selection. Default factories andvalidate_defaultfollow the usual rules.For HTML checkboxes, declare a boolean with a default of
False. See Boolean Form Fields.Breaking Changes
v0.161.1Compare Source
Fixes
v0.161.0Compare Source
Features
v0.160.0Compare Source
Query, header, cookie, and form parameter models now apply their
extraconfiguration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parameters, or dependencies, which were previously excluded.With
extra="forbid", fields outside the model are rejected even if another parameter declares them. Withextra="allow", those fields are included as model extras. With the defaultextra="ignore", they are ignored.Breaking Changes
extraconfiguration to sibling fields. PR #16594 by @tiangolo.Internal
v0.159.1Compare Source
Features
v0.159.0Compare Source
Features
v0.158.2Compare Source
Features
v0.158.1Compare Source
Fixes
v0.158.0Compare Source
Features
v0.157.0Compare Source
Features
Docs
Internal
v0.156.8Compare Source
Fixes
bytes. PR #16566 by @tiangolo.v0.156.7Compare Source
Fixes
AliasChoices. PR #16564 by @tiangolo.v0.156.6Compare Source
Fixes
v0.156.5Compare Source
Fixes
AliasChoicesfor path parameters. PR #16560 by @tiangolo.v0.156.4Compare Source
Fixes
AliasChoicesfor named JSON body parameters. PR #16559 by @tiangolo.AliasChoicesextraction for form models. PR #16557 by @tiangolo.v0.156.3Compare Source
Fixes
AliasChoicesfor query parameters, headers, and cookies. PR #16555 by @tiangolo.v0.156.2Compare Source
Fixes
v0.156.1Compare Source
Fixes
v0.156.0Compare Source
Fixes
Field()attributes in request parameters. PR #16547 by @tiangolo.v0.155.0Compare Source
The deprecated
**extrakeyword arguments have been removed fromPath,Query,Header,Cookie,Body,Form, andFile. Unknown keyword arguments now raiseTypeError. For additional JSON Schema properties, replace, for example,Query(custom="value")withQuery(json_schema_extra={"custom": "value"}).Breaking Changes
**extrafrom request parameters. PR #16545 by @tiangolo.v0.154.0Compare Source
Features
v0.153.0Compare Source
Unions of form models now apply the same browser form handling as individual models. Empty scalar fields use defaults or produce missing-field errors, empty list items are preserved, omitted boolean fields become
False, and unselected files are treated as missing. JSON request bodies are unchanged.Fixes
v0.152.0Compare Source
Validation errors for header parameter models now report the HTTP header name, such as
int-val, instead of the Python field name,int_val. Explicit aliases,Header(convert_underscores=False), and Pydantic models withloc_by_alias=Falsekeep their existing behavior.Fixes
v0.151.0Compare Source
JSON request bodies now distinguish an explicit
nullfrom an omitted value. For individualBodyparameters,nullis validated asNone: nullable types accept it, and non-nullable types reject it even when a default is defined. Defaults and default factories apply only when the value is omitted. This applies both to parameters inside JSON objects and to parameters representing the entire body. Clients that usednullto request a default should omit the value instead.When a JSON object is expected because of
Body(embed=True)or multiple body parameters, sendingnullas the entire body now returns a validation error.Breaking Changes
v0.150.0Compare Source
When no file is selected, browsers submit a file part with an empty filename and empty content. FastAPI now treats this as missing: required file fields return a validation error, and fields with defaults or default factories use them. Unselected inputs are ignored in lists of files. Named zero-byte files are still accepted.
Breaking Changes
v0.149.0Compare Source
Browsers submit empty text inputs as empty strings (
""). FastAPI now treats empty scalar form values as missing in form models, matching individualFormparameters. Required fields return a validation error. Fields with defaults or default factories use them and remain unset inmodel_dump(exclude_unset=True).Empty strings inside lists are preserved. Omitted boolean form fields still become
False. JSON requests and direct Pydantic validation are unchanged.Breaking Changes
v0.148.0Compare Source
Defaults for omitted
Query,Header,Cookie, andFormparameters and model fields are no longer treated as user input. Defaults are not validated unlessvalidate_default=Trueis enabled. If you rely on validators running for omitted values, enable default validation withField(validate_default=True)for model fields or, for example,Query(validate_default=True)for individual parameters.Body(validate_default=True)is now honored too.For parameter models, applying a default no longer marks a field as explicitly set, so
model_dump(exclude_unset=True)excludes it. Default factories run once, and validation errors no longer include injected defaults ininput.Omitted boolean form fields still become
Falseand count as explicitly set.Breaking Changes
v0.147.0Compare Source
Omitted
boolandbool | Noneform fields are now interpreted asFalse, matching unchecked HTML checkboxes. This applies to individualFormparameters and form models, including required fields and fields with defaults ofTrueorNone. The inferred value is considered explicitly set, including inmodel_dump(exclude_unset=True).JSON requests and direct Pydantic validation are unchanged. See Boolean Form Fields.
Breaking Changes
Internal
v0.146.0Compare Source
The
root_pathparameter inFastAPI()is deprecated. Configure the server withfastapi run --root-path /api/v1instead.Breaking Changes
root_pathparameter inFastAPI. PR #16520 by @tiangolo.v0.145.0Compare Source
Breaking Changes
openapi_prefixand unused**extrafromFastAPI. PR #16518 by @tiangolo.Docs
v0.144.0Compare Source
Features
v0.143.5Compare Source
Fixes
bytefile list parameter. PR #9383 by @Viicos.v0.143.4Compare Source
Upgrades
v0.143.3Compare Source
Fixes
Docs
v0.143.2Compare Source
Fixes
Translations
Internal
v0.143.1Compare Source
Fixes
iter_route_contexts(). PR #16484 by @tiangolo.v0.143.0Compare Source
Automatic OpenTelemetry exporter setup is now opt-in. If you rely on FastAPI to configure exporters from
OTEL_*environment variables, setFASTAPI_OTEL_AUTO_CONFIGURE=trueor useFastAPI(telemetry={"auto_configure": True})to retain the previous behavior.Applications that configure their own providers and exporters require no changes. FastAPI Cloud enables automatic setup for you.
Breaking Changes
v0.142.4Compare Source
Fixes
v0.142.3Compare Source
Fixes
Docs
Translations
Internal
bump-pre-commit-hooksworkflow. PR #16463 by @YuriiMotov.gpt-6-astramodel for translations. PR #16453 by @YuriiMotov.v0.142.2Compare Source
Fixes
v0.142.1Compare Source
Fixes
v0.142.0Compare Source
Features
Refactors
Docs
Translations
Internal
setup-uvaction to10.0.1. PR #16249 by @YuriiMotov.commit_in_placeinput intranslate.yml. PR #16216 by @YuriiMotov.zizmor.ymlworkflow (main->master). PR #16178 by @YuriiMotov..cacheinbuild-docs.yml. PR #16156 by @YuriiMotov.v0.141.1Compare Source
Fixes
app.frontend(). PR #16105 by @tiangolo.Docs
FASTAPI_ENVin FastAPI CLI guide. PR #16104 by @tiangolo.v0.141.0Compare Source
Features
app.frontend(check_dir="auto"), to make local development more convenient withfastapi dev. PR #16102 by @tiangolo.v0.140.13Compare Source
Fixes
status_codebeing ignored for SSE and JSONL streaming endpoints. PR #15937 by @SAURABHSALVE.Docs
format_sse_eventdocstring rendering of\n\nterminator. PR #15613 by @AshNicolus.v0.140.12Compare Source
Fixes
format_sse_eventto comply with SSE spec. PR #15515 by @Zawwarsami16.v0.140.11Compare Source
Fixes
response_model_*params ignored for non-generator endpoints withIterable[..]return type. PR #15093 by @YuriiMotov.v0.140.10Compare Source
Fixes
Internal
v0.140.9Compare Source
Fixes
exclude_defaultsnot propagated to dict keys and values injsonable_encoder. PR #16043 by @MBGrao.Internal
v0.140.8Compare Source
Fixes
include_router(). PR #15077 by @alex-raw.v0.140.7Compare Source
Refactors
Internal
v0.140.6Compare Source
Refactors
v0.140.5Compare Source
Refactors
v0.140.4Compare Source
Refactors
v0.140.3Compare Source
Refactors
v0.140.2Compare Source
Refactors
Internal
v0.140.1Compare Source
Refactors
v0.140.0Compare Source
Refactors
Docs
Internal
v0.139.2Compare Source
Fixes
v0.139.1Compare Source
Fixes
/users/john.doe. PR #16011 by @tiangolo.Docs
skip_usersnot being applied. PR #15995 by @YuriiMotov.Translations
llm-prompt.mdfor Hindi. PR #15810 by @YuriiMotov.Internal
FASTAPI_LATEST_CHANGEStoken inbump-pre-commit-hooksworkflow. PR #15984 by @YuriiMotov.v0.139.0Compare Source
Features
app.frontend(), e.g. for automatic cookie authentication for the frontend. PR #15908 by @tiangolo.Translations
Internal
allow-unsafe-pr-checkout: true. PR #15876 by @YuriiMotov.v0.138.2Compare Source
Refactors
app.frontend()return 404 for methods other thanGETorHEADwith no static file matches. PR #15863 by @tiangolo.Internal
v0.138.1Compare Source
Refactors
Internal
v0.138.0Compare Source
Features
app.frontend("/", directory="dist")androuter.frontend("/", directory="dist"). PR #15800 by @tiangolo.Docs
app.frontend()instructions to Agent Library Skill. PR #15805 by @tiangolo.Translations
Internal
release-notes.mdfor typos. PR #15796 by @YuriiMotov.gpt-5.5model intranslate.py, specify-chatto avoid warnings. PR #15792 by @YuriiMotov.v0.137.2Compare Source
Features
iter_route_contexts()for advanced use cases that used to userouter.routes(e.g. Jupyverse). PR #15785 by @tiangolo.Translations
Internal
coverage.sh. PR #15772 by @tiangolo.v0.137.1Compare Source
Fixes
v0.137.0Compare Source
Breaking Changes
APIRouterandAPIRouteinstances. PR #15745 by @tiangolo.Unblocks ✨ SO MANY THINGS ✨
Before this,
router.include_router(other_router)would take each path operation fromother_routerand "clone" it, or recreate it from scratch.This would mean that in the end there was only one top level router, part of the app.
The way it is structured here is that there are a few additional classes to handle intermediate metadata for router and route inclusion. That way the information of "router X includes Y and Y includes Z" is stored somewhere, without affecting (recreating / clonning) the final route.
Non Objectives
Dependencies for 404: previously I intended to support dependencies that would be executed even for 404, but that would conflict with the fact that a router could not find a match, but the next router did find a match. Executing dependencies in the router that did not find a match would not make sense, they could consume the request, body, etc. This original idea was discarded.
Specific Breaking Changes
Now
router.routesis no longer a plain list ofAPIRouteobjects, it can contain these intermediate objects that can contain additional routers, forming a tree.Any logic that depended on iterating on the
router.routesdirectly would be affected, that logic cannot expect to be able to extract data from a plain list of routes, as it's no longer a plain list but a tree.Additionally, any logic that iterated on
router.routesto modify them would now also see these new objects, and would not see all the routes in the app.router.routesshould be considered an internal implementation detail, only passed around to the FastAPI functions that need it.Features
subrouterinmainroutercan be done before adding routes (path operations) tosubrouter, because now the the entire object is stored instead of copying the routes.Alpha Features
This is not documented yet, so it's not officially supported yet and could change in the future.
But, as
APIRouteandAPIRouterinstances are now preserved, they could be customized.APIRouterhas two new methods,.matches()and.handle(), counterpart to the existing ones inAPIRoute. With this a router could customize how it matches and handles requests. For example, it could match only requests that include some specific header, for example for handling versions in headers.Still, for now, consider this very experimental and potentially changing and breaking in the future.
Future Features Enabled
APIRoutesubclasses (undocumented, but alraedy works as desccribed above)APIRoutersubclasses (undocumented, but already works as described above)Docs
Annotatedin inline example indocs/en/docs/tutorial/body-multiple-params.md. PR #15591 by @TheArchons.docs/en/docs/tutorial/security/oauth2-jwt.md. PR #14781 by @zadevhub.Translations
Internal
changing_dirinstead ofCLIRunner.isolated_filesystemto set working dir. PR #15616 by @YuriiMotov.httpx2test dependency to avoid deprecation warning. PR #15603 by @YuriiMotov.v0.136.3Compare Source
Refactors
convert_underscores=True(the default). PR #15589 by @tiangolo.v0.136.1Compare Source
Upgrades
Internal
v0.136.0Compare Source
Upgrades
v0.135.4Compare Source
Refactors
@app.vibe()🤪. PR #15363 by @tiangolo.Internal
v0.135.3Compare Source
Features
@app.vibe(). PR #15280 by @tiangolo.Docs
client_secretin OAuth2 form docstrings. PR #14946 by @bysiber.Internal
lint.sh. PR #15136 by @svlandeg.v0.135.2Compare Source
Upgrades
pydantic >=2.9.0.and fix the test suite. PR #15139 by @svlandeg.Docs
pyproject.tomlwithentrypoint. PR #15075 by @tiangolo.target=_blankfor links in docs. PR #15063 by @tiangolo.max_digitsanddecimal_places. PR #14944 by @YuriiMotov.Translations
Internal
scripts/people.py. PR #15088 by @YuriiMotov.commit_in_placepassed via env variable intranslate.ymlworkflow. PR #15151 by @YuriiMotov.tyto precommit. PR #15091 by @svlandeg.v0.135.1Compare Source
Fixes
Docs
docs/en/docs/_llm-test.md. PR #15007 by @adityagiri3600.Internal
v0.135.0Compare Source
Features
v0.134.0Compare Source
Features
yield. PR #15022 by @tiangolo.>=0.40.0to>=0.46.0, as it's needed to properly unrwap and re-raise exceptions from exception groups.Docs
yield. PR #15023 by @tiangolo.awaitinStreamingResponsecode example to allow cancellation. PR #14681 by @casperdcl.docs_src/websocketstodocs_src/websockets_to avoid import errors. PR #14979 by @YuriiMotov.Internal
pytest-xdistandpytest-cov. PR #14992 by @YuriiMotov.v0.133.1Compare Source
Features
Internal
v0.133.0Compare Source
Upgrades
v0.132.1Compare Source
Refactors
Internal
benchmarkjob intestworkflow. PR #14974 by @YuriiMotov.v0.132.0Compare Source
Breaking Changes
strict_content_typechecking for JSON requests. PR #14978 by @tiangolo.Content-Typeheader with a valid JSON value, likeapplication/json, and rejects requests that don't.Content-Typeheader you can disable this withstrict_content_type=False.Internal
griffelibinstead ofgriffe. PR #14973 by @svlandeg.FastAPI Peopleworkflow. PR #14951 by @YuriiMotov.v0.131.0Compare Source
Breaking Changes
ORJSONResponseandUJSONResponse. PR #14964 by @tiangolo.v0.130.0Compare Source
Features
v0.129.2Compare Source
Internal
fastapi-slim. PR #14958 by @tiangolo.fastapi-slim, no more versions will be released, use only"fastapi[standard]"orfastapi. PR #14957 by @tiangolo.v0.129.1Compare Source
Fixes
"contentMediaType": "application/octet-stream"instead of"format": "binary". PR #14953 by @tiangolo.Docs
Translations
Internal
masterbranch and when run by scheduler. PR #14940 by @YuriiMotov.v0.129.0Compare Source
Breaking Changes
Refactors
Docs
Internal
v0.128.8Compare Source
Docs
docs/en/docs/tutorial/first-steps.md. PR #14708 by @SanjanaS10.Internal
fastapi-slim, deprecate it, and make it only depend onfastapi. PR #14894 by @tiangolo.v0.128.7Compare Source
Features
dictbyMappingonHTTPException.headers. PR #12997 by @rijenkii.Refactors
Docs
dfntag for definitions instead ofabbrin docs. PR #14744 by @YuriiMotov.Internal
abbranddfntags. PR #14747 by @YuriiMotov.testworkflow to run tests withinline-snapshot=review. PR #14876 by @YuriiMotov.v0.128.6Compare Source
Fixes
on_startupandon_shutdownparameters ofAPIRouter. PR #14873 by @YuriiMotov.Translations
Internal
v0.128.5Compare Source
Refactors
Internal
v0.128.4Compare Source
Refactors
create_model_field, better types forlenient_issubclass. PR #14860 by @tiangolo.Translations
Internal
v0.128.3Compare Source
Refactors
on_eventin FastAPI for compatibility with the next Starlette, while keeping backwards compatibility. PR #14851 by @tiangolo.Upgrades
starlette>=0.40.0,<1.0.0. PR #14853 by @tiangolo.Translations
Internal
fastapi[all]minimum dependencies:ujson >=5.8.0,orjson >=3.9.3. PR #14846 by @tiangolo.v0.128.2Compare Source
Features
TypeAliasType. PR #13920 by @cstruct.Responsetype hint as dependency annotation. PR #14794 by @jonathan-fulton.Fixes
Json[list[str]]type (issue #10997). PR #14616 by @mkanetsuna.Docs
advanced-dependencies.md. PR #14815 by @Rayyan-Oumlil.Translations
Internal
v0.128.1Compare Source
Features
viewportmeta tag to improve Swagger UI on mobile devices. PR #14777 by @Joab0.Fixes
ValidationErrorschema to includeinputandctx. PR #14791 by @jonathan-fulton.Authorizationheader credentials. PR #14786 by @WaveTheory1.anyOfrefs for app-level responses with specifiedcontentandmodelasUnion. PR #14463 by @DJMcoder.Refactors
IncExtype from Pydantic instead of duplicating it. PR #14641 by @mvanderlee.Docs
docs_src/app_testing/app_bcode example. PR #14573 by @timakaa.docs/en/docs/contributing.md. PR #14757 by @YuriiMotov.response_modelwhen possible. PR #14753 by @YuriiMotov.WSGIMiddlewarefroma2wsgiinstead of deprecatedfastapi.middleware.wsgi.WSGIMiddleware. PR #14756 by @YuriiMotov.Translations
ukdocumentation. PR #14795 by @roli2py.llm-prompt.mdfor Korean language. PR #14763 by @seuthootDev.Internal
uv.lockgets theinternallabel. PR #14759 by @svlandeg.v0.128.0Compare Source
Breaking Changes
pydantic.v1. PR #14609 by @tiangolo.Internal
v0.127.1Compare Source
Refactors
FastAPIDeprecationWarning. PR #14605 by @tiangolo.Docs
Translations
Internal
lintjob fromtestCI workflow. PR #14593 by @YuriiMotov.v0.127.0Compare Source
Breaking Changes
pydantic.v1. PR #14583 by @tiangolo.Translations
Internal
v0.126.0Compare Source
Upgrades
pydantic.v1. PR #14575 by @tiangolo.pydantic >=2.7.0.standarddependencies now includepydantic-settings >=2.0.0andpydantic-extra-types >=2.0.0.Docs
docs_src/python_types/tutorial005_py39.py. PR #14565 by @paras-verma7454.Translations
Internal
v0.125.0Compare Source
Breaking Changes
Refactors
Docs
Translations
Internal
markdown-include-variantsfrom 0.0.7 to 0.0.8. PR #14556 by @YuriiMotov.v0.124.4Compare Source
Fixes
v0.124.3Compare Source
Fixes
AnnotatedwithBody(). PR #14512 by @tiangolo.Refactors
Docs
Translations
Internal
v0.124.2Compare Source
Fixes
if TYPE_CHECKING, non-evaluated stringified annotations. PR #14485 by @tiangolo.v0.124.1Compare Source
Fixes
arbitrary_types_allowed=True. PR #14482 by @tiangolo.Docs
Internal
__annotations__. PR #14477 by @tiangolo.v0.124.0Compare Source
Features
Internal
scripts/mkdocs_hooks.py. PR #14457 by @yujiteshima.v0.123.10Compare Source
Fixes
__call__method. PR #14458 by @YuriiMotov.separate_input_output_schemas=Falsewithcomputed_field. PR #14453 by @YuriiMotov.v0.123.9Compare Source
Fixes
v0.123.8Compare Source
Fixes
v0.123.7Compare Source
Fixes
v0.123.6Compare Source
Fixes
v0.123.5Compare Source
Features
functools.partial(). PR #9753 by @lieryan.@functools.wraps()) used with forward references. PR #5077 by @lucaswiman.Fixes
Refactors
is_coroutinecheck to reuse internal supported variants (unwrap, check class). PR #14434 by @tiangolo.Translations
v0.123.4Compare Source
Fixes
separate_input_output_schemas=False. PR #13207 by @vgrafe.Docs
serversparameter. PR #14405 by @YuriiMotov.v0.123.3Compare Source
Fixes
serialize sequence valuewith Pydantic V2. PR #14297 by @YuriiMotov.v0.123.2Compare Source
Fixes
{type_}in FastAPIError. PR #14416 by @Just-Helpful.Formparameter list. PR #14303 by @YuriiMotov.Noneif that's the default), for compatibility with HTML forms. PR #13537 by @MarinPostma.Docs
pipin case ofNo module named piperror invirtual-environments.md. PR #14211 by @zadevhub.v0.123.1Compare Source
Fixes
TypeErrorwhen encoding a decimal with aNaNorInfinityvalue. PR #12935 by @kentwelcome.Internal
v0.123.0Compare Source
Fixes
v0.122.1Compare Source
Fixes
Docs
Internal
v0.122.0Compare Source
Fixes
401status code in security classes when credentials are missing. PR #13786 by @YuriiMotov.403status code, check the new docs about how to override the classes, to use the same old behavior: Use Old 403 Authentication Error Status Codes.Internal
lang-alllabel. PR #14213 by @YuriiMotov.latest-changesGitHub Action and pinactions/checkout@v5. PR #14403 by @svlandeg.add-permalinksandadd-permalinks-pagetoscripts/docs.py. PR #14033 by @YuriiMotov.v0.121.3Compare Source
0.121.3
Refactors
Depends()andSecurity()hashable, as a workaround for other tools interacting with these internal parts. PR #14372 by @tiangolo.Upgrades
0.51.0. PR #14282 by @musicinmybrain.Docs
v0.121.2Compare Source
Fixes
Docs
Translations
v0.121.1Compare Source
Fixes
Depends(func, scope='function')for top level (parameterless) dependencies. PR #14301 by @luzzodev.Docs
yield, noting the changes in 0.121.0, addingscope. PR #14287 by @tiangolo.Internal
v0.121.0Compare Source
Features
scope="request"for dependencies withyieldthat exit before the response is sent. PR #14262 by @tiangolo.yield- Early exit andscope.Internal
v0.120.4Compare Source
Fixes
v0.120.3Compare Source
Refactors
get_param_sub_dependant. PR #14255 by @tiangolo.Docs
v0.120.2Compare Source
Fixes
Internal
v0.120.1Compare Source
Upgrades
0.50.0. PR #14234 by @YuriiMotov.Internal
licenseandlicense-filestopyproject.toml, removeLicensefromclassifiers. PR #14230 by @YuriiMotov.v0.120.0Compare Source
There are no major nor breaking changes in this release. ☕️
The internal reference documentation now uses
annotated_doc.Docinstead oftyping_extensions.Doc, this adds a new (very small) dependency onannotated-doc, a package made just to provide thatDocdocumentation utility class.I would expect
typing_extensions.Docto be deprecated and then removed at some point fromtyping_extensions, for that reason there's the newannotated-docmicro-package. If you are curious about this, you can read more in the repo forannotated-doc.This new version
0.120.0only contains that transition to the new home package for that utility classDoc.Translations
Internal
typing_extensions.Doctoannotated_doc.Doc. PR #14222 by @tiangolo.v0.119.1Compare Source
Fixes
Docs
starlette.iobystarlette.devanduvicorn.orgbyuvicorn.dev. PR #14176 by @Kludex.Internal
waitinglabel inissue-manager. PR #14156 by @YuriiMotov.v0.119.0Compare Source
FastAPI now (temporarily) supports both Pydantic v2 models and
pydantic.v1models at the same time in the same app, to make it easier for any FastAPI apps still using Pydantic v1 to gradually but quickly migrate to Pydantic v2.Adding this feature was a big effort with the main objective of making it easier for the few applications still stuck in Pydantic v1 to migrate to Pydantic v2.
And with this, support for Pydantic v1 is now deprecated and will be removed from FastAPI in a future version soon.
Note: have in mind that the Pydantic team already stopped supporting Pydantic v1 for recent versions of Python, starting with Python 3.14.
You can read in the docs more about how to Migrate from Pydantic v1 to Pydantic v2.
Features
from pydantic.v1 import BaseModel, mixed Pydantic v1 and v2 models in the same app. PR #14168 by @tiangolo.v0.118.3Compare Source
Upgrades
v0.118.2Compare Source
Fixes
Internal
v0.118.1Compare Source
Upgrades
Docs
Translations
Internal
mkdocs_hooks.pyto addtitleto page's metadata (remove permalinks in social cards). PR #14125 by @YuriiMotov.v0.118.0Compare Source
0.118.0
Fixes
StreamingResponses with dependencies withyieldorUploadFiles, close after the response is done. PR #14099 by @tiangolo.Before FastAPI 0.118.0, if you used a dependency with
yield, it would run the exit code after the path operation function returned but right before sending the response.This change also meant that if you returned a
StreamingResponse, the exit code of the dependency withyieldwould have been already run.For example, if you had a database session in a dependency with
yield, theStreamingResponsewould not be able to use that session while streaming data because the session would have already been closed in the exit code afteryield.This behavior was reverted in 0.118.0, to make the exit code after
yieldbe executed after the response is sent.You can read more about it in the docs for Advanced Dependencies - Dependencies with
yield,HTTPException,exceptand Background Tasks. Including what you could do if you wanted to close a database session earlier, before returning the response to the client.Docs
tutorial/security/oauth2-jwt/to usepwdlibwith Argon2 instead ofpasslib. PR #13917 by @Neizvestnyj.Translations
Internal
v0.117.1Compare Source
Fixes
Fileis declared afterFormparameter. PR #11194 by @thomasleveil.v0.117.0Compare Source
Features
Noneas return type for bodiless responses. PR #9425 by @hofrob.typefield. PR #13639 by @sammasak.external_docsparameter toFastAPI. PR #13713 by @cmtoro.Fixes
default_factoryfor response model field with Pydantic V1. PR #9704 by @vvanglro.jsonable_encoderaltersjson_encodersof Pydantic v1 objects. PR #4972 by @aboubacs.allow_arbitrary_typeswhen only 1 argument is used on the API endpoint. PR #13694 by @rmawatson.inspect.getcoroutinefunction()can break testing withunittest.mock.patch(). PR #14022 by @secrett2633.Refactors
dependency-cachedict insolve_dependenciesonly ifNone(don't re-create if empty). PR #13689 by @bokshitsky.test_tutorial/test_header_params/test_tutorial003.py. PR #13864 by @Amogha-ark.httpxto>=0.23.0,<1.0.0. PR #14086 by @YuriiMotov.Docs
tutorial/cookie-params.md. PR #13510 by @Kludex.path-params-numeric-validations.mdfor languagesen,esanduk.. PR #14059 by @svlandeg.Translations
Internal
docs.py generate-readmecommand to remove permalinks from headers. PR #14055 by @YuriiMotov.v0.116.2Compare Source
Upgrades
Docs
--forwarded-allow-ips="*". PR #14028 by @tiangolo.dict()indocs/tutorial/body.md. PR #13906 by @jomkv.termynal.js. PR #13714 by @Ashish-Pandey62.urlfield in error responses in docs. PR #13655 by @Taoup.scopeclaim in line with the standard indocs_src/security/tutorial005.py. PR #11189 by @DurandA.docs/en/docs/advanced/generate-clients.md. PR #13793 by @mrlubos.Translations
docs/zh/docs/python-types.md. PR #13997 by @anfreshman.docs/pt/docs/async.md. PR #13863 by @EdmilsonRodrigues.docs/ja/docs/tutorial/body.md. PR #13927 by @KoyoMiyazaki.docs/fa/docs/environment-variables.md. PR #13923 by @Mohammad222PR.docs/fa/docs/python-types.md. PR #13524 by @Mohammad222PR.docs/pt/docs/project-generation.md. PR #13875 by @EdmilsonRodrigues.docs/fa/docs/async.md. PR #13541 by @Mohammad222PR.docs/bn/about/index.md. PR #13882 by @sajjadrahman56.Internal
mkdocs_hooksto handle headers with permalinks when building docs. PR #14025 by @tiangolo.mkdocs-macros-pluginfrom 1.3.7 to 1.3.9. PR #14003 by @YuriiMotov.pydantic/pydantic (pydantic)
v2.14.1Compare Source
GitHub release
The code released in v2.5.0 is functionally identical to that of v2.5.0b1.
What's Changed
Packaging
pyright==1.1.335by @Viicos in #8075New Features
ValidationErrorerrors by @adriangb in #7806__doc__argument increate_model()by @chris-spann in #7863regex_engineflag - meaning you can use with the Rust or Python regex libraries in constraints by @utkini in #7768ComputedFieldInfoby @alexmojaki in #7889ruffformatter by @Luca-Blight in #7930validation_error_causeto config by @zakstucke in #7626CallableDiscriminatorandTagby @dmontagu in #7983CallableDiscriminatorrenamed toDiscriminatorby @dmontagu in #8047examplesandjson_schema_extrato@computed_fieldby @alexmojaki in #8013JsonValuetype by @dmontagu in #7998stras argument toDiscriminatorby @dmontagu in #8047SchemaSerializer.__reduce__method to enable pickle serialization by @edoakes in pydantic/pydantic-core#1006Changes
ultra_strictwith new smart union implementation, the way unions are validated has changed significantly to improve performance and correctness, we have worked hard to absolutely minimise the number of cases where behaviour has changed, see the PR for details - by @davidhewitt in pydantic/pydantic-core#867extra='allow'by @sydney-runkle in #7683Enumtypes with no cases by @sydney-runkle in #7927GenericbeforeBaseModelby @alexmojaki in #7891Performance
jiterby @samuelcolvin in pydantic/pydantic-core#974__getattr__for all package imports, improve import time by @samuelcolvin in #7947Fixes
mypyissue with subclasses ofRootModelby @sydney-runkle in #7677FieldInfowhen a forward ref gets evaluated by @dmontagu in #7698SecretStrfrom JSON (regression in v2.4) by @sydney-runkle in #7729defer_buildbehavior withTypeAdapterby @sydney-runkle in #7736mypyversions by @dmontagu in #7742TypeVarhandling when default is not set by @pmmmwh in #7719strictonEnumtype fields by @sydney-runkle in #7761weakref.refinstead of subclassing to fixcloudpickleserialization by @edoakes in #7780model_post_initin subclasses by @alexmojaki in #7775json_schema_extraby @alexmojaki in #7803strictspecification forUUIDtypes by @sydney-runkle in #7865pydantic.Field(kw_only=True)with inherited dataclasses by @PrettyWood in #7827validate_calldecorator for methods in classes with__slots__by @sydney-runkle in #7883dataclasses.fielddefault by @hramezani in #7898importlib_metadataon python 3.7 by @sydney-runkle in #7904|operator (Union) in PydanticRecursiveRef by @alexmojaki in #7892display_as_typeforTypeAliasTypein python 3.12 by @dmontagu in #7929NotRequiredgenerics inTypedDictby @sydney-runkle in #7932TypeAliasTypespecifications produce different schema definitions by @alexdrydew in #7893PrivateAttris passed fromAnnotateddefault position by @tabassco in #8004classmethodinstead ofclassmethod[Any, Any, Any]by @Mr-Pepe in #7979Optionalfield withvalidate_defaultonly performing one field validation by @sydney-runkle in pydantic/pydantic-core#1002definition-refbug withDictkeys by @sydney-runkle in pydantic/pydantic-core#1014booltypes withcoerce_numbers_to_str=Trueby @sydney-runkle in pydantic/pydantic-core#1017NaNin float and decimal constraints by @davidhewitt in pydantic/pydantic-core#1037lax_strandlax_intsupport for enum values not inherited from str/int by @michaelhly in pydantic/pydantic-core#1015UnionofListtypes by @sydney-runkle in pydantic/pydantic-core#1039max_digitsanddecimalsto pass if normalized or non-normalized input is valid by @sydney-runkle in pydantic/pydantic-core#1049ValidationErrormessages by @Iipin in pydantic/pydantic-core#1050'-'asdatetimeinput by @davidhewitt in pydantic/speedate#52 & pydantic/pydantic-core#1060New Contributors
pydanticpydantic-corev2.14.0Compare Source
GitHub release
What's Changed
The highlights of the v2.14 release are available in the blog post.
Several minor changes (considered non-breaking changes according to our versioning policy)
are also included in this release. Make sure to look into them before upgrading.
This release drops support for Python 3.9 and adds support for Python 3.15.
New Features
multiple_ofconstraint infractionandtimedeltacore schemas by @Viicos in #13873__namespace__parameter tocreate_model()by @Viicos in #13895Changes
ordered-dictcore schema by @Viicos in #13796countercore schema by @Viicos in #13824model_configattribute by @Viicos in #13825NameEmailvalidation by @Viicos in #13897Fixes
string_sub_typeunused error code by @Viicos in #13821OverflowErrorduringByteSizevalidation by @Viicos in #13850multiple_ofconstraints to be positive by @Viicos in #13862TypeErrorgracefully during docstring extraction by @Viicos in #13874TypedDicts in JSON Schema by @Viicos in #13891ser_json_timedeltato all datetime types in serialization inference by @Viicos in #13892initandkw_only=FalsefromField()to stdlib dataclass fields by @Viicos in #13898ZoneInfovalidation by @Viicos in #13912Decimalvalidation by @Viicos in #13940Fractionvalidation by @Viicos in #13944New Contributors
v2.13.5: 2026-08-28Compare Source
v2.13.5 (2026-08-28)
What's Changed
Fixes
pydantic-corestruct fields by @Viicos in #13624pydantic-coreforGeneralFieldsSerializerby @Viicos in #13629v2.13.4Compare Source
GitHub release
What's Changed
Packaging
pydantic-corelinker flags on macOS by @washingtoneg and @Viicos in #13147Fixes
RootModelcore metadata by @Viicos in #13129v2.13.3Compare Source
GitHub release
What's Changed
Fixes
AttributeErrorsubclasses withfrom_attributesby @Viicos in #13096v2.13.2Compare Source
GitHub release
What's Changed
Fixes
ValidationInfo.field_namemissing withmodel_validate_json()by @Viicos in #13084v2.13.1Compare Source
GitHub release
What's Changed
Fixes
ValidationInfo.datamissing withmodel_validate_json()by @davidhewitt in #13079v2.13.0Compare Source
GitHub release
The highlights of the v2.13 release are available in the blog post.
Several minor changes (considered non-breaking changes according to our versioning policy)
are also included in this release. Make sure to look into them before upgrading.
This release contains the updated
pydantic.v1namespace, matching version 1.10.26 which includes support for Python 3.14.What's Changed
See the beta releases for all changes sinces 2.12.
New Features
Changes
Fixes
Anywhen synthesizing_build_sourcesforBaseSettings.__init__()signature in the mypy plugin by @Viicos in #13049extraconfiguration by @Viicos in #13062Packaging
New Contributors
v2.12.5Compare Source
GitHub release
This is the fifth 2.12 patch release, addressing an issue with the
MISSINGsentinel and providing several documentation improvements.The next 2.13 minor release will be published in a couple weeks, and will include a new polymorphic serialization feature addressing
the remaining unexpected changes to the serialize as any behavior.
model_construct()on a model withMISSINGas a default value by @ornariece in #12522.v2.12.4Compare Source
GitHub release
This is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the
build()methodof the
AnyUrland Dsn types.This patch release also fixes an issue with the serialization of IP address types, when
serialize_as_anyis used. The next patch releasewill try to address the remaining issues with serialize as any behavior by introducing a new polymorphic serialization feature, that
should be used in most cases in place of serialize as any.
Fix issue with forward references in parent
TypedDictclasses by @Viicos in #12427.This issue is only relevant on Python 3.14 and greater.
Exclude fields with
exclude_iffrom JSON Schema required fields by @Viicos in #12430Revert URL percent-encoding of credentials in the
build()methodof the
AnyUrland Dsn types by @davidhewitt inpydantic-core#1833.
This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include
an opt-in option to percent-encode components of the URL.
Add type inference for IP address types by @davidhewitt in pydantic-core#1868.
The 2.12 changes to the
serialize_as_anybehavior made it so that IP address types could not properly serialize to JSON.Avoid getting default values from defaultdict by @davidhewitt in pydantic-core#1853.
This fixes a subtle regression in the validation behavior of the
collections.defaultdicttype.
Fix issue with field serializers on nested typed dictionaries by @davidhewitt in pydantic-core#1879.
Add more
pydantic-corebuilds for the three-threaded version of Python 3.14 by @davidhewitt in pydantic-core#1864.v2.12.3Compare Source
GitHub release
What's Changed
This is the third 2.12 patch release, fixing issues related to the
FieldInfoclass, and reverting a change to the supportedafter model validator function signatures.
Starting in 2.12.0, using class methods for after model validators raised an error, but the error wasn't raised concistently. We decided
to emit a deprecation warning instead.
FieldInfo.asdict()method, improve documentation aroundFieldInfoby @Viicos in #12411.This also add back support for mutations on
FieldInfoclasses, that are reused asAnnotatedmetadata. However, note that this is stillnot a supported pattern. Instead, please refer to the added example in the documentation.
The blog post section on changes was also updated to document the changes related to
serialize_as_any.v2.12.2Compare Source
GitHub release
What's Changed
Fixes
pydantic-coreversion, as a corrupted CPython 3.10manylinux2014_aarch64wheel got uploaded (pydantic-core#1843).v2.12.1Compare Source
GitHub release
What's Changed
This is the first 2.12 patch release, addressing most (but not all yet) regressions from the initial 2.12.0 release.
Fixes
Noneis converted asNoneTypein Python 3.14 by @Viicos in #12370ValidationInfofor validation of default value by @Viicos in pydantic-core#1826MultiHostUrlbuilder by @willswire in pydantic-core#1829serialize_as_anyserialization flag by @davidhewitt in pydantic-core#1829RootModelserialization issues by @davidhewitt in pydantic-core#1836New Contributors
v2.12.0Compare Source
GitHub release
This is the final 2.12 release. It features the work of 20 external contributors and provides useful new features, along with initial Python 3.14 support.
Several minor changes (considered non-breaking changes according to our versioning policy)
are also included in this release. Make sure to look into them before upgrading.
Note that Pydantic V1 is not compatible with Python 3.14 and greater.
What's Changed
See the beta releases for all changes sinces 2.11.
New Features
extraparameter to the validate functions by @anvilpete in #12233exclude_computed_fieldsserialization option by @Viicos in #12334preverse_empty_pathURL options by @Viicos in #12336union_formatparameter to JSON Schema generation by @Viicos in #12147__qualname__parameter forcreate_modelby @Atry in #12001Fixes
TypeAdapterby @Viicos in #12324Anyfor context type annotation inTypeAdapterby @inducer in #12279FieldInfoinpydantic.fields.__all__by @Viicos in #12339validation_aliasin@validate_callby @Viicos in #12340Anyas context annotation in plugin API by @Viicos in #12341stacklevelin warnings when possible by @Viicos in #12342Packaging
New Contributors
v2.11.10Compare Source
GitHub release
What's Changed
Fixes
v2.11.9Compare Source
GitHub release
What's Changed
Fixes
v2.11.8Compare Source
GitHub release
What's Changed
Fixes
pydantic/pydantic-settings (pydantic-settings)
v2.16.2Compare Source
v2.16.1Compare Source
Highlights
This patch release fixes two CLI regressions introduced in 2.16.0.
Bug fixes
CLI
CliPositionalArg[tuple[int, int]]andNamedTuples are single-valued again (#1069). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with aSettingsErroror put the wrong argument into the tuple. Variable-length tuples (tuple[int, ...]and bareTuple) are still variadic.type ListOfDict = list[dict[str, int]], accepts a JSON list again (#1049). Since 2.16.0,--xx '[{"a":1},{"b":2}]'was merged into the single dict{"a": 1, "b": 2}and failed validation.All changes (including dependency bumps and internal maintenance)
What's Changed
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1
v2.16.0Compare Source
Highlights
Breaking changes and behavior changes
tomlifallback is gone in favor of stdlibtomllib; thetomlextra is kept as an empty extra sopip install pydantic-settings[toml]keeps working.python-dotenv>=1.2.2is now required (#971) to pick up the fix for CVE-2026-28684.validate_by_alias=False(#1033). Env vars, secrets, CLI flags and defaults now use only field names, matching pydantic. An env var named after the alias is now ignored instead of raisingextra_forbidden, and the CLI exposes--applerather than--pomo.validation_aliastakes precedence overalias(#1038). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists thevalidation_aliasflag first, andCliApp.serializeemits it.case_sensitive=False, args after--and those captured byCliUnknownArgskeep their case (-Xmx4Gno longer becomes-xmx4g). Unrecognized options are now reported as typed (--NOPEinstead of--nope).json_file_encoding/yaml_file_encodingstill override it.nested_model_default_partial_update=True: the default is only dropped when the incoming value selects a different union member.New features
CliApp.runandvalidate_by_alias=Falsehandling; both are fixed.Settings.settings_cached()andSettings.settings_clear_cache()(#952). These give you a process-local singleton per settings class without hand-rollinglru_cachewrappers. Calling the class directly still builds a fresh instance.AWSSystemsManagerSettingsSource(#941). It recursively reads every parameter under anssm_path, with/mapping onto nested models. Install it with the newaws-systems-managerextra.env_file_depth(#940) lets a relativeenv_filebe found in parent directories, mirroringpyproject_toml_depth. This is useful when scripts run from a subdirectory of a monorepo. It defaults to0, which keeps the current behavior.CliVariadicArgfor named variadic options (#949, #958). It accepts--param a b cin addition to repeated--param a --param b. Required fields need at least one value.Bug fixes
CLI
CliApp.serializeoutput now round-trips throughCliApp.runfor enums, tuples, dates andDecimals (#988), explicitNonevalues (#981), empty containers (#1008),CliVariadicArgvalues (#976) and populatedCliUnknownArgsfields, which previously raisedIndexError(#992).--items []) now give an empty list instead of[''](#994).frozenset,MutableSequenceand other collection subtypes are now treated as repeatable/variadic options (#972), and so are named collection type aliases such asTypeAliasType('Addrs', list[IPvAnyAddress])(#1032).cli_exit_on_error=Falseis now honored inCliSubCommandparsers, which raiseSettingsErrorinstead of exiting (#977).CliSubCommandaliases keep their case withcase_sensitive=False(#989).CliUnknownArgsfield now receives only its own subcommand's leftover args (#1004).CliApp.format_helpno longer crashes whencli_prefixis set inmodel_config(#945).Type aliases and parsing
TypeAliasType('V', list[int] | str)) now decode like their inline equivalents in env and dotenv sources, including underOptional,Annotatedand custom validation aliases (#1006, #1030, #1041).Annotatedtype alias no longer mutates sharedFieldInfometadata, which made validators run twice on subclasses or aftermodel_rebuild()(#979).AliasPath('SOME_KEY')no longer tries to JSON-decode plain string values (#980).collections.abc.Set/MutableSet/typing.AbstractSetfields now JSON-decode env values (#973).typing.Dictfield withenv_nested_delimiterno longer raisesIndexError, which was a regression in 2.13.0 (#1009).Dotenv, secrets and config files
extra='allow', a non-lowercaseenv_prefixis now stripped from dotenv extras (#959, #968).secrets_case_sensitive=Trueis now honored on Windows (#1001).~paths are now expanded when checking that the file exists (#1034), and an explicittoml_table_header=()now overrides the model config to read the file root (#1027).Cloud sources
env_parse_none_str(#1019, #1040).dash_to_underscore=Truenow works for nested model fields (#1025).NestedSecretsSettingsSourcenow validates its specific constructor arguments (#975).DotenvFilteringis exported frompydantic_settings.sources.types(#944).Documentation
strict,extra,context) passed tomodel_validate()are not applied toBaseSettings, and give a workaround (#1017).extra='forbid'doesn't reject misspelled top-level env vars (#986).populate_by_name(#933), and add a nested model example forenv_prefix_target(#953).All changes (including dependency bumps and internal maintenance)
What's Changed
NestedSecretsSettingsSourcespecific arguments by @makukha in https://github.com/pydantic/pydantic-settings/pull/975CliApp.serializeoutput parseable for enum and non-JSON values by @SulimanAbdulrazzaq in https://github.com/pydantic/pydantic-settings/pull/988CliApp.serializefor models withCliUnknownArgsfields by @truecallerabreham in https://github.com/pydantic/pydantic-settings/pull/992secrets_case_sensitiveon Windows by overriding_load_env_varsby @hramezani in https://github.com/pydantic/pydantic-settings/pull/1001samuelcolvin/check-python-versionaction to v5.1 by @Viicos in https://github.com/pydantic/pydantic-settings/pull/1014validate_by_alias=Falseon pydantic 2.14 by @maharanay22 in https://github.com/pydantic/pydantic-settings/pull/1022validate_by_alias=Falseby @hramezani in https://github.com/pydantic/pydantic-settings/pull/1033New Contributors
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.0
v2.15.0Compare Source
Highlights
Behavior changes
case_sensitivenow applies to init kwargs and config-file sources (#900).InitSettingsSourceand the JSON/TOML/YAML config sources previously ignoredcase_sensitive. Since it defaults toFalse, case-insensitive matching is now the default for these sources — e.g.Settings(TeSt=...)now populates atestfield where it previously did not. Nested keys are still matched case-sensitively.IncompleteFieldDefinitionWarningtelling you to callmodel_rebuild(). If you havefilterwarnings = errorconfigured, this may surface as a new failure.ValidationError(#926) instead of a less specific error.New features
cli_show_env_vars=True(#860), so generated--helpoutput doubles as configuration documentation.PYDANTIC_SETTINGS_DEBUGfor debugging settings resolution (#906, #913). Set it to a truthy value withDEBUGlogging enabled to see each source's contribution in priority order, which source won for each value, and whichenv_file/secret files were probed, loaded, or skipped — the long-standing "why isn't my.envbeing picked up?" question.toml_table_headerfor regular TOML files (#882, #886, #887), letting you root settings at a nested table in any TOML file, not justpyproject.toml.Traversablesupport for JSON/TOML/YAML file sources (#902), so you can load config packaged inside a distribution — including files inside a zip or wheel — viaimportlib.resources.files(...)without casting toPath.project_idcan come from an earlier settings source (#878), rather than only from the constructor orGOOGLE_CLOUD_PROJECT.Bug fixes
case_sensitive=True(#894). Windows upper-casesos.environkeys, so fields raisedField requiredinstead of picking up their values.AliasPathon nested model fields not JSON-decoding env values (#898).dbx_tokenbeing swallowed by adb: dictfield.nested_model_default_partial_update=Truecorrupting discriminated unions (#876).Secretsubclasses crashing when loaded from the environment (#920).Optional[Annotated[MyEnum, ...]]withenv_parse_enums=True(#910).yaml_config_sectionnow falls back to defaults instead of raisingAttributeError: 'NoneType' object has no attribute 'keys'(#914).NestedSecretsSettingsSourceno longer follows symlinks pointing outsidesecrets_dir(#889).list_secretscall whencase_sensitive=True(#862), lowering the required IAM permissions to justroles/secretmanager.secretAccessor.types-boto3[secretsmanager]is no longer required at runtime (#880).Documentation
All changes (including dependency bumps and internal maintenance)
What's Changed
New Contributors
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.15.0
v2.14.2Compare Source
What's Changed
This is a security patch release.
NestedSecretsSettingsSourcefrom following symlinks outsidesecrets_dirby @hramezani in #889Security
Fixes GHSA-4xgf-cpjx-pc3j:
NestedSecretsSettingsSourcewithsecrets_nested_subdir=Truecould follow a symbolic link insidesecrets_dirpointing outside it, reading out-of-tree files into settings values and bypassing thesecrets_dir_max_sizecap. Affected versions:>= 2.12.0, < 2.14.2.Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2
v2.14.1Compare Source
What's Changed
clsconflicting with classmethod parameter by @hramezani in #858Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1
v2.14.0Compare Source
What's Changed
Literal[numeric Enum]coercion for CLI and env vars by @m9810223 in #811boto3-stubstotypes-boto3by @hramezani in #831BaseSettings.__init__()by @Viicos in #842cli_ignore_unknown_args=Truenot working on subcommands by @hramezani in #844python -OOby falling back tojson_schema_extraby @hramezani in #843New Contributors
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0
v2.13.1Compare Source
What's Changed
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.13.0...v2.13.1
v2.13.0Compare Source
What's Changed
Nonefor inaccessible GCP Secret Manager secrets by @zaphod72 in #712NoDecodeby @tselepakis in #695NAMEenvironment variable in WSL by @kzrnm in #747(default: …)in the help message forCliToggleFlagby @kzrnm in #740snake_case_conversionwithenv_prefixfor Azure Key Vault source by @cstarkers in #762New Contributors
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.12.0...v2.13.0
v2.12.0Compare Source
What's Changed
New Contributors
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.11.0...v2.12.0
v2.11.0Compare Source
What's Changed
CliSettingsSource.__init__. by @trygve-baerland in #656InitSettingsSourceresolution deterministic by @enrico-stauss in #681New Contributors
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/2.10.1...v2.11.0
Kludex/python-multipart (python-multipart)
v0.0.32Compare Source
v0.0.31Compare Source
Content-Lengthis non-negative inparse_form#297.v0.0.30Compare Source
application/x-www-form-urlencodedbodies per the WHATWG URL standard, treating only&as a field separator #290.name*,filename*) inparse_options_header, keeping the plain parameter authoritative per RFC 7578 §4.2 #291.v0.0.29Compare Source
parse_options_header#270.v0.0.28Compare Source
bytes.find#281.v0.0.27Compare Source
v0.0.26Compare Source
v0.0.25Compare Source
File#143.FormParserclasses #257.UPLOAD_DELETE_TMPtoFormParserconfig #254.field_endfor trailing bare field names on finalize #230.v0.0.24Compare Source
chunk_sizeinparse_form()#244.v0.0.23Compare Source
trust_x_headersparameter andX-File-Namefallback #196.QuerystringParser._internal_write#229.__init__.py#227.v0.0.22Compare Source
File9433f4b.v0.0.21Compare Source
Kludex/uvicorn (uvicorn)
v0.54.0: Version 0.54.0Compare Source
📨 Send metadata after the response body
uvicorn0.54.0 adds response trailers and103 Early Hintsto its experimental HTTP/2 implementation throughzttp.http.response.trailersextension lets applications send metadata, such as checksums, after the response body. Clients must sendTE: trailersto receive them. Multiple trailer messages are combined before completing the response.--http zttp --http2. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.💡 Hint at resources before the final response
103 Early Hintsover HTTP/2 (#3137). Applications can use the ASGIhttp.response.early_hintextension to send resource hints before the final response. Each supplied link becomes a separateLinkheader.Full changelog: 0.53.0...0.54.0
v0.53.0: Version 0.53.0Compare Source
🌐 Opt-in HTTP/2 support
uvicorn0.53.0 adds experimental HTTP/2 throughzttp, alongside a newzuvloopintegration and connection-handling improvements.zttp(#2982, #3101). Installzttp, then enable HTTP/2 with--http zttp --http2. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.⚙️ More event loop choice
zuvloop(#3104). Installzuvloopseparately and select it explicitly with--loop zuvloopon CPython 3.14 or newer.🛡️ More reliable connections and proxies
Connection: closetoken lists (#3103). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.FORWARDED_ALLOW_IPSvalue now includes::1.Full changelog: 0.52.4...0.53.0
v0.52.4: Version 0.52.4Compare Source
Fixed
Dateheaders from accepted WebSocket handshakes withwebsockets-sansio(#3078)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4
v0.52.3: Version 0.52.3Compare Source
Changed
zttpto 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (#3067)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3
v0.52.2: Version 0.52.2Compare Source
Fixed
zttpto 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (#3063)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2
v0.52.1: Version 0.52.1Compare Source
Fixed
websockets-sansioandwsprotoimplementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (#3053)websockets-sansioimplementation, preventing data truncation on server-initiated closes with large in-flight payloads (#3048)Content-TypeandContent-Lengthheaders from WebSocket denial responses on thewebsockets-sansioimplementation, and deliver non-UTF-8 denial bodies intact (#3041)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1
v0.52.0: Version 0.52.0Compare Source
This release adds an experimental HTTP/1.1 implementation backed by zttp, a sans-IO HTTP parser I've been developing on the side: a core written in Zig, with bindings to Python. It has been running under a fuzzer for some weeks now, and has been through multiple rounds of security auditing.
It is still experimental, so don't put it in front of production traffic yet. Try it with
--http zttp, and please send any feedback to the issue tracker.Added
zttpHTTP/1.1 implementation, selectable with--http zttp(#2979)Fixed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0
v0.51.0: Version 0.51.0Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0
v0.50.2: Version 0.50.2Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.1...0.50.2
v0.50.1: Version 0.50.1Compare Source
What's Changed
Sec-WebSocket-Protocolvalues in the websockets-sansio implementation by @Aayush7352 in #3019New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1
v0.50.0: Version 0.50.0Compare Source
What's Changed
asgiscope sub-dict per connection by @Kludex in #2976asgiscope dict per request by @Kludex in #2977autoto websockets-sansio by @Kludex in #2985Full Changelog: https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0
v0.49.0: Version 0.49.0Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0
v0.48.0: Version 0.48.0Compare Source
What's Changed
ssl_cipherstoNoneand use OpenSSL defaults by @Kludex in #2940ProxyHeadersMiddlewareby @Kludex in #2944Full Changelog: https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0
v0.47.0: Version 0.47.0Compare Source
What's Changed
ssl_context_factoryfor customSSLContextconfiguration by @Kludex in #2920fd=0as a valid file descriptor with reload/workers by @eltoder in #2927Full Changelog: https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0
v0.46.0: Version 0.46.0Compare Source
What's Changed
ws_max_sizeinwsprotoimplementation by @Kludex in #2915ws_ping_intervalandws_ping_timeoutinwsprotoimplementation by @Kludex in #2916bytearrayfor incoming WebSocket message buffer in websockets-sansio by @Kludex in #2917Full Changelog: https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0
v0.45.0: Version 0.45.0Compare Source
What's Changed
os.PathLikeforlog_configby @Kludex in #2905log_levelstrings case-insensitively by @Kludex in #2907ImportErrorwhen PyYAML is missing for YAML log config by @Kludex in #2906--reset-contextvarsflag to isolate ASGI request context by @Kludex in #2912http.disconnecton server shutdown for streaming responses" (#2829) by @Kludex in #2913New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0
v0.44.0: Version 0.44.0Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0
v0.43.0: Version 0.43.0Compare Source
Changed
http.disconnectASGIreceive()event on server shutting down for streaming responses (#2829)contextparameter forcreate_taskon Python 3.11+ (#2859)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0
v0.42.0: Version 0.42.0Compare Source
Changed
bytearrayfor request body accumulation to avoid O(n^2) allocation on fragmented bodies (#2845)Fixed
HEADER_REregex (#2824)New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0
v0.41.0: Version 0.41.0Compare Source
Added
--limit-max-requests-jitterto stagger worker restarts (#2707)scope["server"](#2561)Changed
LifespanOn.error_occuredtoerror_occurred(#2776)Fixed
should_exitis set during startup (#2812)New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.40.0...0.41.0
v0.40.0: Version 0.40.0Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.39.0...0.40.0
v0.39.0: Version 0.39.0Compare Source
What's Changed
New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.38.0...0.39.0
v0.38.0: Version 0.38.0Compare Source
What's Changed
New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.37.0...0.38.0
v0.37.0: Version 0.37.0Compare Source
What's Changed
--timeout-worker-healthchecksetting by @Kludex in #2711os.PathLike[str]type tossl_ca_certsby @rnv812 in #2676New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.36.1...0.37.0
v0.36.1: Version 0.36.1Compare Source
What's Changed
Config.setup_event_loop()by @Kludex in #2709Full Changelog: https://github.com/Kludex/uvicorn/compare/0.36.0...0.36.1
v0.36.0: Version 0.36.0Compare Source
Added
--http,--wsand--loopby @Kludex in #2658New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.35.0...0.36.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.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate CLI.
2418a29ba7tod97fe7dba5d97fe7dba5toad9e6faaf1ad9e6faaf1to15177412891517741289to493ff06dbc493ff06dbcto5f6cb7b1835f6cb7b183tof22d8d4d44f22d8d4d44to1efb0d13a31efb0d13a3to45ffda12cf45ffda12cftof610418b4ef610418b4eto3ebb1b335b3ebb1b335btod0f24e2cead0f24e2ceato5df7c760435df7c76043to2973c884492973c88449to4e27367eac4e27367eacto8087bce8c18087bce8c1to18fc4932faView command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.