Update all non-major dependencies #2

Open
renovate-bot wants to merge 1 commit from renovate/all-minor-patch into main
Collaborator

This PR contains the following updates:

Package Change Age Confidence Type Update
PyJWT ==2.10.1 → ==2.15.1 age confidence minor
fastapi (changelog) ==0.116.1 → ==0.162.0 age confidence minor
pydantic (changelog) ==2.11.7 → ==2.14.1 age confidence minor
pydantic-settings (changelog) ==2.10.1 → ==2.16.2 age confidence minor
python (source) 3.12-alpine → 3.15-alpine age confidence final minor
python-multipart (changelog) ==0.0.20 → ==0.0.32 age confidence patch
uvicorn (changelog) ==0.35.0 → ==0.54.0 age confidence minor

Release Notes

jpadilla/pyjwt (PyJWT)

v2.15.1

Compare Source

Changed


- Add public ``jwt.decode`` regression coverage for AWS ALB-style padded
  ES256 tokens, including rejection of tampered payloads and signatures,
  in `#&#8203;1211 <https://github.com/jpadilla/pyjwt/pull/1211>`__.

`v2.15.1 <https://github.com/jpadilla/pyjwt/compare/2.15.0...2.15.1>`__
-----------------------------------------------------------------------

Fixed
~~~~~

- Accept trailing Base64URL ``=`` padding when decoding JWS segments, so
  tokens issued by AWS ALB and similar systems verify instead of raising
  ``DecodeError: Invalid crypto padding``. Non-alphabet junk such as
  ``!!!!`` remains rejected (`#&#8203;1209 <https://github.com/jpadilla/pyjwt/issues/1209>`__).

`v2.15.0 <https://github.com/jpadilla/pyjwt/compare/2.14.0...2.15.0>`__
-----------------------------------------------------------------------

Security
  • Wrap recursion errors from deeply nested JWT payloads in DecodeError
    instead of exposing a raw RecursionError.

Added


- Support Python 3.15 by @kytta in `#&#8203;1202 <https://github.com/jpadilla/pyjwt/pull/1202>`__

Changed
  • JWKSetCache now stores the parsed PyJWKSet rather than the raw JWKS
    payload, so a cache hit no longer re-parses every key. JWKSetCache.put()
    accepts either form and raises PyJWKSetError for anything else. As a
    result, PyJWKClient.get_jwk_set() returns the same PyJWKSet instance
    for as long as it stays cached, rather than a freshly built one per call in
    #&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>__
  • PyJWKClient.fetch_data() now raises
    PyJWKClientError("The JWKS endpoint did not return a JSON object") when
    the endpoint response is not a JSON object, instead of returning it for
    get_jwk_set() to reject. Callers reaching the JWKS through
    get_jwk_set() see the same error as before in
    #&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>__

Fixed


- Return cached ``PyJWKSet`` values from ``PyJWKClient.get_jwk_set()`` instead
  of raising ``PyJWKClientError("The JWKS endpoint did not return a JSON
  object")``. ``JWKSetCache.put()`` documents ``PyJWKSet`` as the cached value,
  so callers pre-populating the cache to avoid a network round-trip could not
  read it back in `#&#8203;914 <https://github.com/jpadilla/pyjwt/issues/914>`__ and
  `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`__
- ``PyJWKClient.get_jwk_set()`` now caches the key set it returns, so a
  ``fetch_data()`` override that filters or transforms the JWKS is no longer
  undone by the next cache hit in
  `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`__
- Raise the documented ``PyJWTError`` subclass instead of leaking a
  ``TypeError`` when the ``exp``, ``nbf``, or ``iat`` claim decodes to a
  non-numeric, non-string value such as a list, dict, or ``null``.
- Reject OKP JWK private keys when their public ``x`` component does not
  match the private ``d`` component.
- Treat malformed JWK Set members as unusable keys rather than letting
  ``AttributeError`` or ``TypeError`` escape ``PyJWKSet``. A member that is not
  a JSON object is skipped, a key whose components have the wrong type raises
  ``InvalidKeyError`` and is skipped, and a set left with no usable keys raises
  ``PyJWKSetError``. A single bad entry no longer fails an otherwise usable
  JWK Set in `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`__
- Wrap ``http.client.HTTPException`` (e.g. ``IncompleteRead`` from a
  truncated response) in ``PyJWKClient.fetch_data`` as
  ``PyJWKClientConnectionError``, matching the other network failure
  modes the method already documents.

`v2.14.0 <https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0>`__
-----------------------------------------------------------------------

Security
  • Harden HMAC key validation against public-key material supplied as JWK,
    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>
    .
  • Reject automatic redirects when PyJWKClient fetches a JWKS, preventing
    redirected destinations from being treated as trusted key sources. See
    GHSA-9v7f-9g4p-ffgj <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj>__.
  • Limit repeated JWKS refreshes caused by unknown key IDs while preserving
    normal key-rotation behavior. See
    GHSA-2gx3-rcp4-g85q <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q>__.
  • Handle deeply nested and malformed JWS/JWK input without uncaught recursion
    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>__.
  • Stop mutating the caller-supplied options mapping during decode
    when verify_signature is false, so a mapping reused across a
    signature-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>__.
  • Enforce compact JWS encoding rules during decoding. See
    GHSA-hxm8-2xgr-2p9m <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m>__.
  • Reject detached-payload arguments for attached JWS inputs. Thanks to @xclow3n <https://github.com/xclow3n>__ for reporting this behavior; fixed in commit
    37b54877 <https://github.com/jpadilla/pyjwt/commit/37b54877bf7bea67e8149130e96929e3ec798122>__.

Fixed


- Apply HMAC key validation consistently when keys are loaded through
  ``PyJWK`` and ``PyJWKClient``. See
  `GHSA-pxh4-856f-4h89 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89>`__.
- Reject empty HMAC keys when represented as JWKs.
  See `GHSA-pxh4-856f-4h89 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89>`__.

`v2.13.0 <https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0>`__
-----------------------------------------------------------------------

Security
  • Reject JWK JSON documents passed as raw HMAC secrets in
    HMACAlgorithm.prepare_key to close an algorithm-confusion gap that
    the 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>__.
  • Bind the JWT header alg to PyJWK.algorithm_name during
    verification so the caller's algorithms=[...] allow-list cannot be
    bypassed when decoding with a PyJWK / PyJWKClient key. Reported
    by @​sushi-gif in GHSA-jq35-7prp-9v3f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f>__.
  • Reject non-http(s) URI schemes in PyJWKClient so attacker-
    influenced URIs cannot read local files or reach unintended schemes via
    urllib's default file:// / ftp:// / data: handlers. Reported
    by @​KEIJOT in GHSA-993g-76c3-p5m4 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4>__.
  • Preserve the cached JWK Set on fetch errors in PyJWKClient.fetch_data.
    The previous finally-block put(None) pattern cleared the cache
    on 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>__.
  • Skip the unconditional base64 decode of the compact-form payload segment
    when b64=false is set in the protected header, and require that
    segment 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


- Reject empty HMAC keys outright in ``HMACAlgorithm.prepare_key`` with
  ``InvalidKeyError`` instead of accepting them with only a warning.
  Thanks to @SnailSploit and @spartan8806 for independently flagging the
  footgun.
- Forward per-call ``options`` (including ``enforce_minimum_key_length``)
  from ``PyJWT.decode`` through to ``PyJWS._verify_signature`` so the
  option actually takes effect when set at the call site rather than only
  on the ``PyJWT`` instance. Thanks to @WLUB for the report.
- RFC 7797 §3 compliance for ``b64=false``: the encoder now auto-adds
  ``"b64"`` to the ``crit`` header parameter, and the decoder rejects
  tokens that set ``b64=false`` without listing it in ``crit``. Thanks to
  @MachineLearning-Nerd for the report.

Changed
  • Migrate the dev, docs, and tests package extras to dependency groups by @​kurtmckee in #&#8203;1152 <https://github.com/jpadilla/pyjwt/pull/1152>__

v2.15.0

Compare Source

See the 2.15.0 changelog for complete release details.

v2.14.0

Compare Source

See the 2.14.0 changelog for the complete release details and related security advisories.

v2.13.0

Compare 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_key previously 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 in algorithms=[…] 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 with PyJWK / PyJWKClient. When verifying with a PyJWK, the caller's algorithms=[…] allow-list was checked against the token header alg as a string only; actual verification used the algorithm bound to the PyJWK. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header alg to match the PyJWK's algorithm before verification. Reported by @​sushi-gif.

  • GHSA-w7vc-732c-9m39 — DoS via base64 decode of unused payload segment when b64=false. For detached-payload JWS (b64=false), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied detached_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 — PyJWKClient accepts non-HTTP(S) URIs. PyJWKClient.fetch_data passed its URI to urllib.request.urlopen, which by default also handles file://, ftp://, and data: schemes. An application that fed an attacker-influenced URI into PyJWKClient could be coerced into reading local files or reaching other unintended schemes. PyJWKClient now rejects any URI whose scheme isn't http or https. Reported by @​KEIJOT.

  • GHSA-fhv5-28vv-h8m8 — PyJWKClient cache wiped on fetch error. A finally-block put(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

  • Reject empty HMAC keys outright in HMACAlgorithm.prepare_key with InvalidKeyError instead of accepting them with only a warning. Defends against the os.getenv("JWT_SECRET", "") footgun. Thanks to @​SnailSploit and @​spartan8806 for the reports.
  • Forward per-call options (including enforce_minimum_key_length) from PyJWT.decode through to PyJWS._verify_signature. The option was previously silently dropped between the two layers, so it only took effect when set on the PyJWT instance. Thanks to @​WLUB for the report.
  • RFC 7797 §3 compliance for b64=false: the encoder now auto-adds "b64" to crit, and the decoder rejects tokens that set b64=false without listing it in crit. Thanks to @​MachineLearning-Nerd for the report.

Changed

Upgrade notes

Most fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:

  • Empty HMAC keys now raise. If your app passed "" or b"" as a secret (often via a missing env var, e.g. os.getenv("JWT_SECRET", "")), encode/decode will now raise InvalidKeyError. This is the intended behavior — fix the configuration.
  • PyJWK decoding now requires the token's alg to match the JWK's algorithm. Previously a mismatch was silently honored if the header alg appeared in the allow-list. Tokens that relied on this mismatch will now fail with InvalidAlgorithmError.
  • PyJWKClient now rejects non-HTTP(S) URIs at construction time. Tests or dev environments that fetched JWKS from file:// URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct PyJWKSet.from_dict(...) directly).
  • b64=false tokens are now strictly RFC 7515 / 7797 compliant. Tokens with a non-empty compact-form payload segment, or that omit "b64" from crit, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.
  • enforce_minimum_key_length set per-call now takes effect. Callers who passed options={"enforce_minimum_key_length": True} to jwt.decode() previously got no enforcement; they will now get InvalidKeyError on undersized keys, as documented.

Full changelog: https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0

v2.12.1

Compare Source

Fixed


- Add missing ``typing_extensions`` dependency for Python < 3.11 in `#&#8203;1150 <https://github.com/jpadilla/pyjwt/issues/1150>`__

`v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>`__
-----------------------------------------------------------------------

Fixed
  • Annotate PyJWKSet.keys for pyright by @​tamird in #&#8203;1134 <https://github.com/jpadilla/pyjwt/pull/1134>__
  • Close HTTPError response to prevent ResourceWarning on Python 3.14 by @​veeceey in #&#8203;1133 <https://github.com/jpadilla/pyjwt/pull/1133>__
  • Do not keep algorithms dict in PyJWK instances by @​akx in #&#8203;1143 <https://github.com/jpadilla/pyjwt/pull/1143>__
  • Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by @​dmbs335 in GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>__
  • Use PyJWK algorithm when encoding without explicit algorithm in #&#8203;1148 <https://github.com/jpadilla/pyjwt/pull/1148>__

Added


- Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache).

`v2.11.0 <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0>`__
-----------------------------------------------------------------------

Fixed
  • Enforce ECDSA curve validation per RFC 7518 Section 3.4.
  • Fix build system warnings by @​kurtmckee in #&#8203;1105 <https://github.com/jpadilla/pyjwt/pull/1105>__
  • Validate key against allowed types for Algorithm family in #&#8203;964 <https://github.com/jpadilla/pyjwt/pull/964>__
  • Add iterator for JWKSet in #&#8203;1041 <https://github.com/jpadilla/pyjwt/pull/1041>__
  • Validate iss claim is a string during encoding and decoding by @​pachewise in #&#8203;1040 <https://github.com/jpadilla/pyjwt/pull/1040>__
  • Improve typing/logic for options in decode, decode_complete by @​pachewise in #&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>__
  • Declare float supported type for lifespan and timeout by @​nikitagashkov in #&#8203;1068 <https://github.com/jpadilla/pyjwt/pull/1068>__
  • Fix SyntaxWarning\s/DeprecationWarning\s caused by invalid escape sequences by @​kurtmckee in #&#8203;1103 <https://github.com/jpadilla/pyjwt/pull/1103>__
  • Development: Build a shared wheel once to speed up test suite setup times by @​kurtmckee in #&#8203;1114 <https://github.com/jpadilla/pyjwt/pull/1114>__
  • Development: Test type annotations across all supported Python versions,
    increase the strictness of the type checking, and remove the mypy pre-commit hook
    by @​kurtmckee in #&#8203;1112 <https://github.com/jpadilla/pyjwt/pull/1112>__

Added


- Support Python 3.14, and test against PyPy 3.10 and 3.11 by @kurtmckee in `#&#8203;1104 <https://github.com/jpadilla/pyjwt/pull/1104>`__
- Development: Migrate to ``build`` to test package building in CI by @kurtmckee in `#&#8203;1108 <https://github.com/jpadilla/pyjwt/pull/1108>`__
- Development: Improve coverage config and eliminate unused test suite code by @kurtmckee in `#&#8203;1115 <https://github.com/jpadilla/pyjwt/pull/1115>`__
- Docs: Standardize CHANGELOG links to PRs by @kurtmckee in `#&#8203;1110 <https://github.com/jpadilla/pyjwt/pull/1110>`__
- Docs: Fix Read the Docs builds by @kurtmckee in `#&#8203;1111 <https://github.com/jpadilla/pyjwt/pull/1111>`__
- Docs: Add example of using leeway with nbf by @djw8605 in `#&#8203;1034 <https://github.com/jpadilla/pyjwt/pull/1034>`__
- Docs: Refactored docs with ``autodoc``; added ``PyJWS`` and ``jwt.algorithms`` docs by @pachewise in `#&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__
- Docs: Documentation improvements for "sub" and "jti" claims by @cleder in `#&#8203;1088 <https://github.com/jpadilla/pyjwt/pull/1088>`__
- Development: Add pyupgrade as a pre-commit hook by @kurtmckee in `#&#8203;1109 <https://github.com/jpadilla/pyjwt/pull/1109>`__
- Add minimum key length validation for HMAC and RSA keys (CWE-326).
  Warns by default via ``InsecureKeyLengthWarning`` when keys are below
  minimum recommended lengths per RFC 7518 Section 3.2 (HMAC) and
  NIST SP 800-131A (RSA). Pass ``enforce_minimum_key_length=True`` in
  options to ``PyJWT`` or ``PyJWS`` to raise ``InvalidKeyError`` instead.
- Refactor ``PyJWT`` to own an internal ``PyJWS`` instance instead of
  calling global ``api_jws`` functions.

`v2.10.1 <https://github.com/jpadilla/pyjwt/compare/2.10.0...2.10.1>`__
-----------------------------------------------------------------------

Fixed
  • Prevent partial matching of iss claim by @​fabianbadoi in GHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>__

v2.12.0

Compare Source

Fixed


- Add missing ``typing_extensions`` dependency for Python < 3.11 in `#&#8203;1150 <https://github.com/jpadilla/pyjwt/issues/1150>`__

`v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>`__
-----------------------------------------------------------------------

Fixed
  • Annotate PyJWKSet.keys for pyright by @​tamird in #&#8203;1134 <https://github.com/jpadilla/pyjwt/pull/1134>__
  • Close HTTPError response to prevent ResourceWarning on Python 3.14 by @​veeceey in #&#8203;1133 <https://github.com/jpadilla/pyjwt/pull/1133>__
  • Do not keep algorithms dict in PyJWK instances by @​akx in #&#8203;1143 <https://github.com/jpadilla/pyjwt/pull/1143>__
  • Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by @​dmbs335 in GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>__
  • Use PyJWK algorithm when encoding without explicit algorithm in #&#8203;1148 <https://github.com/jpadilla/pyjwt/pull/1148>__

Added


- Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache).

`v2.11.0 <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0>`__
-----------------------------------------------------------------------

Fixed
  • Enforce ECDSA curve validation per RFC 7518 Section 3.4.
  • Fix build system warnings by @​kurtmckee in #&#8203;1105 <https://github.com/jpadilla/pyjwt/pull/1105>__
  • Validate key against allowed types for Algorithm family in #&#8203;964 <https://github.com/jpadilla/pyjwt/pull/964>__
  • Add iterator for JWKSet in #&#8203;1041 <https://github.com/jpadilla/pyjwt/pull/1041>__
  • Validate iss claim is a string during encoding and decoding by @​pachewise in #&#8203;1040 <https://github.com/jpadilla/pyjwt/pull/1040>__
  • Improve typing/logic for options in decode, decode_complete by @​pachewise in #&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>__
  • Declare float supported type for lifespan and timeout by @​nikitagashkov in #&#8203;1068 <https://github.com/jpadilla/pyjwt/pull/1068>__
  • Fix SyntaxWarning\s/DeprecationWarning\s caused by invalid escape sequences by @​kurtmckee in #&#8203;1103 <https://github.com/jpadilla/pyjwt/pull/1103>__
  • Development: Build a shared wheel once to speed up test suite setup times by @​kurtmckee in #&#8203;1114 <https://github.com/jpadilla/pyjwt/pull/1114>__
  • Development: Test type annotations across all supported Python versions,
    increase the strictness of the type checking, and remove the mypy pre-commit hook
    by @​kurtmckee in #&#8203;1112 <https://github.com/jpadilla/pyjwt/pull/1112>__

Added


- Support Python 3.14, and test against PyPy 3.10 and 3.11 by @kurtmckee in `#&#8203;1104 <https://github.com/jpadilla/pyjwt/pull/1104>`__
- Development: Migrate to ``build`` to test package building in CI by @kurtmckee in `#&#8203;1108 <https://github.com/jpadilla/pyjwt/pull/1108>`__
- Development: Improve coverage config and eliminate unused test suite code by @kurtmckee in `#&#8203;1115 <https://github.com/jpadilla/pyjwt/pull/1115>`__
- Docs: Standardize CHANGELOG links to PRs by @kurtmckee in `#&#8203;1110 <https://github.com/jpadilla/pyjwt/pull/1110>`__
- Docs: Fix Read the Docs builds by @kurtmckee in `#&#8203;1111 <https://github.com/jpadilla/pyjwt/pull/1111>`__
- Docs: Add example of using leeway with nbf by @djw8605 in `#&#8203;1034 <https://github.com/jpadilla/pyjwt/pull/1034>`__
- Docs: Refactored docs with ``autodoc``; added ``PyJWS`` and ``jwt.algorithms`` docs by @pachewise in `#&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__
- Docs: Documentation improvements for "sub" and "jti" claims by @cleder in `#&#8203;1088 <https://github.com/jpadilla/pyjwt/pull/1088>`__
- Development: Add pyupgrade as a pre-commit hook by @kurtmckee in `#&#8203;1109 <https://github.com/jpadilla/pyjwt/pull/1109>`__
- Add minimum key length validation for HMAC and RSA keys (CWE-326).
  Warns by default via ``InsecureKeyLengthWarning`` when keys are below
  minimum recommended lengths per RFC 7518 Section 3.2 (HMAC) and
  NIST SP 800-131A (RSA). Pass ``enforce_minimum_key_length=True`` in
  options to ``PyJWT`` or ``PyJWS`` to raise ``InvalidKeyError`` instead.
- Refactor ``PyJWT`` to own an internal ``PyJWS`` instance instead of
  calling global ``api_jws`` functions.

`v2.10.1 <https://github.com/jpadilla/pyjwt/compare/2.10.0...2.10.1>`__
-----------------------------------------------------------------------

Fixed
  • Prevent partial matching of iss claim by @​fabianbadoi in GHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>__

v2.11.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0

fastapi/fastapi (fastapi)

v0.162.0

Compare Source

Omitted bool and bool | None form fields now use their declared defaults or produce missing-field errors, consistent with other fields and Pydantic behavior. FastAPI no longer infers False for 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 and validate_default follow the usual rules.

For HTML checkboxes, declare a boolean with a default of False. See Boolean Form Fields.

Breaking Changes

v0.161.1

Compare Source

Fixes

v0.161.0

Compare Source

Features

v0.160.0

Compare Source

Query, header, cookie, and form parameter models now apply their extra configuration 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. With extra="allow", those fields are included as model extras. With the default extra="ignore", they are ignored.

Breaking Changes
Internal

v0.159.1

Compare Source

Features

v0.159.0

Compare Source

Features

v0.158.2

Compare Source

Features

v0.158.1

Compare Source

Fixes

v0.158.0

Compare Source

Features

v0.157.0

Compare Source

Features
  • ✨ Add support for combining query, header, and cookie parameter models. PR #​16573 by @​tiangolo.
Docs
Internal

v0.156.8

Compare Source

Fixes

v0.156.7

Compare Source

Fixes

v0.156.6

Compare Source

Fixes
  • 🐛 Respect model alias settings for query, header, and cookie parameters. PR #​16562 by @​tiangolo.

v0.156.5

Compare Source

Fixes

v0.156.4

Compare Source

Fixes

v0.156.3

Compare Source

Fixes

v0.156.2

Compare Source

Fixes

v0.156.1

Compare Source

Fixes

v0.156.0

Compare Source

Fixes

v0.155.0

Compare Source

The deprecated **extra keyword arguments have been removed from Path, Query, Header, Cookie, Body, Form, and File. Unknown keyword arguments now raise TypeError. For additional JSON Schema properties, replace, for example, Query(custom="value") with Query(json_schema_extra={"custom": "value"}).

Breaking Changes

v0.154.0

Compare Source

Features

v0.153.0

Compare 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.0

Compare 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 with loc_by_alias=False keep their existing behavior.

Fixes

v0.151.0

Compare Source

JSON request bodies now distinguish an explicit null from an omitted value. For individual Body parameters, null is validated as None: 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 used null to request a default should omit the value instead.

When a JSON object is expected because of Body(embed=True) or multiple body parameters, sending null as the entire body now returns a validation error.

Breaking Changes

v0.150.0

Compare 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.0

Compare Source

Browsers submit empty text inputs as empty strings (""). FastAPI now treats empty scalar form values as missing in form models, matching individual Form parameters. Required fields return a validation error. Fields with defaults or default factories use them and remain unset in model_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.0

Compare Source

Defaults for omitted Query, Header, Cookie, and Form parameters and model fields are no longer treated as user input. Defaults are not validated unless validate_default=True is enabled. If you rely on validators running for omitted values, enable default validation with Field(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 in input.

Omitted boolean form fields still become False and count as explicitly set.

Breaking Changes

v0.147.0

Compare Source

Omitted bool and bool | None form fields are now interpreted as False, matching unchecked HTML checkboxes. This applies to individual Form parameters and form models, including required fields and fields with defaults of True or None. The inferred value is considered explicitly set, including in model_dump(exclude_unset=True).

JSON requests and direct Pydantic validation are unchanged. See Boolean Form Fields.

Breaking Changes
Internal

v0.146.0

Compare Source

The root_path parameter in FastAPI() is deprecated. Configure the server with fastapi run --root-path /api/v1 instead.

Breaking Changes

v0.145.0

Compare Source

Breaking Changes
Docs

v0.144.0

Compare Source

Features

v0.143.5

Compare Source

Fixes
  • 🐛 Fix handling of empty value for byte file list parameter. PR #​9383 by @​Viicos.

v0.143.4

Compare Source

Upgrades

v0.143.3

Compare Source

Fixes
Docs

v0.143.2

Compare Source

Fixes
Translations
Internal

v0.143.1

Compare Source

Fixes

v0.143.0

Compare Source

Automatic OpenTelemetry exporter setup is now opt-in. If you rely on FastAPI to configure exporters from OTEL_* environment variables, set FASTAPI_OTEL_AUTO_CONFIGURE=true or use FastAPI(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.4

Compare Source

Fixes

v0.142.3

Compare Source

Fixes
Docs
Translations
Internal

v0.142.2

Compare Source

Fixes

v0.142.1

Compare Source

Fixes

v0.142.0

Compare Source

Features
Refactors
Docs
Translations
Internal

v0.141.1

Compare Source

Fixes
  • 🐛 Fix support for background tasks and headers from dependencies in app.frontend(). PR #​16105 by @​tiangolo.
Docs

v0.141.0

Compare Source

Features
  • ✨ Add app.frontend(check_dir="auto"), to make local development more convenient with fastapi dev. PR #​16102 by @​tiangolo.

v0.140.13

Compare Source

Fixes
Docs

v0.140.12

Compare Source

Fixes

v0.140.11

Compare Source

Fixes
  • 🐛 Fix response_model_* params ignored for non-generator endpoints with Iterable[..] return type. PR #​15093 by @​YuriiMotov.

v0.140.10

Compare Source

Fixes
Internal

v0.140.9

Compare Source

Fixes
  • 🐛 Fix exclude_defaults not propagated to dict keys and values in jsonable_encoder. PR #​16043 by @​MBGrao.
Internal

v0.140.8

Compare Source

Fixes

v0.140.7

Compare Source

Refactors
Internal

v0.140.6

Compare Source

Refactors
  • ⚡️ Avoid flattening dependencies for request parameters, mainly for OpenAPI. PR #​16073 by @​tiangolo.

v0.140.5

Compare Source

Refactors

v0.140.4

Compare Source

Refactors

v0.140.3

Compare Source

Refactors

v0.140.2

Compare Source

Refactors
Internal

v0.140.1

Compare Source

Refactors
  • ♻️ Update the lru_cache limit for dependencies to account for large apps. PR #​16062 by @​tiangolo.

v0.140.0

Compare Source

Refactors
Docs
Internal

v0.139.2

Compare Source

Fixes
  • 🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR #​16013 by @​tiangolo.

v0.139.1

Compare Source

Fixes
Docs
  • 📝 Fix topic repository list not being displayed and skip_users not being applied. PR #​15995 by @​YuriiMotov.
Translations
Internal

v0.139.0

Compare Source

Features
  • ✨ Support dependencies in app.frontend(), e.g. for automatic cookie authentication for the frontend. PR #​15908 by @​tiangolo.
Translations
Internal

v0.138.2

Compare Source

Refactors
  • ♻️ Make app.frontend() return 404 for methods other than GET or HEAD with no static file matches. PR #​15863 by @​tiangolo.
Internal

v0.138.1

Compare Source

Refactors
Internal

v0.138.0

Compare Source

Features
  • ✨ Add support for app.frontend("/", directory="dist") and router.frontend("/", directory="dist"). PR #​15800 by @​tiangolo.
Docs
Translations
Internal

v0.137.2

Compare Source

Features
  • ✨ Add iter_route_contexts() for advanced use cases that used to use router.routes (e.g. Jupyverse). PR #​15785 by @​tiangolo.
Translations
Internal

v0.137.1

Compare Source

Fixes

v0.137.0

Compare Source

Breaking Changes

Unblocks ✨ SO MANY THINGS ✨

Before this, router.include_router(other_router) would take each path operation from other_router and "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.routes is no longer a plain list of APIRoute objects, it can contain these intermediate objects that can contain additional routers, forming a tree.

Any logic that depended on iterating on the router.routes directly 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.routes to modify them would now also see these new objects, and would not see all the routes in the app.

router.routes should be considered an internal implementation detail, only passed around to the FastAPI functions that need it.

Features
  • Adding routes (path operations) after a router is included now works, they are reflected as they are not copied.
  • Including subrouter in mainrouter can be done before adding routes (path operations) to subrouter, because now the the entire object is stored instead of copying the routes.
  • As routes are not copied, in some cases that might save some memory.
Alpha Features

This is not documented yet, so it's not officially supported yet and could change in the future.

But, as APIRoute and APIRouter instances are now preserved, they could be customized.

APIRouter has two new methods, .matches() and .handle(), counterpart to the existing ones in APIRoute. 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
  • Custom APIRoute subclasses (undocumented, but alraedy works as desccribed above)
  • Custom APIRouter subclasses (undocumented, but already works as described above)
  • Dependencies per router
  • Exception handlers per router
  • Middleware per router
  • Other features planned
Docs
Translations
Internal

v0.136.3

Compare Source

Refactors
  • ♻️ Do not accept underscore headers when using convert_underscores=True (the default). PR #​15589 by @​tiangolo.

v0.136.1

Compare Source

Upgrades
Internal

v0.136.0

Compare Source

Upgrades

v0.135.4

Compare Source

Refactors
Internal

v0.135.3

Compare Source

Features
Docs
Internal

v0.135.2

Compare Source

Upgrades
Docs
Translations
Internal

v0.135.1

Compare Source

Fixes
  • 🐛 Fix, avoid yield from a TaskGroup, only as an async context manager, closed in the request async exit stack. PR #​15038 by @​tiangolo.
Docs
Internal

v0.135.0

Compare Source

Features

v0.134.0

Compare Source

Features
  • ✨ Add support for streaming JSON Lines and binary data with yield. PR #​15022 by @​tiangolo.
    • This also upgrades Starlette from >=0.40.0 to >=0.46.0, as it's needed to properly unrwap and re-raise exceptions from exception groups.
    • New docs: Stream JSON Lines.
    • And new docs: Stream Data.
Docs
Internal

v0.133.1

Compare Source

Features
Internal

v0.133.0

Compare Source

Upgrades

v0.132.1

Compare Source

Refactors
Internal

v0.132.0

Compare Source

Breaking Changes
  • 🔒️ Add strict_content_type checking for JSON requests. PR #​14978 by @​tiangolo.
    • Now FastAPI checks, by default, that JSON requests have a Content-Type header with a valid JSON value, like application/json, and rejects requests that don't.
    • If the clients for your app don't send a valid Content-Type header you can disable this with strict_content_type=False.
    • Check the new docs: Strict Content-Type Checking.
Internal

v0.131.0

Compare Source

Breaking Changes

v0.130.0

Compare Source

Features

v0.129.2

Compare Source

Internal

v0.129.1

Compare Source

Fixes
  • ♻️ Fix JSON Schema for bytes, use "contentMediaType": "application/octet-stream" instead of "format": "binary". PR #​14953 by @​tiangolo.
Docs
Translations
Internal

v0.129.0

Compare Source

Breaking Changes
Refactors
Docs
Internal

v0.128.8

Compare Source

Docs
Internal

v0.128.7

Compare Source

Features
Refactors
  • ♻️ Simplify reading files in memory, do it sequentially instead of (fake) parallel. PR #​14884 by @​tiangolo.
Docs
Internal

v0.128.6

Compare Source

Fixes
Translations
Internal

v0.128.5

Compare Source

Refactors
  • ♻️ Refactor and simplify Pydantic v2 (and v1) compatibility internal utils. PR #​14862 by @​tiangolo.
Internal
  • ✅ Add inline snapshot tests for OpenAPI before changes from Pydantic v2. PR #​14864 by @​tiangolo.

v0.128.4

Compare Source

Refactors
  • ♻️ Refactor internals, simplify Pydantic v2/v1 utils, create_model_field, better types for lenient_issubclass. PR #​14860 by @​tiangolo.
  • ♻️ Simplify internals, remove Pydantic v1 only logic, no longer needed. PR #​14857 by @​tiangolo.
  • ♻️ Refactor internals, cleanup unneeded Pydantic v1 specific logic. PR #​14856 by @​tiangolo.
Translations
Internal

v0.128.3

Compare Source

Refactors
  • ♻️ Re-implement on_event in FastAPI for compatibility with the next Starlette, while keeping backwards compatibility. PR #​14851 by @​tiangolo.
Upgrades
  • ⬆️ Upgrade Starlette supported version range to starlette>=0.40.0,<1.0.0. PR #​14853 by @​tiangolo.
Translations
Internal
  • 👷 Run tests with Starlette from git. PR #​14849 by @​tiangolo.
  • 👷 Run tests with lower bound uv sync, upgrade fastapi[all] minimum dependencies: ujson >=5.8.0, orjson >=3.9.3. PR #​14846 by @​tiangolo.

v0.128.2

Compare Source

Features
Fixes
Docs
Translations
Internal

v0.128.1

Compare Source

Features
  • ✨ Add viewport meta tag to improve Swagger UI on mobile devices. PR #​14777 by @​Joab0.
  • 🚸 Improve error message for invalid query parameter type annotations. PR #​14479 by @​retwish.
Fixes
Refactors
Docs
Translations
Internal

v0.128.0

Compare Source

Breaking Changes
Internal

v0.127.1

Compare Source

Refactors
Docs
Translations
Internal

v0.127.0

Compare Source

Breaking Changes
Translations
  • 🔧 Add LLM prompt file for Korean, generated from the existing translations. PR #​14546 by @​tiangolo.
  • 🔧 Add LLM prompt file for Japanese, generated from the existing translations. PR #​14545 by @​tiangolo.
Internal

v0.126.0

Compare Source

Upgrades
  • ➖ Drop support for Pydantic v1, keeping short temporary support for Pydantic v2's pydantic.v1. PR #​14575 by @​tiangolo.
    • The minimum version of Pydantic installed is now pydantic >=2.7.0.
    • The standard dependencies now include pydantic-settings >=2.0.0 and pydantic-extra-types >=2.0.0.
Docs
Translations
  • 🔧 Add LLM prompt file for Ukrainian, generated from the existing translations. PR #​14548 by @​tiangolo.
Internal

v0.125.0

Compare Source

Breaking Changes
  • 🔧 Drop support for Python 3.8. PR #​14563 by @​tiangolo.
    • This would actually not be a breaking change as no code would really break. Any Python 3.8 installer would just refuse to install the latest version of FastAPI and would only install 0.124.4. Only marking it as a "breaking change" to make it visible.
Refactors
Docs
Translations
Internal

v0.124.4

Compare Source

Fixes

v0.124.3

Compare Source

Fixes
  • 🐛 Fix support for tagged union with discriminator inside of Annotated with Body(). PR #​14512 by @​tiangolo.
Refactors
Docs
Translations
Internal

v0.124.2

Compare Source

Fixes
  • 🐛 Fix support for if TYPE_CHECKING, non-evaluated stringified annotations. PR #​14485 by @​tiangolo.

v0.124.1

Compare Source

Fixes
  • 🐛 Fix handling arbitrary types when using arbitrary_types_allowed=True. PR #​14482 by @​tiangolo.
Docs
Internal

v0.124.0

Compare Source

Features
Internal

v0.123.10

Compare Source

Fixes

v0.123.9

Compare Source

Fixes
  • 🐛 Fix OAuth2 scopes in OpenAPI in extra corner cases, parent dependency with scopes, sub-dependency security scheme without scopes. PR #​14459 by @​tiangolo.

v0.123.8

Compare Source

Fixes
  • 🐛 Fix OpenAPI security scheme OAuth2 scopes declaration, deduplicate security schemes with different scopes. PR #​14455 by @​tiangolo.

v0.123.7

Compare Source

Fixes

v0.123.6

Compare Source

Fixes
  • 🐛 Fix support for functools wraps and partial combined, for async and regular functions and classes in path operations and dependencies. PR #​14448 by @​tiangolo.

v0.123.5

Compare Source

Features
Fixes
  • 🐛 Fix optional sequence handling with new union syntax from Python 3.10. PR #​14430 by @​Viicos.
Refactors
  • 🔥 Remove dangling extra condiitonal no longer needed. PR #​14435 by @​tiangolo.
  • ♻️ Refactor internals, update is_coroutine check to reuse internal supported variants (unwrap, check class). PR #​14434 by @​tiangolo.
Translations

v0.123.4

Compare Source

Fixes
  • 🐛 Fix OpenAPI schema support for computed fields when using separate_input_output_schemas=False. PR #​13207 by @​vgrafe.
Docs

v0.123.3

Compare Source

Fixes

v0.123.2

Compare Source

Fixes
Docs

v0.123.1

Compare Source

Fixes
Internal

v0.123.0

Compare Source

Fixes
  • 🐛 Cache dependencies that don't use scopes and don't have sub-dependencies with scopes. PR #​14419 by @​tiangolo.

v0.122.1

Compare Source

Fixes
Docs
Internal

v0.122.0

Compare Source

Fixes
Internal

v0.121.3

Compare Source

0.121.3

Refactors
  • ♻️ Make the result of Depends() and Security() hashable, as a workaround for other tools interacting with these internal parts. PR #​14372 by @​tiangolo.
Upgrades
Docs

v0.121.2

Compare Source

Fixes
Docs
Translations

v0.121.1

Compare Source

Fixes
  • 🐛 Fix Depends(func, scope='function') for top level (parameterless) dependencies. PR #​14301 by @​luzzodev.
Docs
  • 📝 Upate docs for advanced dependencies with yield, noting the changes in 0.121.0, adding scope. PR #​14287 by @​tiangolo.
Internal

v0.121.0

Compare Source

Features
Internal

v0.120.4

Compare Source

Fixes

v0.120.3

Compare Source

Refactors
  • ♻️ Reduce internal cyclic recursion in dependencies, from 2 functions calling each other to 1 calling itself. PR #​14256 by @​tiangolo.
  • ♻️ Refactor internals of dependencies, simplify code and remove get_param_sub_dependant. PR #​14255 by @​tiangolo.
  • ♻️ Refactor internals of dependencies, simplify using dataclasses. PR #​14254 by @​tiangolo.
Docs

v0.120.2

Compare Source

Fixes
Internal

v0.120.1

Compare Source

Upgrades
Internal
  • 🔧 Add license and license-files to pyproject.toml, remove License from classifiers. PR #​14230 by @​YuriiMotov.

v0.120.0

Compare Source

There are no major nor breaking changes in this release. ☕️

The internal reference documentation now uses annotated_doc.Doc instead of typing_extensions.Doc, this adds a new (very small) dependency on annotated-doc, a package made just to provide that Doc documentation utility class.

I would expect typing_extensions.Doc to be deprecated and then removed at some point from typing_extensions, for that reason there's the new annotated-doc micro-package. If you are curious about this, you can read more in the repo for annotated-doc.

This new version 0.120.0 only contains that transition to the new home package for that utility class Doc.

Translations
Internal

v0.119.1

Compare Source

Fixes
  • 🐛 Fix internal Pydantic v1 compatibility (warnings) for Python 3.14 and Pydantic 2.12.1. PR #​14186 by @​svlandeg.
Docs
  • 📝 Replace starlette.io by starlette.dev and uvicorn.org by uvicorn.dev. PR #​14176 by @​Kludex.
Internal

v0.119.0

Compare Source

FastAPI now (temporarily) supports both Pydantic v2 models and pydantic.v1 models 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.

from fastapi import FastAPI
from pydantic import BaseModel as BaseModelV2
from pydantic.v1 import BaseModel

class Item(BaseModel):
    name: str
    description: str | None = None

class ItemV2(BaseModelV2):
    title: str
    summary: str | None = None

app = FastAPI()

@app.post("/items/", response_model=ItemV2)
def create_item(item: Item):
    return {"title": item.name, "summary": item.description}

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
  • ✨ Add support for from pydantic.v1 import BaseModel, mixed Pydantic v1 and v2 models in the same app. PR #​14168 by @​tiangolo.

v0.118.3

Compare Source

Upgrades

v0.118.2

Compare Source

Fixes
Internal

v0.118.1

Compare Source

Upgrades
Docs
Translations
Internal

v0.118.0

Compare Source

0.118.0

Fixes
  • 🐛 Fix support for StreamingResponses with dependencies with yield or UploadFiles, 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 with yield would have been already run.

For example, if you had a database session in a dependency with yield, the StreamingResponse would not be able to use that session while streaming data because the session would have already been closed in the exit code after yield.

This behavior was reverted in 0.118.0, to make the exit code after yield be executed after the response is sent.

You can read more about it in the docs for Advanced Dependencies - Dependencies with yield, HTTPException, except and Background Tasks. Including what you could do if you wanted to close a database session earlier, before returning the response to the client.

Docs
Translations
Internal

v0.117.1

Compare Source

Fixes

v0.117.0

Compare Source

Features
Fixes
  • ⚡️ Fix default_factory for response model field with Pydantic V1. PR #​9704 by @​vvanglro.
  • 🐛 Fix inconsistent processing of model docstring formfeed char with Pydantic V1. PR #​6039 by @​MaxwellPayne.
  • 🐛 Fix jsonable_encoder alters json_encoders of Pydantic v1 objects. PR #​4972 by @​aboubacs.
  • 🐛 Reenable allow_arbitrary_types when only 1 argument is used on the API endpoint. PR #​13694 by @​rmawatson.
  • 🐛 Fix inspect.getcoroutinefunction() can break testing with unittest.mock.patch(). PR #​14022 by @​secrett2633.
Refactors
Docs
Translations
Internal

v0.116.2

Compare Source

Upgrades
Docs
Translations
Internal
pydantic/pydantic (pydantic)

v2.14.1

Compare Source

GitHub release

The code released in v2.5.0 is functionally identical to that of v2.5.0b1.

What's Changed
Packaging
  • Update pydantic-core from 2.10.1 to 2.14.1, significant changes from these updates are described below, full changelog here
  • Update to pyright==1.1.335 by @​Viicos in #​8075
New Features
Changes
  • Significant Change: replace ultra_strict with 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#867
  • Add support for instance method reassignment when extra='allow' by @​sydney-runkle in #​7683
  • Support JSON schema generation for Enum types with no cases by @​sydney-runkle in #​7927
  • Warn if a class inherits from Generic before BaseModel by @​alexmojaki in #​7891
Performance
Fixes
New Contributors
pydantic
pydantic-core

v2.14.0

Compare 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
Changes
Fixes
New Contributors

v2.13.5: 2026-08-28

Compare Source

v2.13.5 (2026-08-28)

What's Changed
Fixes

v2.13.4

Compare Source

GitHub release

What's Changed
Packaging
Fixes

v2.13.3

Compare Source

GitHub release

What's Changed
Fixes

v2.13.2

Compare Source

GitHub release

What's Changed
Fixes

v2.13.1

Compare Source

GitHub release

What's Changed
Fixes

v2.13.0

Compare 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.v1 namespace, 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
  • Allow default factories of private attributes to take validated model data by @​Viicos in #​13013
Changes
Fixes
  • Change type of Any when synthesizing _build_sources for BaseSettings.__init__() signature in the mypy plugin by @​Viicos in #​13049
  • Fix model equality when using runtime extra configuration by @​Viicos in #​13062
Packaging
New Contributors

v2.12.5

Compare Source

GitHub release

This is the fifth 2.12 patch release, addressing an issue with the MISSING sentinel 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.

  • Fix pickle error when using model_construct() on a model with MISSING as a default value by @​ornariece in #​12522.
  • Several updates to the documentation by @​Viicos.

v2.12.4

Compare Source

GitHub release

This is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the build() method
of the AnyUrl and Dsn types.

This patch release also fixes an issue with the serialization of IP address types, when serialize_as_any is used. The next patch release
will 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.

v2.12.3

Compare Source

GitHub release

What's Changed

This is the third 2.12 patch release, fixing issues related to the FieldInfo class, and reverting a change to the supported
after model validator function signatures.

  • Raise a warning when an invalid after model validator function signature is raised by @​Viicos in #​12414.
    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.
  • Add FieldInfo.asdict() method, improve documentation around FieldInfo by @​Viicos in #​12411.
    This also add back support for mutations on FieldInfo classes, that are reused as Annotated metadata. However, note that this is still
    not 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.2

Compare Source

GitHub release

What's Changed
Fixes
  • Release a new pydantic-core version, as a corrupted CPython 3.10 manylinux2014_aarch64 wheel got uploaded (pydantic-core#1843).
  • Fix issue with recursive generic models with a parent model class by @​Viicos in #​12398

v2.12.1

Compare 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
New Contributors

v2.12.0

Compare 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
Fixes
Packaging
New Contributors

v2.11.10

Compare Source

GitHub release

What's Changed
Fixes

v2.11.9

Compare Source

GitHub release

What's Changed
Fixes

v2.11.8

Compare Source

GitHub release

What's Changed
Fixes
pydantic/pydantic-settings (pydantic-settings)

v2.16.2

Compare Source

v2.16.1

Compare Source

Highlights

This patch release fixes two CLI regressions introduced in 2.16.0.

Bug fixes

CLI

  • Fixed-length tuple positionals such as CliPositionalArg[tuple[int, int]] and NamedTuples are single-valued again (#​1069). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a SettingsError or put the wrong argument into the tuple. Variable-length tuples (tuple[int, ...] and bare Tuple) are still variadic.
  • A field typed as an alias of a list of dicts, e.g. 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.0

Compare Source

Highlights

Breaking changes and behavior changes
  • Python 3.10 is no longer supported (#​1003). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The tomli fallback is gone in favor of stdlib tomllib; the toml extra is kept as an empty extra so pip install pydantic-settings[toml] keeps working.
  • python-dotenv>=1.2.2 is now required (#​971) to pick up the fix for CVE-2026-28684.
  • Aliases are ignored in every source when 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 raising extra_forbidden, and the CLI exposes --apple rather than --pomo.
  • validation_alias takes precedence over alias (#​1038). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the validation_alias flag first, and CliApp.serialize emits it.
  • CLI case-insensitivity only lowercases registered options (#​1036). With case_sensitive=False, args after -- and those captured by CliUnknownArgs keep their case (-Xmx4G no longer becomes -xmx4g). Unrecognized options are now reported as typed (--NOPE instead of --nope).
  • JSON and YAML config files are read as UTF-8 by default (#​955) instead of the locale encoding, completing the secrets-file fix from 2.15.0. json_file_encoding/yaml_file_encoding still override it.
  • Discriminated union defaults are partially updated again (#​997). This reverts the 2.15.0 regression with nested_model_default_partial_update=True: the default is only dropped when the incoming value selects a different union member.
New features
  • Python 3.15 and pydantic 2.14 support (#​1026, #​1029, #​1022). pydantic 2.14 broke CliApp.run and validate_by_alias=False handling; both are fixed.
  • Cached settings instances via Settings.settings_cached() and Settings.settings_clear_cache() (#​952). These give you a process-local singleton per settings class without hand-rolling lru_cache wrappers. Calling the class directly still builds a fresh instance.
  • AWS Systems Manager Parameter Store source — AWSSystemsManagerSettingsSource (#​941). It recursively reads every parameter under an ssm_path, with / mapping onto nested models. Install it with the new aws-systems-manager extra.
  • env_file_depth (#​940) lets a relative env_file be found in parent directories, mirroring pyproject_toml_depth. This is useful when scripts run from a subdirectory of a monorepo. It defaults to 0, which keeps the current behavior.
  • CliVariadicArg for named variadic options (#​949, #​958). It accepts --param a b c in addition to repeated --param a --param b. Required fields need at least one value.
Bug fixes

CLI

  • CliApp.serialize output now round-trips through CliApp.run for enums, tuples, dates and Decimals (#​988), explicit None values (#​981), empty containers (#​1008), CliVariadicArg values (#​976) and populated CliUnknownArgs fields, which previously raised IndexError (#​992).
  • Empty JSON arrays (--items []) now give an empty list instead of [''] (#​994).
  • Tuples, frozenset, MutableSequence and other collection subtypes are now treated as repeatable/variadic options (#​972), and so are named collection type aliases such as TypeAliasType('Addrs', list[IPvAnyAddress]) (#​1032).
  • cli_exit_on_error=False is now honored in CliSubCommand parsers, which raise SettingsError instead of exiting (#​977).
  • CliSubCommand aliases keep their case with case_sensitive=False (#​989).
  • Each CliUnknownArgs field now receives only its own subcommand's leftover args (#​1004).
  • CliApp.format_help no longer crashes when cli_prefix is set in model_config (#​945).

Type aliases and parsing

  • Named union type aliases (TypeAliasType('V', list[int] | str)) now decode like their inline equivalents in env and dotenv sources, including under Optional, Annotated and custom validation aliases (#​1006, #​1030, #​1041).
  • Resolving a named Annotated type alias no longer mutates shared FieldInfo metadata, which made validators run twice on subclasses or after model_rebuild() (#​979).
  • A bare single-segment AliasPath('SOME_KEY') no longer tries to JSON-decode plain string values (#​980).
  • collections.abc.Set/MutableSet/typing.AbstractSet fields now JSON-decode env values (#​973).
  • A bare typing.Dict field with env_nested_delimiter no longer raises IndexError, which was a regression in 2.13.0 (#​1009).
  • Case-insensitive matching now works for nested pydantic dataclasses (#​1010).

Dotenv, secrets and config files

  • With extra='allow', a non-lowercase env_prefix is now stripped from dotenv extras (#​959, #​968).
  • secrets_case_sensitive=True is now honored on Windows (#​1001).
  • An empty JSON config file is treated as an empty mapping instead of crashing (#​947), matching YAML and TOML.
  • TOML table headers: ~ paths are now expanded when checking that the file exists (#​1034), and an explicit toml_table_header=() now overrides the model config to read the file root (#​1027).

Cloud sources

  • Azure Key Vault and GCP Secret Manager now honor env_parse_none_str (#​1019, #​1040).
  • Azure Key Vault: dash_to_underscore=True now works for nested model fields (#​1025).
  • NestedSecretsSettingsSource now validates its specific constructor arguments (#​975).
  • DotenvFiltering is exported from pydantic_settings.sources.types (#​944).
Documentation
  • Document that runtime validation arguments (strict, extra, context) passed to model_validate() are not applied to BaseSettings, and give a workaround (#​1017).
  • Explain why extra='forbid' doesn't reject misspelled top-level env vars (#​986).
  • Clarify alias plus nested model env lookup with populate_by_name (#​933), and add a nested model example for env_prefix_target (#​953).
  • Fix assorted typos (#​942, #​964).
All changes (including dependency bumps and internal maintenance)

What's Changed

New Contributors

Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.0

v2.15.0

Compare Source

Highlights

Behavior changes
  • case_sensitive now applies to init kwargs and config-file sources (#​900). InitSettingsSource and the JSON/TOML/YAML config sources previously ignored case_sensitive. Since it defaults to False, case-insensitive matching is now the default for these sources — e.g. Settings(TeSt=...) now populates a test field where it previously did not. Nested keys are still matched case-sensitively.
  • Fields with unresolved forward references now emit a warning (#​901). Settings sources can silently fail to resolve such fields; they now raise IncompleteFieldDefinitionWarning telling you to call model_rebuild(). If you have filterwarnings = error configured, this may surface as a new failure.
  • Non-JSON env values for strict fields now raise ValidationError (#​926) instead of a less specific error.
New features
  • Show environment variable names in CLI help via cli_show_env_vars=True (#​860), so generated --help output doubles as configuration documentation.
  • PYDANTIC_SETTINGS_DEBUG for debugging settings resolution (#​906, #​913). Set it to a truthy value with DEBUG logging enabled to see each source's contribution in priority order, which source won for each value, and which env_file/secret files were probed, loaded, or skipped — the long-standing "why isn't my .env being picked up?" question.
  • toml_table_header for regular TOML files (#​882, #​886, #​887), letting you root settings at a nested table in any TOML file, not just pyproject.toml.
  • Traversable support for JSON/TOML/YAML file sources (#​902), so you can load config packaged inside a distribution — including files inside a zip or wheel — via importlib.resources.files(...) without casting to Path.
  • GCP: project_id can come from an earlier settings source (#​878), rather than only from the constructor or GOOGLE_CLOUD_PROJECT.
Bug fixes
  • Fix env vars not loading on Windows with case_sensitive=True (#​894). Windows upper-cases os.environ keys, so fields raised Field required instead of picking up their values.
  • Read secret files as UTF-8 instead of the platform locale encoding (#​917). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets.
  • Fix AliasPath on nested model fields not JSON-decoding env values (#​898).
  • Fix case-insensitive matching for optional nested models (#​905).
  • Fix dotenv extras being wrongly claimed by a complex field sharing a name prefix (#​912) — e.g. dbx_token being swallowed by a db: dict field.
  • Fix nested_model_default_partial_update=True corrupting discriminated unions (#​876).
  • Fix Secret subclasses crashing when loaded from the environment (#​920).
  • Fix enum names not parsing through nested annotations such as Optional[Annotated[MyEnum, ...]] with env_parse_enums=True (#​910).
  • An empty yaml_config_section now falls back to defaults instead of raising AttributeError: 'NoneType' object has no attribute 'keys' (#​914).
  • NestedSecretsSettingsSource no longer follows symlinks pointing outside secrets_dir (#​889).
  • GCP: skip the list_secrets call when case_sensitive=True (#​862), lowering the required IAM permissions to just roles/secretmanager.secretAccessor.
  • AWS: types-boto3[secretsmanager] is no longer required at runtime (#​880).
Documentation
  • Document JSON parsing of complex env values, plus a comma-separated-values recipe (#​919).
  • Recommend an async settings loading pattern (#​908).
  • Clarify behavior when an unprefixed value is present in a dotenv file (#​895).
  • Clarify environment variable helper descriptions (#​867) and fix assorted typos (#​904).
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.2

Compare Source

What's Changed

This is a security patch release.

Security

Fixes GHSA-4xgf-cpjx-pc3j: NestedSecretsSettingsSource with secrets_nested_subdir=True could follow a symbolic link inside secrets_dir pointing outside it, reading out-of-tree files into settings values and bypassing the secrets_dir_max_size cap. 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.1

Compare Source

What's Changed

Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1

v2.14.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0

v2.13.1

Compare Source

What's Changed

Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.13.0...v2.13.1

v2.13.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.12.0...v2.13.0

v2.12.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.11.0...v2.12.0

v2.11.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/pydantic/pydantic-settings/compare/2.10.1...v2.11.0

Kludex/python-multipart (python-multipart)

v0.0.32

Compare Source

  • Speed up partial-boundary scanning for CR/LF-dense part data #​300.

v0.0.31

Compare Source

  • Speed up multipart header parsing and callback dispatch #​295.
  • Bound header field name size before validating #​296.
  • Validate Content-Length is non-negative in parse_form #​297.

v0.0.30

Compare Source

  • Parse application/x-www-form-urlencoded bodies per the WHATWG URL standard, treating only & as a field separator #​290.
  • Ignore RFC 2231/5987 extended parameters (name*, filename*) in parse_options_header, keeping the plain parameter authoritative per RFC 7578 §4.2 #​291.

v0.0.29

Compare Source

  • Handle malformed RFC 2231 continuations in parse_options_header #​270.

v0.0.28

Compare Source

  • Speed up partial-boundary tail scan via bytes.find #​281.
  • Cap multipart boundary length at 256 bytes #​282.

v0.0.27

Compare Source

  • Add multipart header limits #​267.
  • Pass parse offsets via constructors #​268.

v0.0.26

Compare Source

  • Skip preamble before the first multipart boundary more efficiently #​262.
  • Silently discard epilogue data after the closing multipart boundary #​259.

v0.0.25

Compare Source

  • Add MIME content type info to File #​143.
  • Handle CTE values case-insensitively #​258.
  • Remove custom FormParser classes #​257.
  • Add UPLOAD_DELETE_TMP to FormParser config #​254.
  • Emit field_end for trailing bare field names on finalize #​230.
  • Handle multipart headers case-insensitively #​252.
  • Apply Apache-2.0 properly #​247.

v0.0.24

Compare Source

  • Validate chunk_size in parse_form() #​244.

v0.0.23

Compare Source

  • Remove unused trust_x_headers parameter and X-File-Name fallback #​196.
  • Return processed length from QuerystringParser._internal_write #​229.
  • Cleanup metadata dunders from __init__.py #​227.

v0.0.22

Compare Source

  • Drop directory path from filename in File 9433f4b.

v0.0.21

Compare Source

  • Add support for Python 3.14 and drop EOL 3.8 and 3.9 #​216.
Kludex/uvicorn (uvicorn)

v0.54.0: Version 0.54.0

Compare Source

📨 Send metadata after the response body

uvicorn 0.54.0 adds response trailers and 103 Early Hints to its experimental HTTP/2 implementation through zttp.

uv add uvicorn==0.54.0 "zttp>=0.0.34"
  • Send HTTP/2 response trailers (#​3146). The ASGI http.response.trailers extension lets applications send metadata, such as checksums, after the response body. Clients must send TE: trailers to receive them. Multiple trailer messages are combined before completing the response.
  • HTTP/2 remains experimental and opt-in. Enable it with --http zttp --http2. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.

💡 Hint at resources before the final response

  • Send 103 Early Hints over HTTP/2 (#​3137). Applications can use the ASGI http.response.early_hint extension to send resource hints before the final response. Each supplied link becomes a separate Link header.

Full changelog: 0.53.0...0.54.0

v0.53.0: Version 0.53.0

Compare Source

🌐 Opt-in HTTP/2 support

uvicorn 0.53.0 adds experimental HTTP/2 through zttp, alongside a new zuvloop integration and connection-handling improvements.

uv add uvicorn==0.53.0
  • Serve HTTP/1.1 and HTTP/2 with zttp (#​2982, #​3101). Install zttp, then enable HTTP/2 with --http zttp --http2. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.
  • HTTP/2 remains experimental. Upgrade-based h2c and WebSockets over HTTP/2 are not supported.

⚙️ More event loop choice

  • Run Uvicorn with zuvloop (#​3104). Install zuvloop separately and select it explicitly with --loop zuvloop on CPython 3.14 or newer.

🛡️ More reliable connections and proxies

  • Honor Connection: close token lists (#​3103). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.
  • Trust IPv6 loopback proxies by default (#​3119). The default FORWARDED_ALLOW_IPS value now includes ::1.
  • Keep upgraded WebSockets alive (#​3107). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket.

Full changelog: 0.52.4...0.53.0

v0.52.4: Version 0.52.4

Compare Source

Fixed
  • Remove duplicate Date headers from accepted WebSocket handshakes with websockets-sansio (#​3078)

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4

v0.52.3: Version 0.52.3

Compare Source

Changed
  • Update zttp to 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.2

Compare Source

Fixed
  • Update zttp to 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.1

Compare Source

Fixed
  • Complete the closing handshake on server-initiated WebSocket closes in the websockets-sansio and wsproto implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (#​3053)
  • Add missing write flow control to the websockets-sansio implementation, preventing data truncation on server-initiated closes with large in-flight payloads (#​3048)
  • Handle connection loss while a WebSocket write is waiting on backpressure (#​3050)
  • Remove duplicate Content-Type and Content-Length headers from WebSocket denial responses on the websockets-sansio implementation, 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.0

Compare 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
  • Add an experimental zttp HTTP/1.1 implementation, selectable with --http zttp (#​2979)
Fixed
  • Keep non-ASCII WebSocket request headers intact with websockets 17.0, which encodes them with ISO-8859-1 (#​3036)

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0

v0.51.0: Version 0.51.0

Compare Source

What's Changed

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0

v0.50.2: Version 0.50.2

Compare Source

What's Changed

  • Require websockets>=13.0 for the default sansio implementation by @​Kludex in #​3021

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.1...0.50.2

v0.50.1: Version 0.50.1

Compare Source

What's Changed

  • Split comma-separated Sec-WebSocket-Protocol values in the websockets-sansio implementation by @​Aayush7352 in #​3019

New Contributors

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1

v0.50.0: Version 0.50.0

Compare Source

What's Changed

  • Memoize trusted host checks to avoid re-parsing the client IP per request by @​Kludex in #​2970
  • Cache the asgi scope sub-dict per connection by @​Kludex in #​2976
  • Build a fresh asgi scope dict per request by @​Kludex in #​2977
  • Replace click.style with an internal ANSI style helper by @​Kludex in #​2981
  • Avoid copying single-frame WebSocket payloads in websockets-sansio by @​Kludex in #​2983
  • Deprecate the legacy websockets implementation and default auto to websockets-sansio by @​Kludex in #​2985
  • Exit with a dedicated code on startup failure and stop the supervisor when a worker can't boot by @​Kludex in #​3001
  • Skip the eager app import in the parent when spawning workers by @​Kludex in #​3012

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0

v0.49.0: Version 0.49.0

Compare Source

What's Changed

  • Bump httptools minimum version to 0.8.0 by @​Kludex in #​2962
  • Consume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by @​Kludex in #​2971

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0

v0.48.0: Version 0.48.0

Compare Source

What's Changed

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0

v0.47.0: Version 0.47.0

Compare Source

What's Changed

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0

v0.46.0: Version 0.46.0

Compare Source

What's Changed

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0

v0.45.0: Version 0.45.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0

v0.44.0: Version 0.44.0

Compare Source

What's Changed

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0

v0.43.0: Version 0.43.0

Compare Source

Changed

  • Emit http.disconnect ASGI receive() event on server shutting down for streaming responses (#​2829)
  • Use native context parameter for create_task on Python 3.11+ (#​2859)
  • Drop cast in ASGI types (#​2875)

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0

v0.42.0: Version 0.42.0

Compare Source

Changed

  • Use bytearray for request body accumulation to avoid O(n^2) allocation on fragmented bodies (#​2845)

Fixed

  • Escape brackets and backslash in httptools HEADER_RE regex (#​2824)
  • Fix multiple issues in websockets sans-io implementation (#​2825)

New Contributors


Full Changelog: https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0

v0.41.0: Version 0.41.0

Compare Source

Added

  • Add --limit-max-requests-jitter to stagger worker restarts (#​2707)
  • Add socket path to scope["server"] (#​2561)

Changed

  • Rename LifespanOn.error_occured to error_occurred (#​2776)

Fixed

  • Ignore permission denied errors in watchfiles reloader (#​2817)
  • Ensure lifespan shutdown runs when should_exit is set during startup (#​2812)
  • Reduce the log level of 'request limit exceeded' messages (#​2788)

New Contributors


Full Changelog: https://github.com/Kludex/uvicorn/compare/0.40.0...0.41.0

v0.40.0: Version 0.40.0

Compare Source

What's Changed

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.39.0...0.40.0

v0.39.0: Version 0.39.0

Compare 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.0

Compare 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.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.36.1...0.37.0

v0.36.1: Version 0.36.1

Compare Source

What's Changed

  • Raise an exception when calling removed Config.setup_event_loop() by @​Kludex in #​2709

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.36.0...0.36.1

v0.36.0: Version 0.36.0

Compare Source

Added


New Contributors

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.35.0...0.36.0


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 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.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---| | [PyJWT](https://github.com/jpadilla/pyjwt) | `==2.10.1` → `==2.15.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/pyjwt/2.15.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pyjwt/2.10.1/2.15.1?slim=true) | | minor | | [fastapi](https://github.com/fastapi/fastapi) ([changelog](https://fastapi.tiangolo.com/release-notes/)) | `==0.116.1` → `==0.162.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/fastapi/0.162.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/fastapi/0.116.1/0.162.0?slim=true) | | minor | | [pydantic](https://github.com/pydantic/pydantic) ([changelog](https://pydantic.dev/docs/validation/latest/get-started/changelog/)) | `==2.11.7` → `==2.14.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.14.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/2.11.7/2.14.1?slim=true) | | minor | | [pydantic-settings](https://github.com/pydantic/pydantic-settings) ([changelog](https://github.com/pydantic/pydantic-settings/releases)) | `==2.10.1` → `==2.16.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic-settings/2.16.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic-settings/2.10.1/2.16.2?slim=true) | | minor | | [python](https://hub.docker.com/_/python) ([source](https://github.com/docker-library/python)) | `3.12-alpine` → `3.15-alpine` | ![age](https://developer.mend.io/api/mc/badges/age/docker/python/3.15?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/python/3.12/3.15?slim=true) | final | minor | | [python-multipart](https://github.com/Kludex/python-multipart) ([changelog](https://github.com/Kludex/python-multipart/blob/master/CHANGELOG.md)) | `==0.0.20` → `==0.0.32` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/python-multipart/0.0.32?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/python-multipart/0.0.20/0.0.32?slim=true) | | patch | | [uvicorn](https://github.com/Kludex/uvicorn) ([changelog](https://uvicorn.dev/release-notes)) | `==0.35.0` → `==0.54.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.54.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.35.0/0.54.0?slim=true) | | minor | --- ### Release Notes <details> <summary>jpadilla/pyjwt (PyJWT)</summary> ### [`v2.15.1`](https://github.com/jpadilla/pyjwt/blob/HEAD/CHANGELOG.rst#Unreleased-httpsgithubcomjpadillapyjwtcompare2151HEAD) [Compare Source](https://github.com/jpadilla/pyjwt/compare/2.15.0...2.15.1) Changed ``` - Add public ``jwt.decode`` regression coverage for AWS ALB-style padded ES256 tokens, including rejection of tampered payloads and signatures, in `#&#8203;1211 <https://github.com/jpadilla/pyjwt/pull/1211>`__. `v2.15.1 <https://github.com/jpadilla/pyjwt/compare/2.15.0...2.15.1>`__ ----------------------------------------------------------------------- Fixed ~~~~~ - Accept trailing Base64URL ``=`` padding when decoding JWS segments, so tokens issued by AWS ALB and similar systems verify instead of raising ``DecodeError: Invalid crypto padding``. Non-alphabet junk such as ``!!!!`` remains rejected (`#&#8203;1209 <https://github.com/jpadilla/pyjwt/issues/1209>`__). `v2.15.0 <https://github.com/jpadilla/pyjwt/compare/2.14.0...2.15.0>`__ ----------------------------------------------------------------------- Security ``` - Wrap recursion errors from deeply nested JWT payloads in `DecodeError` instead of exposing a raw `RecursionError`. Added ``` - Support Python 3.15 by @kytta in `#&#8203;1202 <https://github.com/jpadilla/pyjwt/pull/1202>`__ Changed ``` - `JWKSetCache` now stores the parsed `PyJWKSet` rather than the raw JWKS payload, so a cache hit no longer re-parses every key. `JWKSetCache.put()` accepts either form and raises `PyJWKSetError` for anything else. As a result, `PyJWKClient.get_jwk_set()` returns the same `PyJWKSet` instance for as long as it stays cached, rather than a freshly built one per call in `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`\_\_ - `PyJWKClient.fetch_data()` now raises `PyJWKClientError("The JWKS endpoint did not return a JSON object")` when the endpoint response is not a JSON object, instead of returning it for `get_jwk_set()` to reject. Callers reaching the JWKS through `get_jwk_set()` see the same error as before in `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`\_\_ Fixed ``` - Return cached ``PyJWKSet`` values from ``PyJWKClient.get_jwk_set()`` instead of raising ``PyJWKClientError("The JWKS endpoint did not return a JSON object")``. ``JWKSetCache.put()`` documents ``PyJWKSet`` as the cached value, so callers pre-populating the cache to avoid a network round-trip could not read it back in `#&#8203;914 <https://github.com/jpadilla/pyjwt/issues/914>`__ and `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`__ - ``PyJWKClient.get_jwk_set()`` now caches the key set it returns, so a ``fetch_data()`` override that filters or transforms the JWKS is no longer undone by the next cache hit in `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`__ - Raise the documented ``PyJWTError`` subclass instead of leaking a ``TypeError`` when the ``exp``, ``nbf``, or ``iat`` claim decodes to a non-numeric, non-string value such as a list, dict, or ``null``. - Reject OKP JWK private keys when their public ``x`` component does not match the private ``d`` component. - Treat malformed JWK Set members as unusable keys rather than letting ``AttributeError`` or ``TypeError`` escape ``PyJWKSet``. A member that is not a JSON object is skipped, a key whose components have the wrong type raises ``InvalidKeyError`` and is skipped, and a set left with no usable keys raises ``PyJWKSetError``. A single bad entry no longer fails an otherwise usable JWK Set in `#&#8203;1208 <https://github.com/jpadilla/pyjwt/pull/1208>`__ - Wrap ``http.client.HTTPException`` (e.g. ``IncompleteRead`` from a truncated response) in ``PyJWKClient.fetch_data`` as ``PyJWKClientConnectionError``, matching the other network failure modes the method already documents. `v2.14.0 <https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0>`__ ----------------------------------------------------------------------- Security ``` - Harden HMAC key validation against public-key material supplied as JWK, 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>`**. - Reject automatic redirects when `PyJWKClient` fetches a JWKS, preventing redirected destinations from being treated as trusted key sources. See `GHSA-9v7f-9g4p-ffgj <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-9v7f-9g4p-ffgj>`\_\_. - Limit repeated JWKS refreshes caused by unknown key IDs while preserving normal key-rotation behavior. See `GHSA-2gx3-rcp4-g85q <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-2gx3-rcp4-g85q>`\_\_. - Handle deeply nested and malformed JWS/JWK input without uncaught recursion 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>`\_\_. - Stop mutating the caller-supplied `options` mapping during decode when `verify_signature` is false, so a mapping reused across a signature-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>`\_\_. - Enforce compact JWS encoding rules during decoding. See `GHSA-hxm8-2xgr-2p9m <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-hxm8-2xgr-2p9m>`\_\_. - Reject detached-payload arguments for attached JWS inputs. Thanks to `@xclow3n <https://github.com/xclow3n>`\_\_ for reporting this behavior; fixed in commit `37b54877 <https://github.com/jpadilla/pyjwt/commit/37b54877bf7bea67e8149130e96929e3ec798122>`\_\_. Fixed ``` - Apply HMAC key validation consistently when keys are loaded through ``PyJWK`` and ``PyJWKClient``. See `GHSA-pxh4-856f-4h89 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89>`__. - Reject empty HMAC keys when represented as JWKs. See `GHSA-pxh4-856f-4h89 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-pxh4-856f-4h89>`__. `v2.13.0 <https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0>`__ ----------------------------------------------------------------------- Security ``` - Reject JWK JSON documents passed as raw HMAC secrets in `HMACAlgorithm.prepare_key` to close an algorithm-confusion gap that the existing PEM/SSH guard did not cover. Reported by [@&#8203;aradona91](https://github.com/aradona91) in `GHSA-xgmm-8j9v-c9wx <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx>`\_\_. - Bind the JWT header `alg` to `PyJWK.algorithm_name` during verification so the caller's `algorithms=[...]` allow-list cannot be bypassed when decoding with a `PyJWK` / `PyJWKClient` key. Reported by [@&#8203;sushi-gif](https://github.com/sushi-gif) in `GHSA-jq35-7prp-9v3f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f>`\_\_. - Reject non-`http(s)` URI schemes in `PyJWKClient` so attacker- influenced URIs cannot read local files or reach unintended schemes via urllib's default `file://` / `ftp://` / `data:` handlers. Reported by [@&#8203;KEIJOT](https://github.com/KEIJOT) in `GHSA-993g-76c3-p5m4 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4>`\_\_. - Preserve the cached JWK Set on fetch errors in `PyJWKClient.fetch_data`. The previous `finally`-block `put(None)` pattern cleared the cache on any transient outage, turning one bad JWKS request into application- wide auth failure. Reported by [@&#8203;eddieran](https://github.com/eddieran) in `GHSA-fhv5-28vv-h8m8 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8>`\_\_. - Skip the unconditional base64 decode of the compact-form payload segment when `b64=false` is set in the protected header, and require that segment to be empty (RFC 7515 Appendix F detached form). Closes an unauthenticated DoS amplifier. Reported by [@&#8203;thesmartshadow](https://github.com/thesmartshadow) in `GHSA-w7vc-732c-9m39 <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39>`\_\_. Fixed ``` - Reject empty HMAC keys outright in ``HMACAlgorithm.prepare_key`` with ``InvalidKeyError`` instead of accepting them with only a warning. Thanks to @SnailSploit and @spartan8806 for independently flagging the footgun. - Forward per-call ``options`` (including ``enforce_minimum_key_length``) from ``PyJWT.decode`` through to ``PyJWS._verify_signature`` so the option actually takes effect when set at the call site rather than only on the ``PyJWT`` instance. Thanks to @WLUB for the report. - RFC 7797 §3 compliance for ``b64=false``: the encoder now auto-adds ``"b64"`` to the ``crit`` header parameter, and the decoder rejects tokens that set ``b64=false`` without listing it in ``crit``. Thanks to @MachineLearning-Nerd for the report. Changed ``` - Migrate the `dev`, `docs`, and `tests` package extras to dependency groups by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1152 <https://github.com/jpadilla/pyjwt/pull/1152>`\_\_ ### [`v2.15.0`](https://github.com/jpadilla/pyjwt/releases/tag/2.15.0) [Compare Source](https://github.com/jpadilla/pyjwt/compare/2.14.0...2.15.0) See the [2.15.0 changelog](https://github.com/jpadilla/pyjwt/blob/2.15.0/CHANGELOG.rst) for complete release details. ### [`v2.14.0`](https://github.com/jpadilla/pyjwt/releases/tag/2.14.0) [Compare Source](https://github.com/jpadilla/pyjwt/compare/2.13.0...2.14.0) See the [2.14.0 changelog](https://github.com/jpadilla/pyjwt/blob/2.14.0/CHANGELOG.rst) for the complete release details and related security advisories. ### [`v2.13.0`](https://github.com/jpadilla/pyjwt/releases/tag/2.13.0) [Compare Source](https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0) ### 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`](https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx) — JWK JSON accepted as HMAC secret (algorithm confusion).** `HMACAlgorithm.prepare_key` previously 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 in `algorithms=[…]` 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 [@&#8203;aradona91](https://github.com/aradona91).* - **[`GHSA-jq35-7prp-9v3f`](https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f) — Algorithm allow-list bypass with `PyJWK` / `PyJWKClient`.** When verifying with a `PyJWK`, the caller's `algorithms=[…]` allow-list was checked against the token header `alg` as a string only; actual verification used the algorithm bound to the `PyJWK`. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header `alg` to match the `PyJWK`'s algorithm before verification. *Reported by [@&#8203;sushi-gif](https://github.com/sushi-gif).* - **[`GHSA-w7vc-732c-9m39`](https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39) — DoS via base64 decode of unused payload segment when `b64=false`.** For detached-payload JWS (`b64=false`), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied `detached_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 [@&#8203;thesmartshadow](https://github.com/thesmartshadow).* - **[`GHSA-993g-76c3-p5m4`](https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4) — `PyJWKClient` accepts non-HTTP(S) URIs.** `PyJWKClient.fetch_data` passed its URI to `urllib.request.urlopen`, which by default also handles `file://`, `ftp://`, and `data:` schemes. An application that fed an attacker-influenced URI into `PyJWKClient` could be coerced into reading local files or reaching other unintended schemes. `PyJWKClient` now rejects any URI whose scheme isn't `http` or `https`. *Reported by [@&#8203;KEIJOT](https://github.com/KEIJOT).* - **[`GHSA-fhv5-28vv-h8m8`](https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8) — `PyJWKClient` cache wiped on fetch error.** A `finally`-block `put(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 [@&#8203;eddieran](https://github.com/eddieran).* #### Fixed - Reject empty HMAC keys outright in `HMACAlgorithm.prepare_key` with `InvalidKeyError` instead of accepting them with only a warning. Defends against the `os.getenv("JWT_SECRET", "")` footgun. *Thanks to [@&#8203;SnailSploit](https://github.com/SnailSploit) and [@&#8203;spartan8806](https://github.com/spartan8806) for the reports.* - Forward per-call `options` (including `enforce_minimum_key_length`) from `PyJWT.decode` through to `PyJWS._verify_signature`. The option was previously silently dropped between the two layers, so it only took effect when set on the `PyJWT` instance. *Thanks to [@&#8203;WLUB](https://github.com/WLUB) for the report.* - **RFC 7797 §3 compliance for `b64=false`:** the encoder now auto-adds `"b64"` to `crit`, and the decoder rejects tokens that set `b64=false` without listing it in `crit`. *Thanks to [@&#8203;MachineLearning-Nerd](https://github.com/MachineLearning-Nerd) for the report.* #### Changed - Migrate the `dev`, `docs`, and `tests` package extras to dependency groups, by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1152](https://github.com/jpadilla/pyjwt/pull/1152). #### Upgrade notes Most fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter: - **Empty HMAC keys now raise.** If your app passed `""` or `b""` as a secret (often via a missing env var, e.g. `os.getenv("JWT_SECRET", "")`), `encode`/`decode` will now raise `InvalidKeyError`. This is the intended behavior — fix the configuration. - **`PyJWK` decoding now requires the token's `alg` to match the JWK's algorithm.** Previously a mismatch was silently honored if the header `alg` appeared in the allow-list. Tokens that relied on this mismatch will now fail with `InvalidAlgorithmError`. - **`PyJWKClient` now rejects non-HTTP(S) URIs at construction time.** Tests or dev environments that fetched JWKS from `file://` URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct `PyJWKSet.from_dict(...)` directly). - **`b64=false` tokens are now strictly RFC 7515 / 7797 compliant.** Tokens with a non-empty compact-form payload segment, or that omit `"b64"` from `crit`, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected. - **`enforce_minimum_key_length` set per-call now takes effect.** Callers who passed `options={"enforce_minimum_key_length": True}` to `jwt.decode()` previously got no enforcement; they will now get `InvalidKeyError` on undersized keys, as documented. **Full changelog:** <https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0> ### [`v2.12.1`](https://github.com/jpadilla/pyjwt/blob/HEAD/CHANGELOG.rst#v2121-httpsgithubcomjpadillapyjwtcompare21202121) [Compare Source](https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1) Fixed ``` - Add missing ``typing_extensions`` dependency for Python < 3.11 in `#&#8203;1150 <https://github.com/jpadilla/pyjwt/issues/1150>`__ `v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>`__ ----------------------------------------------------------------------- Fixed ``` - Annotate PyJWKSet.keys for pyright by [@&#8203;tamird](https://github.com/tamird) in `#&#8203;1134 <https://github.com/jpadilla/pyjwt/pull/1134>`\_\_ - Close `HTTPError` response to prevent `ResourceWarning` on Python 3.14 by [@&#8203;veeceey](https://github.com/veeceey) in `#&#8203;1133 <https://github.com/jpadilla/pyjwt/pull/1133>`\_\_ - Do not keep `algorithms` dict in PyJWK instances by [@&#8203;akx](https://github.com/akx) in `#&#8203;1143 <https://github.com/jpadilla/pyjwt/pull/1143>`\_\_ - Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by [@&#8203;dmbs335](https://github.com/dmbs335) in `GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>`\_\_ - Use PyJWK algorithm when encoding without explicit algorithm in `#&#8203;1148 <https://github.com/jpadilla/pyjwt/pull/1148>`\_\_ Added ``` - Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache). `v2.11.0 <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0>`__ ----------------------------------------------------------------------- Fixed ``` - Enforce ECDSA curve validation per RFC 7518 Section 3.4. - Fix build system warnings by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1105 <https://github.com/jpadilla/pyjwt/pull/1105>`\_\_ - Validate key against allowed types for Algorithm family in `#&#8203;964 <https://github.com/jpadilla/pyjwt/pull/964>`\_\_ - Add iterator for JWKSet in `#&#8203;1041 <https://github.com/jpadilla/pyjwt/pull/1041>`\_\_ - Validate `iss` claim is a string during encoding and decoding by [@&#8203;pachewise](https://github.com/pachewise) in `#&#8203;1040 <https://github.com/jpadilla/pyjwt/pull/1040>`\_\_ - Improve typing/logic for `options` in decode, decode_complete by [@&#8203;pachewise](https://github.com/pachewise) in `#&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>`\_\_ - Declare float supported type for lifespan and timeout by [@&#8203;nikitagashkov](https://github.com/nikitagashkov) in `#&#8203;1068 <https://github.com/jpadilla/pyjwt/pull/1068>`\_\_ - Fix `SyntaxWarning`\s/`DeprecationWarning`\s caused by invalid escape sequences by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1103 <https://github.com/jpadilla/pyjwt/pull/1103>`\_\_ - Development: Build a shared wheel once to speed up test suite setup times by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1114 <https://github.com/jpadilla/pyjwt/pull/1114>`\_\_ - Development: Test type annotations across all supported Python versions, increase the strictness of the type checking, and remove the mypy pre-commit hook by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1112 <https://github.com/jpadilla/pyjwt/pull/1112>`\_\_ Added ``` - Support Python 3.14, and test against PyPy 3.10 and 3.11 by @kurtmckee in `#&#8203;1104 <https://github.com/jpadilla/pyjwt/pull/1104>`__ - Development: Migrate to ``build`` to test package building in CI by @kurtmckee in `#&#8203;1108 <https://github.com/jpadilla/pyjwt/pull/1108>`__ - Development: Improve coverage config and eliminate unused test suite code by @kurtmckee in `#&#8203;1115 <https://github.com/jpadilla/pyjwt/pull/1115>`__ - Docs: Standardize CHANGELOG links to PRs by @kurtmckee in `#&#8203;1110 <https://github.com/jpadilla/pyjwt/pull/1110>`__ - Docs: Fix Read the Docs builds by @kurtmckee in `#&#8203;1111 <https://github.com/jpadilla/pyjwt/pull/1111>`__ - Docs: Add example of using leeway with nbf by @djw8605 in `#&#8203;1034 <https://github.com/jpadilla/pyjwt/pull/1034>`__ - Docs: Refactored docs with ``autodoc``; added ``PyJWS`` and ``jwt.algorithms`` docs by @pachewise in `#&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__ - Docs: Documentation improvements for "sub" and "jti" claims by @cleder in `#&#8203;1088 <https://github.com/jpadilla/pyjwt/pull/1088>`__ - Development: Add pyupgrade as a pre-commit hook by @kurtmckee in `#&#8203;1109 <https://github.com/jpadilla/pyjwt/pull/1109>`__ - Add minimum key length validation for HMAC and RSA keys (CWE-326). Warns by default via ``InsecureKeyLengthWarning`` when keys are below minimum recommended lengths per RFC 7518 Section 3.2 (HMAC) and NIST SP 800-131A (RSA). Pass ``enforce_minimum_key_length=True`` in options to ``PyJWT`` or ``PyJWS`` to raise ``InvalidKeyError`` instead. - Refactor ``PyJWT`` to own an internal ``PyJWS`` instance instead of calling global ``api_jws`` functions. `v2.10.1 <https://github.com/jpadilla/pyjwt/compare/2.10.0...2.10.1>`__ ----------------------------------------------------------------------- Fixed ``` - Prevent partial matching of `iss` claim by [@&#8203;fabianbadoi](https://github.com/fabianbadoi) in `GHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>`\_\_ ### [`v2.12.0`](https://github.com/jpadilla/pyjwt/blob/HEAD/CHANGELOG.rst#v2121-httpsgithubcomjpadillapyjwtcompare21202121) [Compare Source](https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0) Fixed ``` - Add missing ``typing_extensions`` dependency for Python < 3.11 in `#&#8203;1150 <https://github.com/jpadilla/pyjwt/issues/1150>`__ `v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0>`__ ----------------------------------------------------------------------- Fixed ``` - Annotate PyJWKSet.keys for pyright by [@&#8203;tamird](https://github.com/tamird) in `#&#8203;1134 <https://github.com/jpadilla/pyjwt/pull/1134>`\_\_ - Close `HTTPError` response to prevent `ResourceWarning` on Python 3.14 by [@&#8203;veeceey](https://github.com/veeceey) in `#&#8203;1133 <https://github.com/jpadilla/pyjwt/pull/1133>`\_\_ - Do not keep `algorithms` dict in PyJWK instances by [@&#8203;akx](https://github.com/akx) in `#&#8203;1143 <https://github.com/jpadilla/pyjwt/pull/1143>`\_\_ - Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by [@&#8203;dmbs335](https://github.com/dmbs335) in `GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>`\_\_ - Use PyJWK algorithm when encoding without explicit algorithm in `#&#8203;1148 <https://github.com/jpadilla/pyjwt/pull/1148>`\_\_ Added ``` - Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache). `v2.11.0 <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0>`__ ----------------------------------------------------------------------- Fixed ``` - Enforce ECDSA curve validation per RFC 7518 Section 3.4. - Fix build system warnings by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1105 <https://github.com/jpadilla/pyjwt/pull/1105>`\_\_ - Validate key against allowed types for Algorithm family in `#&#8203;964 <https://github.com/jpadilla/pyjwt/pull/964>`\_\_ - Add iterator for JWKSet in `#&#8203;1041 <https://github.com/jpadilla/pyjwt/pull/1041>`\_\_ - Validate `iss` claim is a string during encoding and decoding by [@&#8203;pachewise](https://github.com/pachewise) in `#&#8203;1040 <https://github.com/jpadilla/pyjwt/pull/1040>`\_\_ - Improve typing/logic for `options` in decode, decode_complete by [@&#8203;pachewise](https://github.com/pachewise) in `#&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>`\_\_ - Declare float supported type for lifespan and timeout by [@&#8203;nikitagashkov](https://github.com/nikitagashkov) in `#&#8203;1068 <https://github.com/jpadilla/pyjwt/pull/1068>`\_\_ - Fix `SyntaxWarning`\s/`DeprecationWarning`\s caused by invalid escape sequences by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1103 <https://github.com/jpadilla/pyjwt/pull/1103>`\_\_ - Development: Build a shared wheel once to speed up test suite setup times by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1114 <https://github.com/jpadilla/pyjwt/pull/1114>`\_\_ - Development: Test type annotations across all supported Python versions, increase the strictness of the type checking, and remove the mypy pre-commit hook by [@&#8203;kurtmckee](https://github.com/kurtmckee) in `#&#8203;1112 <https://github.com/jpadilla/pyjwt/pull/1112>`\_\_ Added ``` - Support Python 3.14, and test against PyPy 3.10 and 3.11 by @kurtmckee in `#&#8203;1104 <https://github.com/jpadilla/pyjwt/pull/1104>`__ - Development: Migrate to ``build`` to test package building in CI by @kurtmckee in `#&#8203;1108 <https://github.com/jpadilla/pyjwt/pull/1108>`__ - Development: Improve coverage config and eliminate unused test suite code by @kurtmckee in `#&#8203;1115 <https://github.com/jpadilla/pyjwt/pull/1115>`__ - Docs: Standardize CHANGELOG links to PRs by @kurtmckee in `#&#8203;1110 <https://github.com/jpadilla/pyjwt/pull/1110>`__ - Docs: Fix Read the Docs builds by @kurtmckee in `#&#8203;1111 <https://github.com/jpadilla/pyjwt/pull/1111>`__ - Docs: Add example of using leeway with nbf by @djw8605 in `#&#8203;1034 <https://github.com/jpadilla/pyjwt/pull/1034>`__ - Docs: Refactored docs with ``autodoc``; added ``PyJWS`` and ``jwt.algorithms`` docs by @pachewise in `#&#8203;1045 <https://github.com/jpadilla/pyjwt/pull/1045>`__ - Docs: Documentation improvements for "sub" and "jti" claims by @cleder in `#&#8203;1088 <https://github.com/jpadilla/pyjwt/pull/1088>`__ - Development: Add pyupgrade as a pre-commit hook by @kurtmckee in `#&#8203;1109 <https://github.com/jpadilla/pyjwt/pull/1109>`__ - Add minimum key length validation for HMAC and RSA keys (CWE-326). Warns by default via ``InsecureKeyLengthWarning`` when keys are below minimum recommended lengths per RFC 7518 Section 3.2 (HMAC) and NIST SP 800-131A (RSA). Pass ``enforce_minimum_key_length=True`` in options to ``PyJWT`` or ``PyJWS`` to raise ``InvalidKeyError`` instead. - Refactor ``PyJWT`` to own an internal ``PyJWS`` instance instead of calling global ``api_jws`` functions. `v2.10.1 <https://github.com/jpadilla/pyjwt/compare/2.10.0...2.10.1>`__ ----------------------------------------------------------------------- Fixed ``` - Prevent partial matching of `iss` claim by [@&#8203;fabianbadoi](https://github.com/fabianbadoi) in `GHSA-75c5-xw7c-p5pm <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm>`\_\_ ### [`v2.11.0`](https://github.com/jpadilla/pyjwt/releases/tag/2.11.0) [Compare Source](https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0) #### What's Changed - Fixed type error in comment by [@&#8203;shuhaib-aot](https://github.com/shuhaib-aot) in [#&#8203;1026](https://github.com/jpadilla/pyjwt/pull/1026) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1018](https://github.com/jpadilla/pyjwt/pull/1018) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1033](https://github.com/jpadilla/pyjwt/pull/1033) - Make note of use of leeway with nbf by [@&#8203;djw8605](https://github.com/djw8605) in [#&#8203;1034](https://github.com/jpadilla/pyjwt/pull/1034) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1035](https://github.com/jpadilla/pyjwt/pull/1035) - Fixes [#&#8203;964](https://github.com/jpadilla/pyjwt/issues/964): Validate key against allowed types for Algorithm family by [@&#8203;pachewise](https://github.com/pachewise) in [#&#8203;985](https://github.com/jpadilla/pyjwt/pull/985) - Feat [#&#8203;1024](https://github.com/jpadilla/pyjwt/issues/1024): Add iterator for PyJWKSet by [@&#8203;pachewise](https://github.com/pachewise) in [#&#8203;1041](https://github.com/jpadilla/pyjwt/pull/1041) - Fixes [#&#8203;1039](https://github.com/jpadilla/pyjwt/issues/1039): Add iss, issuer type checks by [@&#8203;pachewise](https://github.com/pachewise) in [#&#8203;1040](https://github.com/jpadilla/pyjwt/pull/1040) - Fixes [#&#8203;660](https://github.com/jpadilla/pyjwt/issues/660): Improve typing/logic for `options` in decode, decode_complete; Improve docs by [@&#8203;pachewise](https://github.com/pachewise) in [#&#8203;1045](https://github.com/jpadilla/pyjwt/pull/1045) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1042](https://github.com/jpadilla/pyjwt/pull/1042) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1052](https://github.com/jpadilla/pyjwt/pull/1052) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1053](https://github.com/jpadilla/pyjwt/pull/1053) - Fix [#&#8203;1022](https://github.com/jpadilla/pyjwt/issues/1022): Map `algorithm=None` to "none" by [@&#8203;qqii](https://github.com/qqii) in [#&#8203;1056](https://github.com/jpadilla/pyjwt/pull/1056) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1055](https://github.com/jpadilla/pyjwt/pull/1055) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1058](https://github.com/jpadilla/pyjwt/pull/1058) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1060](https://github.com/jpadilla/pyjwt/pull/1060) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1061](https://github.com/jpadilla/pyjwt/pull/1061) - Fixes [#&#8203;1047](https://github.com/jpadilla/pyjwt/issues/1047): Correct `PyJWKClient.get_signing_key_from_jwt` annotation by [@&#8203;khvn26](https://github.com/khvn26) in [#&#8203;1048](https://github.com/jpadilla/pyjwt/pull/1048) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1062](https://github.com/jpadilla/pyjwt/pull/1062) - Fixed doc string typo in \_validate_jti() function [#&#8203;1063](https://github.com/jpadilla/pyjwt/issues/1063) by [@&#8203;kuldeepkhatke](https://github.com/kuldeepkhatke) in [#&#8203;1064](https://github.com/jpadilla/pyjwt/pull/1064) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1065](https://github.com/jpadilla/pyjwt/pull/1065) - Update SECURITY.md by [@&#8203;auvipy](https://github.com/auvipy) in [#&#8203;1057](https://github.com/jpadilla/pyjwt/pull/1057) - Typing fix: use `float` instead of `int` for `lifespan` and `timeout` by [@&#8203;nikitagashkov](https://github.com/nikitagashkov) in [#&#8203;1068](https://github.com/jpadilla/pyjwt/pull/1068) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1067](https://github.com/jpadilla/pyjwt/pull/1067) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1071](https://github.com/jpadilla/pyjwt/pull/1071) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1076](https://github.com/jpadilla/pyjwt/pull/1076) - Fix TYP header documentation by [@&#8203;fobiasmog](https://github.com/fobiasmog) in [#&#8203;1046](https://github.com/jpadilla/pyjwt/pull/1046) - doc: Document claims sub and jti by [@&#8203;cleder](https://github.com/cleder) in [#&#8203;1088](https://github.com/jpadilla/pyjwt/pull/1088) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1077](https://github.com/jpadilla/pyjwt/pull/1077) - Bump actions/setup-python from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;1089](https://github.com/jpadilla/pyjwt/pull/1089) - Bump actions/stale from 8 to 10 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;1090](https://github.com/jpadilla/pyjwt/pull/1090) - Bump actions/checkout from 4 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;1083](https://github.com/jpadilla/pyjwt/pull/1083) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1091](https://github.com/jpadilla/pyjwt/pull/1091) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1093](https://github.com/jpadilla/pyjwt/pull/1093) - \[pre-commit.ci] pre-commit autoupdate by [@&#8203;pre-commit-ci](https://github.com/pre-commit-ci)\[bot] in [#&#8203;1096](https://github.com/jpadilla/pyjwt/pull/1096) - Resolve package build warnings by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1105](https://github.com/jpadilla/pyjwt/pull/1105) - Support Python 3.14, and test against PyPy 3.10+ by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1104](https://github.com/jpadilla/pyjwt/pull/1104) - Fix a `SyntaxWarning` caused by invalid escape sequences by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1103](https://github.com/jpadilla/pyjwt/pull/1103) - Standardize CHANGELOG links to PRs by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1110](https://github.com/jpadilla/pyjwt/pull/1110) - Migrate from `pep517`, which is deprecated, to `build` by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1108](https://github.com/jpadilla/pyjwt/pull/1108) - Fix incorrectly-named test suite function by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1116](https://github.com/jpadilla/pyjwt/pull/1116) - Fix Read the Docs builds by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1111](https://github.com/jpadilla/pyjwt/pull/1111) - Bump actions/download-artifact from 4 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;1118](https://github.com/jpadilla/pyjwt/pull/1118) - Escalate test suite warnings to errors by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1107](https://github.com/jpadilla/pyjwt/pull/1107) - Add pyupgrade as a pre-commit hook by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1109](https://github.com/jpadilla/pyjwt/pull/1109) - Simplify the test suite decorators by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1113](https://github.com/jpadilla/pyjwt/pull/1113) - Improve coverage config and eliminate unused test suite code by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1115](https://github.com/jpadilla/pyjwt/pull/1115) - Build a shared wheel once in the test suite by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1114](https://github.com/jpadilla/pyjwt/pull/1114) - Bump actions/checkout from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;1122](https://github.com/jpadilla/pyjwt/pull/1122) - Thoroughly test type annotations, and resolve errors by [@&#8203;kurtmckee](https://github.com/kurtmckee) in [#&#8203;1112](https://github.com/jpadilla/pyjwt/pull/1112) - Fix leeway value in usage documentation by [@&#8203;Matthew1471](https://github.com/Matthew1471) in [#&#8203;1124](https://github.com/jpadilla/pyjwt/pull/1124) - Bump actions/download-artifact from 6 to 7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;1125](https://github.com/jpadilla/pyjwt/pull/1125) #### New Contributors - [@&#8203;shuhaib-aot](https://github.com/shuhaib-aot) made their first contribution in [#&#8203;1026](https://github.com/jpadilla/pyjwt/pull/1026) - [@&#8203;qqii](https://github.com/qqii) made their first contribution in [#&#8203;1056](https://github.com/jpadilla/pyjwt/pull/1056) - [@&#8203;khvn26](https://github.com/khvn26) made their first contribution in [#&#8203;1048](https://github.com/jpadilla/pyjwt/pull/1048) - [@&#8203;kuldeepkhatke](https://github.com/kuldeepkhatke) made their first contribution in [#&#8203;1064](https://github.com/jpadilla/pyjwt/pull/1064) - [@&#8203;nikitagashkov](https://github.com/nikitagashkov) made their first contribution in [#&#8203;1068](https://github.com/jpadilla/pyjwt/pull/1068) - [@&#8203;fobiasmog](https://github.com/fobiasmog) made their first contribution in [#&#8203;1046](https://github.com/jpadilla/pyjwt/pull/1046) - [@&#8203;Matthew1471](https://github.com/Matthew1471) made their first contribution in [#&#8203;1124](https://github.com/jpadilla/pyjwt/pull/1124) **Full Changelog**: <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0> </details> <details> <summary>fastapi/fastapi (fastapi)</summary> ### [`v0.162.0`](https://github.com/fastapi/fastapi/releases/tag/0.162.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.161.1...0.162.0) Omitted `bool` and `bool | None` form fields now use their declared defaults or produce missing-field errors, consistent with other fields and Pydantic behavior. FastAPI no longer infers `False` for 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 and `validate_default` follow the usual rules. For HTML checkboxes, declare a boolean with a default of `False`. See [Boolean Form Fields](https://fastapi.tiangolo.com/tutorial/request-forms/#boolean-form-fields). ##### Breaking Changes - 🐛 Restore default handling for omitted boolean form fields. PR [#&#8203;16605](https://github.com/fastapi/fastapi/pull/16605) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.161.1`](https://github.com/fastapi/fastapi/releases/tag/0.161.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.161.0...0.161.1) ##### Fixes - 🐛 Fix OpenAPI schemas for standalone nullable form unions. PR [#&#8203;16598](https://github.com/fastapi/fastapi/pull/16598) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.161.0`](https://github.com/fastapi/fastapi/releases/tag/0.161.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.160.0...0.161.0) ##### Features - ✨ Add support for combining unions of form models. PR [#&#8203;16596](https://github.com/fastapi/fastapi/pull/16596) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.160.0`](https://github.com/fastapi/fastapi/releases/tag/0.160.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.159.1...0.160.0) Query, header, cookie, and form parameter models now apply their `extra` configuration 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. With `extra="allow"`, those fields are included as model extras. With the default `extra="ignore"`, they are ignored. ##### Breaking Changes - 🐛 Apply each parameter model's `extra` configuration to sibling fields. PR [#&#8203;16594](https://github.com/fastapi/fastapi/pull/16594) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆ Bump certifi from 2026.1.4 to 2026.10.19. PR [#&#8203;16571](https://github.com/fastapi/fastapi/pull/16571) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.159.1`](https://github.com/fastapi/fastapi/releases/tag/0.159.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.159.0...0.159.1) ##### Features - ✨ Add support for optional unions of form models. PR [#&#8203;16586](https://github.com/fastapi/fastapi/pull/16586) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.159.0`](https://github.com/fastapi/fastapi/releases/tag/0.159.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.158.2...0.159.0) ##### Features - ✨ Add support for optional query, header, and cookie parameter models. PR [#&#8203;16584](https://github.com/fastapi/fastapi/pull/16584) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.158.2`](https://github.com/fastapi/fastapi/releases/tag/0.158.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.158.1...0.158.2) ##### Features - ✨ Add support for optional form models. PR [#&#8203;16582](https://github.com/fastapi/fastapi/pull/16582) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.158.1`](https://github.com/fastapi/fastapi/releases/tag/0.158.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.158.0...0.158.1) ##### Fixes - 🐛 Preserve form media types in OpenAPI. PR [#&#8203;16579](https://github.com/fastapi/fastapi/pull/16579) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.158.0`](https://github.com/fastapi/fastapi/releases/tag/0.158.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.157.0...0.158.0) ##### Features - ✨ Add support for combining form models. PR [#&#8203;16577](https://github.com/fastapi/fastapi/pull/16577) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.157.0`](https://github.com/fastapi/fastapi/releases/tag/0.157.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.8...0.157.0) ##### Features - ✨ Add support for combining query, header, and cookie parameter models. PR [#&#8203;16573](https://github.com/fastapi/fastapi/pull/16573) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Clarify boolean query parameter parsing. PR [#&#8203;16569](https://github.com/fastapi/fastapi/pull/16569) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Clarify nullable query parameters and path parameter defaults. PR [#&#8203;16568](https://github.com/fastapi/fastapi/pull/16568) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👷 Remove translation notifications and approval labeling. PR [#&#8203;16570](https://github.com/fastapi/fastapi/pull/16570) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.8`](https://github.com/fastapi/fastapi/releases/tag/0.156.8) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.7...0.156.8) ##### Fixes - 🐛 Preserve uploaded file positions when converting to `bytes`. PR [#&#8203;16566](https://github.com/fastapi/fastapi/pull/16566) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.7`](https://github.com/fastapi/fastapi/releases/tag/0.156.7) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.6...0.156.7) ##### Fixes - 🐛 Fix validation error locations for form and file `AliasChoices`. PR [#&#8203;16564](https://github.com/fastapi/fastapi/pull/16564) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.6`](https://github.com/fastapi/fastapi/releases/tag/0.156.6) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.5...0.156.6) ##### Fixes - 🐛 Respect model alias settings for query, header, and cookie parameters. PR [#&#8203;16562](https://github.com/fastapi/fastapi/pull/16562) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.5`](https://github.com/fastapi/fastapi/releases/tag/0.156.5) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.4...0.156.5) ##### Fixes - 🐛 Fix `AliasChoices` for path parameters. PR [#&#8203;16560](https://github.com/fastapi/fastapi/pull/16560) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.4`](https://github.com/fastapi/fastapi/releases/tag/0.156.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.3...0.156.4) ##### Fixes - 🐛 Fix `AliasChoices` for named JSON body parameters. PR [#&#8203;16559](https://github.com/fastapi/fastapi/pull/16559) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🐛 Fix `AliasChoices` extraction for form models. PR [#&#8203;16557](https://github.com/fastapi/fastapi/pull/16557) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.3`](https://github.com/fastapi/fastapi/releases/tag/0.156.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.2...0.156.3) ##### Fixes - 🐛 Fix `AliasChoices` for query parameters, headers, and cookies. PR [#&#8203;16555](https://github.com/fastapi/fastapi/pull/16555) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.2`](https://github.com/fastapi/fastapi/releases/tag/0.156.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.1...0.156.2) ##### Fixes - 🐛 Preserve Pydantic field metadata in inferred request parameters. PR [#&#8203;16553](https://github.com/fastapi/fastapi/pull/16553) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.1`](https://github.com/fastapi/fastapi/releases/tag/0.156.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.156.0...0.156.1) ##### Fixes - 🐛 Preserve Pydantic field metadata when request options are omitted. PR [#&#8203;16549](https://github.com/fastapi/fastapi/pull/16549) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.156.0`](https://github.com/fastapi/fastapi/releases/tag/0.156.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.155.0...0.156.0) ##### Fixes - 🐛 Preserve Pydantic `Field()` attributes in request parameters. PR [#&#8203;16547](https://github.com/fastapi/fastapi/pull/16547) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.155.0`](https://github.com/fastapi/fastapi/releases/tag/0.155.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.154.0...0.155.0) The deprecated `**extra` keyword arguments have been removed from `Path`, `Query`, `Header`, `Cookie`, `Body`, `Form`, and `File`. Unknown keyword arguments now raise `TypeError`. For additional JSON Schema properties, replace, for example, `Query(custom="value")` with `Query(json_schema_extra={"custom": "value"})`. ##### Breaking Changes - 🔥 Remove deprecated `**extra` from request parameters. PR [#&#8203;16545](https://github.com/fastapi/fastapi/pull/16545) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.154.0`](https://github.com/fastapi/fastapi/releases/tag/0.154.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.153.0...0.154.0) ##### Features - ✨ Add Pydantic validation options to request parameters. PR [#&#8203;16542](https://github.com/fastapi/fastapi/pull/16542) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.153.0`](https://github.com/fastapi/fastapi/releases/tag/0.153.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.152.0...0.153.0) 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 - 🐛 Apply browser form handling to unions of Pydantic models. PR [#&#8203;16540](https://github.com/fastapi/fastapi/pull/16540) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.152.0`](https://github.com/fastapi/fastapi/releases/tag/0.152.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.151.0...0.152.0) 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 with `loc_by_alias=False` keep their existing behavior. ##### Fixes - 🐛 Fix header model validation errors to report HTTP header names. PR [#&#8203;16538](https://github.com/fastapi/fastapi/pull/16538) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.151.0`](https://github.com/fastapi/fastapi/releases/tag/0.151.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.150.0...0.151.0) JSON request bodies now distinguish an explicit `null` from an omitted value. For individual `Body` parameters, `null` is validated as `None`: 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 used `null` to request a default should omit the value instead. When a JSON object is expected because of `Body(embed=True)` or multiple body parameters, sending `null` as the entire body now returns a validation error. ##### Breaking Changes - 🐛 Distinguish JSON null from omitted body values. PR [#&#8203;16536](https://github.com/fastapi/fastapi/pull/16536) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.150.0`](https://github.com/fastapi/fastapi/releases/tag/0.150.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.149.0...0.150.0) 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 - 🐛 Treat unselected browser file inputs as missing. PR [#&#8203;16534](https://github.com/fastapi/fastapi/pull/16534) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.149.0`](https://github.com/fastapi/fastapi/releases/tag/0.149.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.148.0...0.149.0) Browsers submit empty text inputs as empty strings (`""`). FastAPI now treats empty scalar form values as missing in form models, matching individual `Form` parameters. Required fields return a validation error. Fields with defaults or default factories use them and remain unset in `model_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 - 🐛 Treat empty scalar values as missing in form models. PR [#&#8203;16529](https://github.com/fastapi/fastapi/pull/16529) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.148.0`](https://github.com/fastapi/fastapi/releases/tag/0.148.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.147.0...0.148.0) Defaults for omitted `Query`, `Header`, `Cookie`, and `Form` parameters and model fields are no longer treated as user input. Defaults are not validated unless `validate_default=True` is enabled. If you rely on validators running for omitted values, enable default validation with `Field(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 in `input`. Omitted boolean form fields still become `False` and count as explicitly set. ##### Breaking Changes - 🐛 Fix default handling for request parameters and models. PR [#&#8203;16527](https://github.com/fastapi/fastapi/pull/16527) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.147.0`](https://github.com/fastapi/fastapi/releases/tag/0.147.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.146.0...0.147.0) Omitted `bool` and `bool | None` form fields are now interpreted as `False`, matching unchecked HTML checkboxes. This applies to individual `Form` parameters and form models, including required fields and fields with defaults of `True` or `None`. The inferred value is considered explicitly set, including in `model_dump(exclude_unset=True)`. JSON requests and direct Pydantic validation are unchanged. See [Boolean Form Fields](https://fastapi.tiangolo.com/tutorial/request-forms/#boolean-form-fields). ##### Breaking Changes - 🐛 Treat omitted boolean form fields as False. PR [#&#8203;16523](https://github.com/fastapi/fastapi/pull/16523) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ✅ Add tests for parameter defaults, nullability, and browser form behavior. PR [#&#8203;14829](https://github.com/fastapi/fastapi/pull/14829) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.146.0`](https://github.com/fastapi/fastapi/releases/tag/0.146.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.145.0...0.146.0) The `root_path` parameter in `FastAPI()` is deprecated. Configure the server with `fastapi run --root-path /api/v1` instead. ##### Breaking Changes - 🗑️ Deprecate the `root_path` parameter in `FastAPI`. PR [#&#8203;16520](https://github.com/fastapi/fastapi/pull/16520) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.145.0`](https://github.com/fastapi/fastapi/releases/tag/0.145.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.144.0...0.145.0) ##### Breaking Changes - 🔥 Remove deprecated `openapi_prefix` and unused `**extra` from `FastAPI`. PR [#&#8203;16518](https://github.com/fastapi/fastapi/pull/16518) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Document URL paths in templates. PR [#&#8203;16517](https://github.com/fastapi/fastapi/pull/16517) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.144.0`](https://github.com/fastapi/fastapi/releases/tag/0.144.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.143.5...0.144.0) ##### Features - ✨ Add WebSocket support to security dependencies. PR [#&#8203;10147](https://github.com/fastapi/fastapi/pull/10147) by [@&#8203;mnixry](https://github.com/mnixry). ### [`v0.143.5`](https://github.com/fastapi/fastapi/releases/tag/0.143.5) [Compare Source](https://github.com/fastapi/fastapi/compare/0.143.4...0.143.5) ##### Fixes - 🐛 Fix handling of empty value for `byte` file list parameter. PR [#&#8203;9383](https://github.com/fastapi/fastapi/pull/9383) by [@&#8203;Viicos](https://github.com/Viicos). ### [`v0.143.4`](https://github.com/fastapi/fastapi/releases/tag/0.143.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.143.3...0.143.4) ##### Upgrades - ⬆️ Add httpx2 to optional dependencies. PR [#&#8203;16512](https://github.com/fastapi/fastapi/pull/16512) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.143.3`](https://github.com/fastapi/fastapi/releases/tag/0.143.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.143.2...0.143.3) ##### Fixes - 🐛 Fix non-finite float serialization in JSONL and SSE streams. PR [#&#8203;16509](https://github.com/fastapi/fastapi/pull/16509) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 🎨 Update Python format in Markdown with Ruff. PR [#&#8203;16505](https://github.com/fastapi/fastapi/pull/16505) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.143.2`](https://github.com/fastapi/fastapi/releases/tag/0.143.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.143.1...0.143.2) ##### Fixes - 🐛 Fix blocking frontend fallback file checks. PR [#&#8203;16503](https://github.com/fastapi/fastapi/pull/16503) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;16500](https://github.com/fastapi/fastapi/pull/16500) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;16499](https://github.com/fastapi/fastapi/pull/16499) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for zh (update-outdated). PR [#&#8203;16501](https://github.com/fastapi/fastapi/pull/16501) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for hi (update-outdated). PR [#&#8203;16498](https://github.com/fastapi/fastapi/pull/16498) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for es (update-outdated). PR [#&#8203;16497](https://github.com/fastapi/fastapi/pull/16497) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for fr (update-outdated). PR [#&#8203;16495](https://github.com/fastapi/fastapi/pull/16495) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;16496](https://github.com/fastapi/fastapi/pull/16496) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for de (update-outdated). PR [#&#8203;16493](https://github.com/fastapi/fastapi/pull/16493) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;16494](https://github.com/fastapi/fastapi/pull/16494) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;16490](https://github.com/fastapi/fastapi/pull/16490) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;16491](https://github.com/fastapi/fastapi/pull/16491) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;16492](https://github.com/fastapi/fastapi/pull/16492) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). ##### Internal - ⬆ Bump pydantic-ai-slim from 2.49.0 to 2.53.0. PR [#&#8203;16487](https://github.com/fastapi/fastapi/pull/16487) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump werkzeug from 3.1.6 to 3.1.9. PR [#&#8203;16464](https://github.com/fastapi/fastapi/pull/16464) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.143.1`](https://github.com/fastapi/fastapi/releases/tag/0.143.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.143.0...0.143.1) ##### Fixes - 🐛 Fix included route metadata in `iter_route_contexts()`. PR [#&#8203;16484](https://github.com/fastapi/fastapi/pull/16484) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.143.0`](https://github.com/fastapi/fastapi/releases/tag/0.143.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.142.4...0.143.0) Automatic OpenTelemetry exporter setup is now opt-in. If you rely on FastAPI to configure exporters from `OTEL_*` environment variables, set `FASTAPI_OTEL_AUTO_CONFIGURE=true` or use `FastAPI(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 - 💥 Require opt-in for automatic OpenTelemetry exporter setup. PR [#&#8203;16476](https://github.com/fastapi/fastapi/pull/16476) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.142.4`](https://github.com/fastapi/fastapi/releases/tag/0.142.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.142.3...0.142.4) ##### Fixes - 🐛 Isolate FastAPI telemetry for excluded requests. PR [#&#8203;16470](https://github.com/fastapi/fastapi/pull/16470) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.142.3`](https://github.com/fastapi/fastapi/releases/tag/0.142.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.142.2...0.142.3) ##### Fixes - 🐛 Cache OpenTelemetry tracers to preserve warning deduplication. PR [#&#8203;16468](https://github.com/fastapi/fastapi/pull/16468) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Remove HTML title from newsletter to avoid the tooltip. PR [#&#8203;16461](https://github.com/fastapi/fastapi/pull/16461) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Embed the FastAPI and friends newsletter signup form. PR [#&#8203;16459](https://github.com/fastapi/fastapi/pull/16459) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update skill, use Asyncer for blocking code in threads. PR [#&#8203;16420](https://github.com/fastapi/fastapi/pull/16420) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for fr (add-missing). PR [#&#8203;16436](https://github.com/fastapi/fastapi/pull/16436) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for hi (add-missing). PR [#&#8203;16435](https://github.com/fastapi/fastapi/pull/16435) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for tr (add-missing). PR [#&#8203;16434](https://github.com/fastapi/fastapi/pull/16434) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for zh (add-missing). PR [#&#8203;16433](https://github.com/fastapi/fastapi/pull/16433) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for zh-hant (add-missing). PR [#&#8203;16432](https://github.com/fastapi/fastapi/pull/16432) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for pt (add-missing). PR [#&#8203;16431](https://github.com/fastapi/fastapi/pull/16431) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for de (add-missing). PR [#&#8203;16430](https://github.com/fastapi/fastapi/pull/16430) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for uk (add-missing). PR [#&#8203;16429](https://github.com/fastapi/fastapi/pull/16429) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ja (add-missing). PR [#&#8203;16428](https://github.com/fastapi/fastapi/pull/16428) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ko (add-missing). PR [#&#8203;16425](https://github.com/fastapi/fastapi/pull/16425) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for es (add-missing). PR [#&#8203;16426](https://github.com/fastapi/fastapi/pull/16426) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ru (add-missing). PR [#&#8203;16427](https://github.com/fastapi/fastapi/pull/16427) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update Russian LLM-prompt. PR [#&#8203;16449](https://github.com/fastapi/fastapi/pull/16449) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - 👷 Fix deprecated command in `bump-pre-commit-hooks` workflow. PR [#&#8203;16463](https://github.com/fastapi/fastapi/pull/16463) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔧 Update sponsors: remove Render. PR [#&#8203;16457](https://github.com/fastapi/fastapi/pull/16457) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Use `gpt-6-astra` model for translations. PR [#&#8203;16453](https://github.com/fastapi/fastapi/pull/16453) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump the python-packages group across 1 directory with 14 updates. PR [#&#8203;16447](https://github.com/fastapi/fastapi/pull/16447) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump starlette from 1.6.0 to 1.7.0. PR [#&#8203;16440](https://github.com/fastapi/fastapi/pull/16440) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR [#&#8203;16423](https://github.com/fastapi/fastapi/pull/16423) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump gitpython from 3.1.60 to 3.1.62. PR [#&#8203;16444](https://github.com/fastapi/fastapi/pull/16444) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;16443](https://github.com/fastapi/fastapi/pull/16443) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;16437](https://github.com/fastapi/fastapi/pull/16437) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - ⬆ Bump pre-commit hooks. PR [#&#8203;16442](https://github.com/fastapi/fastapi/pull/16442) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - ⬆ Bump urllib3 from 2.7.0 to 2.8.0. PR [#&#8203;16445](https://github.com/fastapi/fastapi/pull/16445) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the github-actions group with 3 updates. PR [#&#8203;16438](https://github.com/fastapi/fastapi/pull/16438) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.142.2`](https://github.com/fastapi/fastapi/releases/tag/0.142.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.142.1...0.142.2) ##### Fixes - 🐛 Allow startup when automatic OpenTelemetry configuration fails. PR [#&#8203;16418](https://github.com/fastapi/fastapi/pull/16418) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.142.1`](https://github.com/fastapi/fastapi/releases/tag/0.142.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.142.0...0.142.1) ##### Fixes - 🐛 Fix repeated endpoint wrapping in included routers. PR [#&#8203;16414](https://github.com/fastapi/fastapi/pull/16414) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.142.0`](https://github.com/fastapi/fastapi/releases/tag/0.142.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.141.1...0.142.0) ##### Features - ✨ Add native OpenTelemetry support. PR [#&#8203;16403](https://github.com/fastapi/fastapi/pull/16403) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Refactors - 📱 Improve mobile responsiveness of conference rail. PR [#&#8203;16196](https://github.com/fastapi/fastapi/pull/16196) by [@&#8203;alejsdev](https://github.com/alejsdev). - ♻️ Remove conf section and add event banner. PR [#&#8203;16193](https://github.com/fastapi/fastapi/pull/16193) by [@&#8203;alejsdev](https://github.com/alejsdev). ##### Docs - 🔥 Remove unused image. PR [#&#8203;16195](https://github.com/fastapi/fastapi/pull/16195) by [@&#8203;alejsdev](https://github.com/alejsdev). - 🐛 Use buttons for Termynal controls. PR [#&#8203;16132](https://github.com/fastapi/fastapi/pull/16132) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for hi (update-outdated). PR [#&#8203;16212](https://github.com/fastapi/fastapi/pull/16212) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;16210](https://github.com/fastapi/fastapi/pull/16210) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;16211](https://github.com/fastapi/fastapi/pull/16211) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;16208](https://github.com/fastapi/fastapi/pull/16208) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for de (update-outdated). PR [#&#8203;16209](https://github.com/fastapi/fastapi/pull/16209) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;16207](https://github.com/fastapi/fastapi/pull/16207) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;16206](https://github.com/fastapi/fastapi/pull/16206) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for fr (update-outdated). PR [#&#8203;16205](https://github.com/fastapi/fastapi/pull/16205) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for zh (update-outdated). PR [#&#8203;16204](https://github.com/fastapi/fastapi/pull/16204) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for es (update-outdated). PR [#&#8203;16203](https://github.com/fastapi/fastapi/pull/16203) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;16202](https://github.com/fastapi/fastapi/pull/16202) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;16201](https://github.com/fastapi/fastapi/pull/16201) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;16171](https://github.com/fastapi/fastapi/pull/16171) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). ##### Internal - ✅ Fix frontend test timeout with Starlette Git. PR [#&#8203;16408](https://github.com/fastapi/fastapi/pull/16408) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔧 Update sponsors: remove Permit.io. PR [#&#8203;16406](https://github.com/fastapi/fastapi/pull/16406) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump anyio from 4.12.1 to 4.14.2. PR [#&#8203;16375](https://github.com/fastapi/fastapi/pull/16375) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the python-packages group across 1 directory with 15 updates. PR [#&#8203;16285](https://github.com/fastapi/fastapi/pull/16285) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump starlette from 1.3.1 to 1.6.0. PR [#&#8203;16289](https://github.com/fastapi/fastapi/pull/16289) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump annotated-doc from 0.0.4 to 0.0.5. PR [#&#8203;16288](https://github.com/fastapi/fastapi/pull/16288) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump typing-inspection from 0.4.2 to 0.4.4. PR [#&#8203;16286](https://github.com/fastapi/fastapi/pull/16286) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump fastar from 0.11.0 to 0.12.0. PR [#&#8203;16287](https://github.com/fastapi/fastapi/pull/16287) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the github-actions group with 5 updates. PR [#&#8203;16284](https://github.com/fastapi/fastapi/pull/16284) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pre-commit hooks. PR [#&#8203;16290](https://github.com/fastapi/fastapi/pull/16290) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;16291](https://github.com/fastapi/fastapi/pull/16291) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;16282](https://github.com/fastapi/fastapi/pull/16282) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - ⬆️ Bump Typer min version to 0.26.1. PR [#&#8203;16252](https://github.com/fastapi/fastapi/pull/16252) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆️ Bump `setup-uv` action to `10.0.1`. PR [#&#8203;16249](https://github.com/fastapi/fastapi/pull/16249) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Update translation PR branches with PR Push. PR [#&#8203;16224](https://github.com/fastapi/fastapi/pull/16224) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⏪️ Restore `commit_in_place` input in `translate.yml`. PR [#&#8203;16216](https://github.com/fastapi/fastapi/pull/16216) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Migrate automatic labels to Latest Changes. PR [#&#8203;16185](https://github.com/fastapi/fastapi/pull/16185) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Fix branch name in `zizmor.yml` workflow (`main` -> `master`). PR [#&#8203;16178](https://github.com/fastapi/fastapi/pull/16178) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Remove legacy label check. PR [#&#8203;16180](https://github.com/fastapi/fastapi/pull/16180) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR [#&#8203;16162](https://github.com/fastapi/fastapi/pull/16162) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump gitpython from 3.1.57 to 3.1.58. PR [#&#8203;16157](https://github.com/fastapi/fastapi/pull/16157) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;16175](https://github.com/fastapi/fastapi/pull/16175) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🐛 Fix Sponsors Git authentication. PR [#&#8203;16174](https://github.com/fastapi/fastapi/pull/16174) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;16173](https://github.com/fastapi/fastapi/pull/16173) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - 🔐 Use PR Submit for automated updates. PR [#&#8203;16172](https://github.com/fastapi/fastapi/pull/16172) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔐 Use PR Submit for translations. PR [#&#8203;16168](https://github.com/fastapi/fastapi/pull/16168) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆️ Raise pytest-xdist minimum. PR [#&#8203;16170](https://github.com/fastapi/fastapi/pull/16170) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔐 Use PR Submit for pull requests. PR [#&#8203;16167](https://github.com/fastapi/fastapi/pull/16167) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Use GitHub CLI for Git authentication. PR [#&#8203;16166](https://github.com/fastapi/fastapi/pull/16166) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Use PR Push commit identity. PR [#&#8203;16164](https://github.com/fastapi/fastapi/pull/16164) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔒 Replace pre-commit PAT with PR Push. PR [#&#8203;16161](https://github.com/fastapi/fastapi/pull/16161) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Disable saving Zensical's `.cache` in `build-docs.yml`. PR [#&#8203;16156](https://github.com/fastapi/fastapi/pull/16156) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔥 Remove the old Latest Changes workflow. PR [#&#8203;16148](https://github.com/fastapi/fastapi/pull/16148) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump the python-packages group with 12 updates. PR [#&#8203;16121](https://github.com/fastapi/fastapi/pull/16121) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump cryptography from 48.0.1 to 50.0.0. PR [#&#8203;16142](https://github.com/fastapi/fastapi/pull/16142) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump gitpython from 3.1.54 to 3.1.57. PR [#&#8203;16141](https://github.com/fastapi/fastapi/pull/16141) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the github-actions group with 6 updates. PR [#&#8203;16120](https://github.com/fastapi/fastapi/pull/16120) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;16122](https://github.com/fastapi/fastapi/pull/16122) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;16119](https://github.com/fastapi/fastapi/pull/16119) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.141.1`](https://github.com/fastapi/fastapi/releases/tag/0.141.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.141.0...0.141.1) ##### Fixes - 🐛 Fix support for background tasks and headers from dependencies in `app.frontend()`. PR [#&#8203;16105](https://github.com/fastapi/fastapi/pull/16105) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Document `FASTAPI_ENV` in FastAPI CLI guide. PR [#&#8203;16104](https://github.com/fastapi/fastapi/pull/16104) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.141.0`](https://github.com/fastapi/fastapi/releases/tag/0.141.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.13...0.141.0) ##### Features - ✨ Add `app.frontend(check_dir="auto")`, to make local development more convenient with `fastapi dev`. PR [#&#8203;16102](https://github.com/fastapi/fastapi/pull/16102) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.13`](https://github.com/fastapi/fastapi/releases/tag/0.140.13) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.12...0.140.13) ##### Fixes - 🐛 Fix `status_code` being ignored for SSE and JSONL streaming endpoints. PR [#&#8203;15937](https://github.com/fastapi/fastapi/pull/15937) by [@&#8203;SAURABHSALVE](https://github.com/SAURABHSALVE). ##### Docs - 📝 Fix `format_sse_event` docstring rendering of `\n\n` terminator. PR [#&#8203;15613](https://github.com/fastapi/fastapi/pull/15613) by [@&#8203;AshNicolus](https://github.com/AshNicolus). - 📝 Add API reference page for fastapi.sse. PR [#&#8203;15930](https://github.com/fastapi/fastapi/pull/15930) by [@&#8203;SAURABHSALVE](https://github.com/SAURABHSALVE). ### [`v0.140.12`](https://github.com/fastapi/fastapi/releases/tag/0.140.12) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.11...0.140.12) ##### Fixes - 🐛 Fix line splitting in `format_sse_event` to comply with SSE spec. PR [#&#8203;15515](https://github.com/fastapi/fastapi/pull/15515) by [@&#8203;Zawwarsami16](https://github.com/Zawwarsami16). ### [`v0.140.11`](https://github.com/fastapi/fastapi/releases/tag/0.140.11) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.10...0.140.11) ##### Fixes - 🐛 Fix `response_model_*` params ignored for non-generator endpoints with `Iterable[..]` return type. PR [#&#8203;15093](https://github.com/fastapi/fastapi/pull/15093) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.140.10`](https://github.com/fastapi/fastapi/releases/tag/0.140.10) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.9...0.140.10) ##### Fixes - 🐛 Fix handling sequences with nested Annotated types. PR [#&#8203;14874](https://github.com/fastapi/fastapi/pull/14874) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - 🐛 Accept any base test failure as regression. PR [#&#8203;16092](https://github.com/fastapi/fastapi/pull/16092) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🐛 Preserve pytest exit code in regression check. PR [#&#8203;16091](https://github.com/fastapi/fastapi/pull/16091) by [@&#8203;tiangolo](https://github.com/tiangolo). - ✅ Test PR regressions against base code. PR [#&#8203;16090](https://github.com/fastapi/fastapi/pull/16090) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.9`](https://github.com/fastapi/fastapi/releases/tag/0.140.9) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.8...0.140.9) ##### Fixes - 🐛 Fix `exclude_defaults` not propagated to dict keys and values in `jsonable_encoder`. PR [#&#8203;16043](https://github.com/fastapi/fastapi/pull/16043) by [@&#8203;MBGrao](https://github.com/MBGrao). ##### Internal - ⬆ Bump gitpython from 3.1.50 to 3.1.54. PR [#&#8203;16047](https://github.com/fastapi/fastapi/pull/16047) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pymdown-extensions from 10.21.3 to 11.0. PR [#&#8203;16048](https://github.com/fastapi/fastapi/pull/16048) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pyasn1 from 0.6.3 to 0.6.4. PR [#&#8203;16045](https://github.com/fastapi/fastapi/pull/16045) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.140.8`](https://github.com/fastapi/fastapi/releases/tag/0.140.8) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.7...0.140.8) ##### Fixes - 🐛 Fix stream item type lost when using `include_router()`. PR [#&#8203;15077](https://github.com/fastapi/fastapi/pull/15077) by [@&#8203;alex-raw](https://github.com/alex-raw). ### [`v0.140.7`](https://github.com/fastapi/fastapi/releases/tag/0.140.7) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.6...0.140.7) ##### Refactors - ⚡️ Avoid flattening dependencies for OpenAPI. PR [#&#8203;16076](https://github.com/fastapi/fastapi/pull/16076) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆️ Upgrade latest-changes to 0.7.1. PR [#&#8203;16077](https://github.com/fastapi/fastapi/pull/16077) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Add OpenAPI dependency benchmarks. PR [#&#8203;16075](https://github.com/fastapi/fastapi/pull/16075) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.6`](https://github.com/fastapi/fastapi/releases/tag/0.140.6) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.5...0.140.6) ##### Refactors - ⚡️ Avoid flattening dependencies for request parameters, mainly for OpenAPI. PR [#&#8203;16073](https://github.com/fastapi/fastapi/pull/16073) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.5`](https://github.com/fastapi/fastapi/releases/tag/0.140.5) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.4...0.140.5) ##### Refactors - ⚡️ Avoid flattening dependencies for body fields. PR [#&#8203;16071](https://github.com/fastapi/fastapi/pull/16071) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.4`](https://github.com/fastapi/fastapi/releases/tag/0.140.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.3...0.140.4) ##### Refactors - ⚡️ Skip unused dependency repeat bookkeeping. PR [#&#8203;16069](https://github.com/fastapi/fastapi/pull/16069) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.3`](https://github.com/fastapi/fastapi/releases/tag/0.140.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.2...0.140.3) ##### Refactors - ⚡️ Avoid repeated dependency flattening in OpenAPI. PR [#&#8203;16067](https://github.com/fastapi/fastapi/pull/16067) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.2`](https://github.com/fastapi/fastapi/releases/tag/0.140.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.1...0.140.2) ##### Refactors - ⚡️ Stop retaining flat dependency trees. PR [#&#8203;16065](https://github.com/fastapi/fastapi/pull/16065) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👷 Add new memory benchmark. PR [#&#8203;16064](https://github.com/fastapi/fastapi/pull/16064) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.1`](https://github.com/fastapi/fastapi/releases/tag/0.140.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.140.0...0.140.1) ##### Refactors - ♻️ Update the lru_cache limit for dependencies to account for large apps. PR [#&#8203;16062](https://github.com/fastapi/fastapi/pull/16062) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.140.0`](https://github.com/fastapi/fastapi/releases/tag/0.140.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.139.2...0.140.0) ##### Refactors - ⚡️ Reduce memory usage in dependencies. PR [#&#8203;16049](https://github.com/fastapi/fastapi/pull/16049) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Fix links in docs. PR [#&#8203;15967](https://github.com/fastapi/fastapi/pull/15967) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Add Library Skills documentation. PR [#&#8203;16041](https://github.com/fastapi/fastapi/pull/16041) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs to use uv projects by default. PR [#&#8203;16032](https://github.com/fastapi/fastapi/pull/16032) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Restructure FastAPI People and related pages. PR [#&#8203;16015](https://github.com/fastapi/fastapi/pull/16015) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👷 Add CI memory benchmark. PR [#&#8203;16046](https://github.com/fastapi/fastapi/pull/16046) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;16027](https://github.com/fastapi/fastapi/pull/16027) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove now-obsolete scripts to generate data for FastAPI People. PR [#&#8203;16016](https://github.com/fastapi/fastapi/pull/16016) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.139.2`](https://github.com/fastapi/fastapi/releases/tag/0.139.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.139.1...0.139.2) ##### Fixes - 🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR [#&#8203;16013](https://github.com/fastapi/fastapi/pull/16013) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.139.1`](https://github.com/fastapi/fastapi/releases/tag/0.139.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.139.0...0.139.1) ##### Fixes - 🐛 Fix frontend fallback support for doted paths like `/users/john.doe`. PR [#&#8203;16011](https://github.com/fastapi/fastapi/pull/16011) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Fix topic repository list not being displayed and `skip_users` not being applied. PR [#&#8203;15995](https://github.com/fastapi/fastapi/pull/15995) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Translations - 🌐 Update translations for tr (update-outdated). PR [#&#8203;16005](https://github.com/fastapi/fastapi/pull/16005) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;15996](https://github.com/fastapi/fastapi/pull/15996) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for fr (update-outdated). PR [#&#8203;16006](https://github.com/fastapi/fastapi/pull/16006) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (update-outdated). PR [#&#8203;15999](https://github.com/fastapi/fastapi/pull/15999) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;16004](https://github.com/fastapi/fastapi/pull/16004) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh (update-outdated). PR [#&#8203;16001](https://github.com/fastapi/fastapi/pull/16001) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;16003](https://github.com/fastapi/fastapi/pull/16003) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;15998](https://github.com/fastapi/fastapi/pull/15998) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;16000](https://github.com/fastapi/fastapi/pull/16000) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;15997](https://github.com/fastapi/fastapi/pull/15997) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;16002](https://github.com/fastapi/fastapi/pull/16002) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for hi (add-missing). PR [#&#8203;15990](https://github.com/fastapi/fastapi/pull/15990) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for hi (add-missing). PR [#&#8203;15925](https://github.com/fastapi/fastapi/pull/15925) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for hi (add-missing). PR [#&#8203;15797](https://github.com/fastapi/fastapi/pull/15797) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update `llm-prompt.md` for Hindi. PR [#&#8203;15810](https://github.com/fastapi/fastapi/pull/15810) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Fix language-specific translation prompt for Russian language. PR [#&#8203;15924](https://github.com/fastapi/fastapi/pull/15924) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - ⬆ Bump the python-packages group across 1 directory with 6 updates. PR [#&#8203;15981](https://github.com/fastapi/fastapi/pull/15981) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR [#&#8203;15982](https://github.com/fastapi/fastapi/pull/15982) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the github-actions group across 1 directory with 4 updates. PR [#&#8203;15983](https://github.com/fastapi/fastapi/pull/15983) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pre-commit hooks. PR [#&#8203;15985](https://github.com/fastapi/fastapi/pull/15985) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Use `FASTAPI_LATEST_CHANGES` token in `bump-pre-commit-hooks` workflow. PR [#&#8203;15984](https://github.com/fastapi/fastapi/pull/15984) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Add GH workflow to bump pre-commit hook versions. PR [#&#8203;15873](https://github.com/fastapi/fastapi/pull/15873) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔧 Set Dependabot schedule interval to "monthly". PR [#&#8203;15874](https://github.com/fastapi/fastapi/pull/15874) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR [#&#8203;15950](https://github.com/fastapi/fastapi/pull/15950) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the python-packages group with 8 updates. PR [#&#8203;15952](https://github.com/fastapi/fastapi/pull/15952) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔧 Update sponsors: add TutorCruncher. PR [#&#8203;15947](https://github.com/fastapi/fastapi/pull/15947) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Fix notify translations checkout target. PR [#&#8203;15933](https://github.com/fastapi/fastapi/pull/15933) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Fix latest-changes checkout target. PR [#&#8203;15932](https://github.com/fastapi/fastapi/pull/15932) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: remove RapidProxy. PR [#&#8203;15929](https://github.com/fastapi/fastapi/pull/15929) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆️ Update issue-manager to 0.8.1. PR [#&#8203;15928](https://github.com/fastapi/fastapi/pull/15928) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆️ Update latest-changes to 0.6.1. PR [#&#8203;15926](https://github.com/fastapi/fastapi/pull/15926) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.139.0`](https://github.com/fastapi/fastapi/releases/tag/0.139.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.138.2...0.139.0) ##### Features - ✨ Support dependencies in `app.frontend()`, e.g. for automatic cookie authentication for the frontend. PR [#&#8203;15908](https://github.com/fastapi/fastapi/pull/15908) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for fr (update-outdated). PR [#&#8203;15897](https://github.com/fastapi/fastapi/pull/15897) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;15895](https://github.com/fastapi/fastapi/pull/15895) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;15896](https://github.com/fastapi/fastapi/pull/15896) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (update-outdated). PR [#&#8203;15899](https://github.com/fastapi/fastapi/pull/15899) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;15892](https://github.com/fastapi/fastapi/pull/15892) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;15891](https://github.com/fastapi/fastapi/pull/15891) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;15893](https://github.com/fastapi/fastapi/pull/15893) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh (update-outdated). PR [#&#8203;15898](https://github.com/fastapi/fastapi/pull/15898) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;15900](https://github.com/fastapi/fastapi/pull/15900) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;15890](https://github.com/fastapi/fastapi/pull/15890) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;15894](https://github.com/fastapi/fastapi/pull/15894) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (add-missing). PR [#&#8203;15888](https://github.com/fastapi/fastapi/pull/15888) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (add-missing). PR [#&#8203;15880](https://github.com/fastapi/fastapi/pull/15880) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh-hant (add-missing). PR [#&#8203;15889](https://github.com/fastapi/fastapi/pull/15889) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (add-missing). PR [#&#8203;15883](https://github.com/fastapi/fastapi/pull/15883) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh (add-missing). PR [#&#8203;15885](https://github.com/fastapi/fastapi/pull/15885) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ja (add-missing). PR [#&#8203;15882](https://github.com/fastapi/fastapi/pull/15882) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (add-missing). PR [#&#8203;15887](https://github.com/fastapi/fastapi/pull/15887) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (add-missing). PR [#&#8203;15886](https://github.com/fastapi/fastapi/pull/15886) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for fr (add-missing). PR [#&#8203;15881](https://github.com/fastapi/fastapi/pull/15881) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (add-missing). PR [#&#8203;15884](https://github.com/fastapi/fastapi/pull/15884) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ru (add-missing). PR [#&#8203;15879](https://github.com/fastapi/fastapi/pull/15879) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👥 Update FastAPI People - Experts. PR [#&#8203;15909](https://github.com/fastapi/fastapi/pull/15909) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;15906](https://github.com/fastapi/fastapi/pull/15906) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;15878](https://github.com/fastapi/fastapi/pull/15878) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Remove not needed `allow-unsafe-pr-checkout: true`. PR [#&#8203;15876](https://github.com/fastapi/fastapi/pull/15876) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump the github-actions group with 5 updates. PR [#&#8203;15872](https://github.com/fastapi/fastapi/pull/15872) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the python-packages group across 1 directory with 10 updates. PR [#&#8203;15870](https://github.com/fastapi/fastapi/pull/15870) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump CodSpeedHQ/action from 4.17.0 to 4.17.5 in the github-actions group. PR [#&#8203;15826](https://github.com/fastapi/fastapi/pull/15826) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.138.2`](https://github.com/fastapi/fastapi/releases/tag/0.138.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.138.1...0.138.2) ##### Refactors - ♻️ Make `app.frontend()` return 404 for methods other than `GET` or `HEAD` with no static file matches. PR [#&#8203;15863](https://github.com/fastapi/fastapi/pull/15863) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔧 Update sponsors: remove Stainless. PR [#&#8203;15862](https://github.com/fastapi/fastapi/pull/15862) by [@&#8203;tiangolo](https://github.com/tiangolo). - ♻️ Refactor how sponsors data is handled for banners. PR [#&#8203;15852](https://github.com/fastapi/fastapi/pull/15852) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.138.1`](https://github.com/fastapi/fastapi/releases/tag/0.138.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.138.0...0.138.1) ##### Refactors - ♻️ Refactor Library Skills, make info easier to find for agents. PR [#&#8203;15841](https://github.com/fastapi/fastapi/pull/15841) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👷 Simplify pull request workflow triggers. PR [#&#8203;15836](https://github.com/fastapi/fastapi/pull/15836) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Update issue-manager to 0.7.1. PR [#&#8203;15833](https://github.com/fastapi/fastapi/pull/15833) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆️ Update issue-manager to 0.7.0. PR [#&#8203;15831](https://github.com/fastapi/fastapi/pull/15831) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: Add TestMu again. PR [#&#8203;15830](https://github.com/fastapi/fastapi/pull/15830) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔒️ Update zizmor workflow security checks. PR [#&#8203;15820](https://github.com/fastapi/fastapi/pull/15820) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump pydantic-settings from 2.14.1 to 2.14.2. PR [#&#8203;15799](https://github.com/fastapi/fastapi/pull/15799) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.138.0`](https://github.com/fastapi/fastapi/releases/tag/0.138.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.137.2...0.138.0) ##### Features - ✨ Add support for `app.frontend("/", directory="dist")` and `router.frontend("/", directory="dist")`. PR [#&#8203;15800](https://github.com/fastapi/fastapi/pull/15800) by [@&#8203;tiangolo](https://github.com/tiangolo). - Read the docs: [Frontend](https://fastapi.tiangolo.com/tutorial/frontend/). ##### Docs - 📝 Fix typo in release notes. PR [#&#8203;15807](https://github.com/fastapi/fastapi/pull/15807) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Add `app.frontend()` instructions to Agent Library Skill. PR [#&#8203;15805](https://github.com/fastapi/fastapi/pull/15805) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update release notes link. PR [#&#8203;15802](https://github.com/fastapi/fastapi/pull/15802) by [@&#8203;tiangolo](https://github.com/tiangolo). - ✏️ Update white space characters in bigger apps. PR [#&#8203;15801](https://github.com/fastapi/fastapi/pull/15801) by [@&#8203;tiangolo](https://github.com/tiangolo). - ✏️ Fix grammar, typos, and broken links in docs. PR [#&#8203;15694](https://github.com/fastapi/fastapi/pull/15694) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Translations - 🌐 Enable Hindi docs translations. PR [#&#8203;15554](https://github.com/fastapi/fastapi/pull/15554) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - 🐛 Fix failing test, update format for raised errors. PR [#&#8203;15804](https://github.com/fastapi/fastapi/pull/15804) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Fix test-alls-green. PR [#&#8203;15803](https://github.com/fastapi/fastapi/pull/15803) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Enable checking `release-notes.md` for typos. PR [#&#8203;15796](https://github.com/fastapi/fastapi/pull/15796) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Tweak wording about deploying to FastAPI Cloud. PR [#&#8203;15793](https://github.com/fastapi/fastapi/pull/15793) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Use `gpt-5.5` model in `translate.py`, specify `-chat` to avoid warnings. PR [#&#8203;15792](https://github.com/fastapi/fastapi/pull/15792) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.137.2`](https://github.com/fastapi/fastapi/releases/tag/0.137.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.137.1...0.137.2) ##### Features - ✨ Add `iter_route_contexts()` for advanced use cases that used to use `router.routes` (e.g. Jupyverse). PR [#&#8203;15785](https://github.com/fastapi/fastapi/pull/15785) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Fix broken Markdown in Korean custom response docs. PR [#&#8203;15774](https://github.com/fastapi/fastapi/pull/15774) by [@&#8203;kooqooo](https://github.com/kooqooo). - 🌐 Update translations for fr (update-outdated). PR [#&#8203;15761](https://github.com/fastapi/fastapi/pull/15761) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;15760](https://github.com/fastapi/fastapi/pull/15760) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (update-outdated). PR [#&#8203;15759](https://github.com/fastapi/fastapi/pull/15759) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;15757](https://github.com/fastapi/fastapi/pull/15757) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;15756](https://github.com/fastapi/fastapi/pull/15756) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh (update-outdated). PR [#&#8203;15755](https://github.com/fastapi/fastapi/pull/15755) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;15754](https://github.com/fastapi/fastapi/pull/15754) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;15753](https://github.com/fastapi/fastapi/pull/15753) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;15752](https://github.com/fastapi/fastapi/pull/15752) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;15751](https://github.com/fastapi/fastapi/pull/15751) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;15758](https://github.com/fastapi/fastapi/pull/15758) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔧 Update sponsors: add BairesDev. PR [#&#8203;15787](https://github.com/fastapi/fastapi/pull/15787) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Update sponsors script to simplify previews. PR [#&#8203;15786](https://github.com/fastapi/fastapi/pull/15786) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump the python-packages group across 1 directory with 7 updates. PR [#&#8203;15777](https://github.com/fastapi/fastapi/pull/15777) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump cryptography from 46.0.7 to 48.0.1. PR [#&#8203;15779](https://github.com/fastapi/fastapi/pull/15779) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump aiohttp from 3.14.0 to 3.14.1. PR [#&#8203;15781](https://github.com/fastapi/fastapi/pull/15781) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump starlette from 1.2.1 to 1.3.1. PR [#&#8203;15780](https://github.com/fastapi/fastapi/pull/15780) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump astral-sh/setup-uv from 8.1.0 to 8.2.0 in the github-actions group. PR [#&#8203;15776](https://github.com/fastapi/fastapi/pull/15776) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump <https://github.com/crate-ci/typos> from v1.47.1 to v1.47.2 in the pre-commit group. PR [#&#8203;15775](https://github.com/fastapi/fastapi/pull/15775) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump python-multipart from 0.0.30 to 0.0.32. PR [#&#8203;15778](https://github.com/fastapi/fastapi/pull/15778) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⏪️ Revert removing scripts, only remove `coverage.sh`. PR [#&#8203;15772](https://github.com/fastapi/fastapi/pull/15772) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove unused scripts. PR [#&#8203;15771](https://github.com/fastapi/fastapi/pull/15771) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add ty configs to check docs sources. PR [#&#8203;15770](https://github.com/fastapi/fastapi/pull/15770) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add ty configs to check docs sources. PR [#&#8203;15769](https://github.com/fastapi/fastapi/pull/15769) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.137.1`](https://github.com/fastapi/fastapi/releases/tag/0.137.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.137.0...0.137.1) ##### Fixes - 🚨 Fix typing checks for APIRoute. PR [#&#8203;15765](https://github.com/fastapi/fastapi/pull/15765) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🐛 Fix bug, allow empty path in path operation in prefixless router. PR [#&#8203;15763](https://github.com/fastapi/fastapi/pull/15763) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.137.0`](https://github.com/fastapi/fastapi/releases/tag/0.137.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.136.3...0.137.0) ##### Breaking Changes - ♻️ Refactor internals to preserve `APIRouter` and `APIRoute` instances. PR [#&#8203;15745](https://github.com/fastapi/fastapi/pull/15745) by [@&#8203;tiangolo](https://github.com/tiangolo). Unblocks ✨ SO MANY THINGS ✨ Before this, `router.include_router(other_router)` would take each path operation from `other_router` and "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.routes` is no longer a plain list of `APIRoute` objects, it can contain these intermediate objects that can contain additional routers, forming a tree. Any logic that depended on iterating on the `router.routes` directly 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.routes` to modify them would now also see these new objects, and would not see all the routes in the app. `router.routes` should be considered an internal implementation detail, only passed around to the FastAPI functions that need it. ##### Features - Adding routes (path operations) after a router is included now works, they are reflected as they are not copied. - Including `subrouter` in `mainrouter` can be done before adding routes (path operations) to `subrouter`, because now the the entire object is stored instead of copying the routes. - As routes are not copied, in some cases that might save some memory. ##### Alpha Features This is not documented yet, so it's not officially supported yet and could change in the future. But, as `APIRoute` and `APIRouter` instances are now preserved, they could be customized. `APIRouter` has two new methods, `.matches()` and `.handle()`, counterpart to the existing ones in `APIRoute`. 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 - Custom `APIRoute` subclasses (undocumented, but alraedy works as desccribed above) - Custom `APIRouter` subclasses (undocumented, but already works as described above) - Dependencies per router - Exception handlers per router - Middleware per router - Other features planned ##### Docs - 📝 Update release notes. PR [#&#8203;15747](https://github.com/fastapi/fastapi/pull/15747) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update FastAPI Cloud deployment instructions. PR [#&#8203;15724](https://github.com/fastapi/fastapi/pull/15724) by [@&#8203;alejsdev](https://github.com/alejsdev). - ✏️ Use `Annotated` in inline example in `docs/en/docs/tutorial/body-multiple-params.md`. PR [#&#8203;15591](https://github.com/fastapi/fastapi/pull/15591) by [@&#8203;TheArchons](https://github.com/TheArchons). - 📝 Remove "NGINX Unit" from the list of ASGI-servers in docs. PR [#&#8203;15475](https://github.com/fastapi/fastapi/pull/15475) by [@&#8203;angryfoxx](https://github.com/angryfoxx). - 📝 Update `docs/en/docs/tutorial/security/oauth2-jwt.md`. PR [#&#8203;14781](https://github.com/fastapi/fastapi/pull/14781) by [@&#8203;zadevhub](https://github.com/zadevhub). ##### Translations - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;15671](https://github.com/fastapi/fastapi/pull/15671) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;15670](https://github.com/fastapi/fastapi/pull/15670) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for fr (update-outdated). PR [#&#8203;15669](https://github.com/fastapi/fastapi/pull/15669) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;15668](https://github.com/fastapi/fastapi/pull/15668) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;15667](https://github.com/fastapi/fastapi/pull/15667) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;15666](https://github.com/fastapi/fastapi/pull/15666) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh (update-outdated). PR [#&#8203;15665](https://github.com/fastapi/fastapi/pull/15665) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;15664](https://github.com/fastapi/fastapi/pull/15664) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (update-outdated). PR [#&#8203;15673](https://github.com/fastapi/fastapi/pull/15673) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;15672](https://github.com/fastapi/fastapi/pull/15672) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;15674](https://github.com/fastapi/fastapi/pull/15674) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔧 Update sponsors: remove TalorData. PR [#&#8203;15744](https://github.com/fastapi/fastapi/pull/15744) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: remove ExoFlare. PR [#&#8203;15736](https://github.com/fastapi/fastapi/pull/15736) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: remove InterviewPal. PR [#&#8203;15735](https://github.com/fastapi/fastapi/pull/15735) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: remove Liblab. PR [#&#8203;15731](https://github.com/fastapi/fastapi/pull/15731) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: remove Scalar. PR [#&#8203;15730](https://github.com/fastapi/fastapi/pull/15730) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump the python-packages group across 1 directory with 6 updates. PR [#&#8203;15721](https://github.com/fastapi/fastapi/pull/15721) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump python-multipart from 0.0.29 to 0.0.30. PR [#&#8203;15723](https://github.com/fastapi/fastapi/pull/15723) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the github-actions group with 3 updates. PR [#&#8203;15720](https://github.com/fastapi/fastapi/pull/15720) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump starlette from 1.1.0 to 1.2.1. PR [#&#8203;15722](https://github.com/fastapi/fastapi/pull/15722) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump <https://github.com/crate-ci/typos> from v1.46.0 to v1.47.1 in the pre-commit group. PR [#&#8203;15719](https://github.com/fastapi/fastapi/pull/15719) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔧 Update sponsors, add Rapidproxy. PR [#&#8203;15689](https://github.com/fastapi/fastapi/pull/15689) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: Remove TestMu. PR [#&#8203;15688](https://github.com/fastapi/fastapi/pull/15688) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump the python-packages group across 1 directory with 11 updates. PR [#&#8203;15683](https://github.com/fastapi/fastapi/pull/15683) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump aiohttp from 3.13.4 to 3.14.0. PR [#&#8203;15681](https://github.com/fastapi/fastapi/pull/15681) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the github-actions group with 2 updates. PR [#&#8203;15682](https://github.com/fastapi/fastapi/pull/15682) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump starlette from 1.0.0 to 1.1.0. PR [#&#8203;15684](https://github.com/fastapi/fastapi/pull/15684) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI People - Experts. PR [#&#8203;15677](https://github.com/fastapi/fastapi/pull/15677) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;15675](https://github.com/fastapi/fastapi/pull/15675) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;15662](https://github.com/fastapi/fastapi/pull/15662) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Automate release preparation. PR [#&#8203;15661](https://github.com/fastapi/fastapi/pull/15661) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove slim package stub, deprecated for a while. PR [#&#8203;15649](https://github.com/fastapi/fastapi/pull/15649) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump authlib from 1.6.11 to 1.7.2. PR [#&#8203;15512](https://github.com/fastapi/fastapi/pull/15512) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pymdown-extensions from 10.21.2 to 10.21.3. PR [#&#8203;15569](https://github.com/fastapi/fastapi/pull/15569) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump CodSpeedHQ/action from 4.14.0 to 4.15.1. PR [#&#8203;15513](https://github.com/fastapi/fastapi/pull/15513) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump python-multipart from 0.0.26 to 0.0.29. PR [#&#8203;15595](https://github.com/fastapi/fastapi/pull/15595) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔒️ Improve GitHub actions security. PR [#&#8203;15607](https://github.com/fastapi/fastapi/pull/15607) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⚰️ Remove ruff and coverage ignores for non-existing files. PR [#&#8203;15610](https://github.com/fastapi/fastapi/pull/15610) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ✅ Use custom `changing_dir` instead of `CLIRunner.isolated_filesystem` to set working dir. PR [#&#8203;15616](https://github.com/fastapi/fastapi/pull/15616) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ✅ Add `httpx2` test dependency to avoid deprecation warning. PR [#&#8203;15603](https://github.com/fastapi/fastapi/pull/15603) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump the python-packages group with 15 updates. PR [#&#8203;15594](https://github.com/fastapi/fastapi/pull/15594) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👷 Configure Dependabot to group updates and update weekly. PR [#&#8203;15560](https://github.com/fastapi/fastapi/pull/15560) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.136.3`](https://github.com/fastapi/fastapi/releases/tag/0.136.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3) ##### Refactors - ♻️ Do not accept underscore headers when using `convert_underscores=True` (the default). PR [#&#8203;15589](https://github.com/fastapi/fastapi/pull/15589) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.136.1`](https://github.com/fastapi/fastapi/releases/tag/0.136.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.136.0...0.136.1) ##### Upgrades - ⬆️ Update Pydantic v2 code to address deprecations. PR [#&#8203;15101](https://github.com/fastapi/fastapi/pull/15101) by [@&#8203;svlandeg](https://github.com/svlandeg). ##### Internal - 🔨 Tweak translation script. PR [#&#8203;15174](https://github.com/fastapi/fastapi/pull/15174) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6. PR [#&#8203;15408](https://github.com/fastapi/fastapi/pull/15408) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6. PR [#&#8203;15409](https://github.com/fastapi/fastapi/pull/15409) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pytest-codspeed from 4.3.0 to 4.4.0. PR [#&#8203;15407](https://github.com/fastapi/fastapi/pull/15407) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pytest-cov from 7.0.0 to 7.1.0. PR [#&#8203;15406](https://github.com/fastapi/fastapi/pull/15406) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR [#&#8203;15405](https://github.com/fastapi/fastapi/pull/15405) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump mypy from 1.19.1 to 1.20.1. PR [#&#8203;15410](https://github.com/fastapi/fastapi/pull/15410) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump python-dotenv from 1.2.1 to 1.2.2. PR [#&#8203;15400](https://github.com/fastapi/fastapi/pull/15400) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump starlette from 0.52.1 to 1.0.0. PR [#&#8203;15397](https://github.com/fastapi/fastapi/pull/15397) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pygithub from 2.8.1 to 2.9.1. PR [#&#8203;15396](https://github.com/fastapi/fastapi/pull/15396) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pyjwt from 2.12.0 to 2.12.1. PR [#&#8203;15393](https://github.com/fastapi/fastapi/pull/15393) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump zizmor from 1.23.1 to 1.24.1. PR [#&#8203;15394](https://github.com/fastapi/fastapi/pull/15394) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump strawberry-graphql from 0.312.3 to 0.314.3. PR [#&#8203;15395](https://github.com/fastapi/fastapi/pull/15395) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump python-multipart from 0.0.22 to 0.0.26. PR [#&#8203;15360](https://github.com/fastapi/fastapi/pull/15360) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump authlib from 1.6.9 to 1.6.11. PR [#&#8203;15373](https://github.com/fastapi/fastapi/pull/15373) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump aiohttp from 3.13.3 to 3.13.4. PR [#&#8203;15282](https://github.com/fastapi/fastapi/pull/15282) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pygments from 2.19.2 to 2.20.0. PR [#&#8203;15263](https://github.com/fastapi/fastapi/pull/15263) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2. PR [#&#8203;15391](https://github.com/fastapi/fastapi/pull/15391) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump pillow from 12.1.1 to 12.2.0. PR [#&#8203;15333](https://github.com/fastapi/fastapi/pull/15333) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pytest from 9.0.2 to 9.0.3. PR [#&#8203;15334](https://github.com/fastapi/fastapi/pull/15334) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR [#&#8203;15374](https://github.com/fastapi/fastapi/pull/15374) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR [#&#8203;15385](https://github.com/fastapi/fastapi/pull/15385) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔧 Update sponsors: remove Zuplo. PR [#&#8203;15369](https://github.com/fastapi/fastapi/pull/15369) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: remove Speakeasy. PR [#&#8203;15368](https://github.com/fastapi/fastapi/pull/15368) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔒️ Add zizmor and fix audit findings. PR [#&#8203;15316](https://github.com/fastapi/fastapi/pull/15316) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.136.0`](https://github.com/fastapi/fastapi/releases/tag/0.136.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.135.4...0.136.0) ##### Upgrades - ⬆️ Support free-threaded Python 3.14t. PR [#&#8203;15149](https://github.com/fastapi/fastapi/pull/15149) by [@&#8203;svlandeg](https://github.com/svlandeg). ### [`v0.135.4`](https://github.com/fastapi/fastapi/releases/tag/0.135.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.135.3...0.135.4) ##### Refactors - 🔥 Remove April Fool's `@app.vibe()` 🤪. PR [#&#8203;15363](https://github.com/fastapi/fastapi/pull/15363) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆ Bump cryptography from 46.0.5 to 46.0.7. PR [#&#8203;15314](https://github.com/fastapi/fastapi/pull/15314) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump strawberry-graphql from 0.307.1 to 0.312.3. PR [#&#8203;15309](https://github.com/fastapi/fastapi/pull/15309) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔨 Add pre-commit hook to ensure latest release header has date. PR [#&#8203;15293](https://github.com/fastapi/fastapi/pull/15293) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.135.3`](https://github.com/fastapi/fastapi/releases/tag/0.135.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.135.2...0.135.3) ##### Features - ✨ Add support for `@app.vibe()`. PR [#&#8203;15280](https://github.com/fastapi/fastapi/pull/15280) by [@&#8203;tiangolo](https://github.com/tiangolo). - New docs: [Vibe Coding](https://fastapi.tiangolo.com/advanced/vibe/). ##### Docs - ✏️ Fix typo for `client_secret` in OAuth2 form docstrings. PR [#&#8203;14946](https://github.com/fastapi/fastapi/pull/14946) by [@&#8203;bysiber](https://github.com/bysiber). ##### Internal - 👥 Update FastAPI People - Experts. PR [#&#8203;15279](https://github.com/fastapi/fastapi/pull/15279) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump orjson from 3.11.7 to 3.11.8. PR [#&#8203;15276](https://github.com/fastapi/fastapi/pull/15276) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump ruff from 0.15.0 to 0.15.8. PR [#&#8203;15277](https://github.com/fastapi/fastapi/pull/15277) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;15274](https://github.com/fastapi/fastapi/pull/15274) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump fastmcp from 2.14.5 to 3.2.0. PR [#&#8203;15267](https://github.com/fastapi/fastapi/pull/15267) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;15270](https://github.com/fastapi/fastapi/pull/15270) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump requests from 2.32.5 to 2.33.0. PR [#&#8203;15228](https://github.com/fastapi/fastapi/pull/15228) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👷 Add ty check to `lint.sh`. PR [#&#8203;15136](https://github.com/fastapi/fastapi/pull/15136) by [@&#8203;svlandeg](https://github.com/svlandeg). ### [`v0.135.2`](https://github.com/fastapi/fastapi/releases/tag/0.135.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.135.1...0.135.2) ##### Upgrades - ⬆️ Increase lower bound to `pydantic >=2.9.0.` and fix the test suite. PR [#&#8203;15139](https://github.com/fastapi/fastapi/pull/15139) by [@&#8203;svlandeg](https://github.com/svlandeg). ##### Docs - 📝 Add missing last release notes dates. PR [#&#8203;15202](https://github.com/fastapi/fastapi/pull/15202) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs for contributors and team members regarding translation PRs. PR [#&#8203;15200](https://github.com/fastapi/fastapi/pull/15200) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 💄 Fix code blocks in reference docs overflowing table width. PR [#&#8203;15094](https://github.com/fastapi/fastapi/pull/15094) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Fix duplicated words in docstrings. PR [#&#8203;15116](https://github.com/fastapi/fastapi/pull/15116) by [@&#8203;AhsanSheraz](https://github.com/AhsanSheraz). - 📝 Add docs for `pyproject.toml` with `entrypoint`. PR [#&#8203;15075](https://github.com/fastapi/fastapi/pull/15075) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update links in docs to no longer use the classes external-link and internal-link. PR [#&#8203;15061](https://github.com/fastapi/fastapi/pull/15061) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Add JS and CSS handling for automatic `target=_blank` for links in docs. PR [#&#8203;15063](https://github.com/fastapi/fastapi/pull/15063) by [@&#8203;tiangolo](https://github.com/tiangolo). - 💄 Update styles for internal and external links in new tab. PR [#&#8203;15058](https://github.com/fastapi/fastapi/pull/15058) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Add documentation for the FastAPI VS Code extension. PR [#&#8203;15008](https://github.com/fastapi/fastapi/pull/15008) by [@&#8203;savannahostrowski](https://github.com/savannahostrowski). - 📝 Fix doctrings for `max_digits` and `decimal_places`. PR [#&#8203;14944](https://github.com/fastapi/fastapi/pull/14944) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Add dates to release notes. PR [#&#8203;15001](https://github.com/fastapi/fastapi/pull/15001) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Translations - 🌐 Update translations for zh (update-outdated). PR [#&#8203;15177](https://github.com/fastapi/fastapi/pull/15177) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;15178](https://github.com/fastapi/fastapi/pull/15178) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh-hant (add-missing). PR [#&#8203;15176](https://github.com/fastapi/fastapi/pull/15176) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh (add-missing). PR [#&#8203;15175](https://github.com/fastapi/fastapi/pull/15175) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;15171](https://github.com/fastapi/fastapi/pull/15171) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;15170](https://github.com/fastapi/fastapi/pull/15170) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;15172](https://github.com/fastapi/fastapi/pull/15172) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (add-missing). PR [#&#8203;15168](https://github.com/fastapi/fastapi/pull/15168) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ja (add-missing). PR [#&#8203;15167](https://github.com/fastapi/fastapi/pull/15167) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (add-missing). PR [#&#8203;15169](https://github.com/fastapi/fastapi/pull/15169) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for fr (update-outdated). PR [#&#8203;15165](https://github.com/fastapi/fastapi/pull/15165) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for fr (add-missing). PR [#&#8203;15163](https://github.com/fastapi/fastapi/pull/15163) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;15160](https://github.com/fastapi/fastapi/pull/15160) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (add-missing). PR [#&#8203;15158](https://github.com/fastapi/fastapi/pull/15158) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (add-missing). PR [#&#8203;15157](https://github.com/fastapi/fastapi/pull/15157) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;15159](https://github.com/fastapi/fastapi/pull/15159) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;15155](https://github.com/fastapi/fastapi/pull/15155) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (add-missing). PR [#&#8203;15154](https://github.com/fastapi/fastapi/pull/15154) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (update-outdated). PR [#&#8203;15156](https://github.com/fastapi/fastapi/pull/15156) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ru (update-and-add). PR [#&#8203;15152](https://github.com/fastapi/fastapi/pull/15152) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (add-missing). PR [#&#8203;15153](https://github.com/fastapi/fastapi/pull/15153) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔨 Exclude spam comments from statistics in `scripts/people.py`. PR [#&#8203;15088](https://github.com/fastapi/fastapi/pull/15088) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump authlib from 1.6.7 to 1.6.9. PR [#&#8203;15128](https://github.com/fastapi/fastapi/pull/15128) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pyasn1 from 0.6.2 to 0.6.3. PR [#&#8203;15143](https://github.com/fastapi/fastapi/pull/15143) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump ujson from 5.11.0 to 5.12.0. PR [#&#8203;15150](https://github.com/fastapi/fastapi/pull/15150) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔨 Tweak translation workflow and translation fixer tool. PR [#&#8203;15166](https://github.com/fastapi/fastapi/pull/15166) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔨 Fix `commit_in_place` passed via env variable in `translate.yml` workflow. PR [#&#8203;15151](https://github.com/fastapi/fastapi/pull/15151) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔨 Update translation general prompt to enforce link style in translation matches the original link style. PR [#&#8203;15148](https://github.com/fastapi/fastapi/pull/15148) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Re-enable translation workflow run by cron in CI (twice a month). PR [#&#8203;15145](https://github.com/fastapi/fastapi/pull/15145) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Add `ty` to precommit. PR [#&#8203;15091](https://github.com/fastapi/fastapi/pull/15091) by [@&#8203;svlandeg](https://github.com/svlandeg). - ⬆ Bump dorny/paths-filter from 3 to 4. PR [#&#8203;15106](https://github.com/fastapi/fastapi/pull/15106) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump cairosvg from 2.8.2 to 2.9.0. PR [#&#8203;15108](https://github.com/fastapi/fastapi/pull/15108) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pyjwt from 2.11.0 to 2.12.0. PR [#&#8203;15110](https://github.com/fastapi/fastapi/pull/15110) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump black from 26.1.0 to 26.3.1. PR [#&#8203;15100](https://github.com/fastapi/fastapi/pull/15100) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔨 Update script to autofix permalinks to account for headers with Markdown links. PR [#&#8203;15062](https://github.com/fastapi/fastapi/pull/15062) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📌 Pin Click for MkDocs live reload. PR [#&#8203;15057](https://github.com/fastapi/fastapi/pull/15057) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump werkzeug from 3.1.5 to 3.1.6. PR [#&#8203;14948](https://github.com/fastapi/fastapi/pull/14948) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pydantic-ai from 1.62.0 to 1.63.0. PR [#&#8203;15035](https://github.com/fastapi/fastapi/pull/15035) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pytest-codspeed from 4.2.0 to 4.3.0. PR [#&#8203;15034](https://github.com/fastapi/fastapi/pull/15034) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump strawberry-graphql from 0.291.2 to 0.307.1. PR [#&#8203;15033](https://github.com/fastapi/fastapi/pull/15033) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump typer from 0.21.1 to 0.24.1. PR [#&#8203;15032](https://github.com/fastapi/fastapi/pull/15032) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump actions/download-artifact from 7 to 8. PR [#&#8203;15020](https://github.com/fastapi/fastapi/pull/15020) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump actions/upload-artifact from 6 to 7. PR [#&#8203;15019](https://github.com/fastapi/fastapi/pull/15019) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.135.1`](https://github.com/fastapi/fastapi/releases/tag/0.135.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.135.0...0.135.1) ##### Fixes - 🐛 Fix, avoid yield from a TaskGroup, only as an async context manager, closed in the request async exit stack. PR [#&#8203;15038](https://github.com/fastapi/fastapi/pull/15038) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - ✏️ Fix typo in `docs/en/docs/_llm-test.md`. PR [#&#8203;15007](https://github.com/fastapi/fastapi/pull/15007) by [@&#8203;adityagiri3600](https://github.com/adityagiri3600). - 📝 Update Skill, optimize context, trim and refactor into references. PR [#&#8203;15031](https://github.com/fastapi/fastapi/pull/15031) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👥 Update FastAPI People - Experts. PR [#&#8203;15037](https://github.com/fastapi/fastapi/pull/15037) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;15029](https://github.com/fastapi/fastapi/pull/15029) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;15036](https://github.com/fastapi/fastapi/pull/15036) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.135.0`](https://github.com/fastapi/fastapi/releases/tag/0.135.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.134.0...0.135.0) ##### Features - ✨ Add support for Server Sent Events. PR [#&#8203;15030](https://github.com/fastapi/fastapi/pull/15030) by [@&#8203;tiangolo](https://github.com/tiangolo). - New docs: [Server-Sent Events (SSE)](https://fastapi.tiangolo.com/tutorial/server-sent-events/). ### [`v0.134.0`](https://github.com/fastapi/fastapi/releases/tag/0.134.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.133.1...0.134.0) ##### Features - ✨ Add support for streaming JSON Lines and binary data with `yield`. PR [#&#8203;15022](https://github.com/fastapi/fastapi/pull/15022) by [@&#8203;tiangolo](https://github.com/tiangolo). - This also upgrades Starlette from `>=0.40.0` to `>=0.46.0`, as it's needed to properly unrwap and re-raise exceptions from exception groups. - New docs: [Stream JSON Lines](https://fastapi.tiangolo.com/tutorial/stream-json-lines/). - And new docs: [Stream Data](https://fastapi.tiangolo.com/advanced/stream-data/). ##### Docs - 📝 Update Library Agent Skill with streaming responses. PR [#&#8203;15024](https://github.com/fastapi/fastapi/pull/15024) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs for responses and new stream with `yield`. PR [#&#8203;15023](https://github.com/fastapi/fastapi/pull/15023) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Add `await` in `StreamingResponse` code example to allow cancellation. PR [#&#8203;14681](https://github.com/fastapi/fastapi/pull/14681) by [@&#8203;casperdcl](https://github.com/casperdcl). - 📝 Rename `docs_src/websockets` to `docs_src/websockets_` to avoid import errors. PR [#&#8203;14979](https://github.com/fastapi/fastapi/pull/14979) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - 🔨 Run tests with `pytest-xdist` and `pytest-cov`. PR [#&#8203;14992](https://github.com/fastapi/fastapi/pull/14992) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.133.1`](https://github.com/fastapi/fastapi/releases/tag/0.133.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.133.0...0.133.1) ##### Features - 🔧 Add FastAPI Agent Skill. PR [#&#8203;14982](https://github.com/fastapi/fastapi/pull/14982) by [@&#8203;tiangolo](https://github.com/tiangolo). - Read more about it in [Library Agent Skills](https://tiangolo.com/ideas/library-agent-skills/). ##### Internal - ✅ Fix all tests are skipped on Windows. PR [#&#8203;14994](https://github.com/fastapi/fastapi/pull/14994) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.133.0`](https://github.com/fastapi/fastapi/releases/tag/0.133.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.132.1...0.133.0) ##### Upgrades - ⬆️ Add support for Starlette 1.0.0+. PR [#&#8203;14987](https://github.com/fastapi/fastapi/pull/14987) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.132.1`](https://github.com/fastapi/fastapi/releases/tag/0.132.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.132.0...0.132.1) ##### Refactors - ♻️ Refactor logic to handle OpenAPI and Swagger UI escaping data. PR [#&#8203;14986](https://github.com/fastapi/fastapi/pull/14986) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👥 Update FastAPI People - Experts. PR [#&#8203;14972](https://github.com/fastapi/fastapi/pull/14972) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Allow skipping `benchmark` job in `test` workflow. PR [#&#8203;14974](https://github.com/fastapi/fastapi/pull/14974) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.132.0`](https://github.com/fastapi/fastapi/releases/tag/0.132.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.131.0...0.132.0) ##### Breaking Changes - 🔒️ Add `strict_content_type` checking for JSON requests. PR [#&#8203;14978](https://github.com/fastapi/fastapi/pull/14978) by [@&#8203;tiangolo](https://github.com/tiangolo). - Now FastAPI checks, by default, that JSON requests have a `Content-Type` header with a valid JSON value, like `application/json`, and rejects requests that don't. - If the clients for your app don't send a valid `Content-Type` header you can disable this with `strict_content_type=False`. - Check the new docs: [Strict Content-Type Checking](https://fastapi.tiangolo.com/advanced/strict-content-type/). ##### Internal - ⬆ Bump flask from 3.1.2 to 3.1.3. PR [#&#8203;14949](https://github.com/fastapi/fastapi/pull/14949) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Update all dependencies to use `griffelib` instead of `griffe`. PR [#&#8203;14973](https://github.com/fastapi/fastapi/pull/14973) by [@&#8203;svlandeg](https://github.com/svlandeg). - 🔨 Fix `FastAPI People` workflow. PR [#&#8203;14951](https://github.com/fastapi/fastapi/pull/14951) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Do not run codspeed with coverage as it's not tracked. PR [#&#8203;14966](https://github.com/fastapi/fastapi/pull/14966) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Do not include benchmark tests in coverage to speed up coverage processing. PR [#&#8203;14965](https://github.com/fastapi/fastapi/pull/14965) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.131.0`](https://github.com/fastapi/fastapi/releases/tag/0.131.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.130.0...0.131.0) ##### Breaking Changes - 🗑️ Deprecate `ORJSONResponse` and `UJSONResponse`. PR [#&#8203;14964](https://github.com/fastapi/fastapi/pull/14964) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.130.0`](https://github.com/fastapi/fastapi/releases/tag/0.130.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.129.2...0.130.0) ##### Features - ✨ Serialize JSON response with Pydantic (in Rust), when there's a Pydantic return type or response model. PR [#&#8203;14962](https://github.com/fastapi/fastapi/pull/14962) by [@&#8203;tiangolo](https://github.com/tiangolo). - This results in 2x (or more) performance increase for JSON responses. - New docs: [Custom Response - JSON Performance](https://fastapi.tiangolo.com/advanced/custom-response/#json-performance). ### [`v0.129.2`](https://github.com/fastapi/fastapi/releases/tag/0.129.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.129.1...0.129.2) ##### Internal - ⬆️ Upgrade pytest. PR [#&#8203;14959](https://github.com/fastapi/fastapi/pull/14959) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Fix CI, do not attempt to publish `fastapi-slim`. PR [#&#8203;14958](https://github.com/fastapi/fastapi/pull/14958) by [@&#8203;tiangolo](https://github.com/tiangolo). - ➖ Drop support for `fastapi-slim`, no more versions will be released, use only `"fastapi[standard]"` or `fastapi`. PR [#&#8203;14957](https://github.com/fastapi/fastapi/pull/14957) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update pyproject.toml, remove unneeded lines. PR [#&#8203;14956](https://github.com/fastapi/fastapi/pull/14956) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.129.1`](https://github.com/fastapi/fastapi/releases/tag/0.129.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.129.0...0.129.1) ##### Fixes - ♻️ Fix JSON Schema for bytes, use `"contentMediaType": "application/octet-stream"` instead of `"format": "binary"`. PR [#&#8203;14953](https://github.com/fastapi/fastapi/pull/14953) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 🔨 Add Kapa.ai widget (AI chatbot). PR [#&#8203;14938](https://github.com/fastapi/fastapi/pull/14938) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove Python 3.9 specific files, no longer needed after updating translations. PR [#&#8203;14931](https://github.com/fastapi/fastapi/pull/14931) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs for JWT to prevent timing attacks. PR [#&#8203;14908](https://github.com/fastapi/fastapi/pull/14908) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - ✏️ Fix several typos in ru translations. PR [#&#8203;14934](https://github.com/fastapi/fastapi/pull/14934) by [@&#8203;argoarsiks](https://github.com/argoarsiks). - 🌐 Update translations for ko (update-all and add-missing). PR [#&#8203;14923](https://github.com/fastapi/fastapi/pull/14923) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for uk (add-missing). PR [#&#8203;14922](https://github.com/fastapi/fastapi/pull/14922) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for zh-hant (update-all and add-missing). PR [#&#8203;14921](https://github.com/fastapi/fastapi/pull/14921) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for fr (update-all and add-missing). PR [#&#8203;14920](https://github.com/fastapi/fastapi/pull/14920) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for de (update-all) . PR [#&#8203;14910](https://github.com/fastapi/fastapi/pull/14910) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for ja (update-all). PR [#&#8203;14916](https://github.com/fastapi/fastapi/pull/14916) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for pt (update-all). PR [#&#8203;14912](https://github.com/fastapi/fastapi/pull/14912) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for es (update-all and add-missing). PR [#&#8203;14911](https://github.com/fastapi/fastapi/pull/14911) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for zh (update-all). PR [#&#8203;14917](https://github.com/fastapi/fastapi/pull/14917) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for uk (update-all). PR [#&#8203;14914](https://github.com/fastapi/fastapi/pull/14914) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for tr (update-all). PR [#&#8203;14913](https://github.com/fastapi/fastapi/pull/14913) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;14909](https://github.com/fastapi/fastapi/pull/14909) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - 👷 Always run tests on push to `master` branch and when run by scheduler. PR [#&#8203;14940](https://github.com/fastapi/fastapi/pull/14940) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🎨 Upgrade typing syntax for Python 3.10. PR [#&#8203;14932](https://github.com/fastapi/fastapi/pull/14932) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump cryptography from 46.0.4 to 46.0.5. PR [#&#8203;14892](https://github.com/fastapi/fastapi/pull/14892) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pillow from 12.1.0 to 12.1.1. PR [#&#8203;14899](https://github.com/fastapi/fastapi/pull/14899) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.129.0`](https://github.com/fastapi/fastapi/releases/tag/0.129.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.8...0.129.0) ##### Breaking Changes - ➖ Drop support for Python 3.9. PR [#&#8203;14897](https://github.com/fastapi/fastapi/pull/14897) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Refactors - 🎨 Update internal types for Python 3.10. PR [#&#8203;14898](https://github.com/fastapi/fastapi/pull/14898) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Update highlights in webhooks docs. PR [#&#8203;14905](https://github.com/fastapi/fastapi/pull/14905) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update source examples and docs from Python 3.9 to 3.10. PR [#&#8203;14900](https://github.com/fastapi/fastapi/pull/14900) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔨 Update docs.py scripts to migrate Python 3.9 to Python 3.10. PR [#&#8203;14906](https://github.com/fastapi/fastapi/pull/14906) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.128.8`](https://github.com/fastapi/fastapi/releases/tag/0.128.8) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.7...0.128.8) ##### Docs - 📝 Fix grammar in `docs/en/docs/tutorial/first-steps.md`. PR [#&#8203;14708](https://github.com/fastapi/fastapi/pull/14708) by [@&#8203;SanjanaS10](https://github.com/SanjanaS10). ##### Internal - 🔨 Tweak PDM hook script. PR [#&#8203;14895](https://github.com/fastapi/fastapi/pull/14895) by [@&#8203;tiangolo](https://github.com/tiangolo). - ♻️ Update build setup for `fastapi-slim`, deprecate it, and make it only depend on `fastapi`. PR [#&#8203;14894](https://github.com/fastapi/fastapi/pull/14894) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.128.7`](https://github.com/fastapi/fastapi/releases/tag/0.128.7) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.6...0.128.7) ##### Features - ✨ Show a clear error on attempt to include router into itself. PR [#&#8203;14258](https://github.com/fastapi/fastapi/pull/14258) by [@&#8203;JavierSanchezCastro](https://github.com/JavierSanchezCastro). - ✨ Replace `dict` by `Mapping` on `HTTPException.headers`. PR [#&#8203;12997](https://github.com/fastapi/fastapi/pull/12997) by [@&#8203;rijenkii](https://github.com/rijenkii). ##### Refactors - ♻️ Simplify reading files in memory, do it sequentially instead of (fake) parallel. PR [#&#8203;14884](https://github.com/fastapi/fastapi/pull/14884) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Use `dfn` tag for definitions instead of `abbr` in docs. PR [#&#8203;14744](https://github.com/fastapi/fastapi/pull/14744) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - ✅ Tweak comment in test to reference PR. PR [#&#8203;14885](https://github.com/fastapi/fastapi/pull/14885) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update LLM-prompt for `abbr` and `dfn` tags. PR [#&#8203;14747](https://github.com/fastapi/fastapi/pull/14747) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ✅ Test order for the submitted byte Files. PR [#&#8203;14828](https://github.com/fastapi/fastapi/pull/14828) by [@&#8203;valentinDruzhinin](https://github.com/valentinDruzhinin). - 🔧 Configure `test` workflow to run tests with `inline-snapshot=review`. PR [#&#8203;14876](https://github.com/fastapi/fastapi/pull/14876) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.128.6`](https://github.com/fastapi/fastapi/releases/tag/0.128.6) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.5...0.128.6) ##### Fixes - 🐛 Fix `on_startup` and `on_shutdown` parameters of `APIRouter`. PR [#&#8203;14873](https://github.com/fastapi/fastapi/pull/14873) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Translations - 🌐 Update translations for zh (update-outdated). PR [#&#8203;14843](https://github.com/fastapi/fastapi/pull/14843) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ✅ Fix parameterized tests with snapshots. PR [#&#8203;14875](https://github.com/fastapi/fastapi/pull/14875) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.128.5`](https://github.com/fastapi/fastapi/releases/tag/0.128.5) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.4...0.128.5) ##### Refactors - ♻️ Refactor and simplify Pydantic v2 (and v1) compatibility internal utils. PR [#&#8203;14862](https://github.com/fastapi/fastapi/pull/14862) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ✅ Add inline snapshot tests for OpenAPI before changes from Pydantic v2. PR [#&#8203;14864](https://github.com/fastapi/fastapi/pull/14864) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.128.4`](https://github.com/fastapi/fastapi/releases/tag/0.128.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.3...0.128.4) ##### Refactors - ♻️ Refactor internals, simplify Pydantic v2/v1 utils, `create_model_field`, better types for `lenient_issubclass`. PR [#&#8203;14860](https://github.com/fastapi/fastapi/pull/14860) by [@&#8203;tiangolo](https://github.com/tiangolo). - ♻️ Simplify internals, remove Pydantic v1 only logic, no longer needed. PR [#&#8203;14857](https://github.com/fastapi/fastapi/pull/14857) by [@&#8203;tiangolo](https://github.com/tiangolo). - ♻️ Refactor internals, cleanup unneeded Pydantic v1 specific logic. PR [#&#8203;14856](https://github.com/fastapi/fastapi/pull/14856) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for fr (outdated pages). PR [#&#8203;14839](https://github.com/fastapi/fastapi/pull/14839) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for tr (outdated and missing). PR [#&#8203;14838](https://github.com/fastapi/fastapi/pull/14838) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - ⬆️ Upgrade development dependencies. PR [#&#8203;14854](https://github.com/fastapi/fastapi/pull/14854) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.128.3`](https://github.com/fastapi/fastapi/releases/tag/0.128.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.2...0.128.3) ##### Refactors - ♻️ Re-implement `on_event` in FastAPI for compatibility with the next Starlette, while keeping backwards compatibility. PR [#&#8203;14851](https://github.com/fastapi/fastapi/pull/14851) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Upgrades - ⬆️ Upgrade Starlette supported version range to `starlette>=0.40.0,<1.0.0`. PR [#&#8203;14853](https://github.com/fastapi/fastapi/pull/14853) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for ru (update-outdated). PR [#&#8203;14834](https://github.com/fastapi/fastapi/pull/14834) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 👷 Run tests with Starlette from git. PR [#&#8203;14849](https://github.com/fastapi/fastapi/pull/14849) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Run tests with lower bound uv sync, upgrade `fastapi[all]` minimum dependencies: `ujson >=5.8.0`, `orjson >=3.9.3`. PR [#&#8203;14846](https://github.com/fastapi/fastapi/pull/14846) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.128.2`](https://github.com/fastapi/fastapi/releases/tag/0.128.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.1...0.128.2) ##### Features - ✨ Add support for PEP695 `TypeAliasType`. PR [#&#8203;13920](https://github.com/fastapi/fastapi/pull/13920) by [@&#8203;cstruct](https://github.com/cstruct). - ✨ Allow `Response` type hint as dependency annotation. PR [#&#8203;14794](https://github.com/fastapi/fastapi/pull/14794) by [@&#8203;jonathan-fulton](https://github.com/jonathan-fulton). ##### Fixes - 🐛 Fix using `Json[list[str]]` type (issue [#&#8203;10997](https://github.com/fastapi/fastapi/issues/10997)). PR [#&#8203;14616](https://github.com/fastapi/fastapi/pull/14616) by [@&#8203;mkanetsuna](https://github.com/mkanetsuna). ##### Docs - 📝 Update docs for translations. PR [#&#8203;14830](https://github.com/fastapi/fastapi/pull/14830) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Fix duplicate word in `advanced-dependencies.md`. PR [#&#8203;14815](https://github.com/fastapi/fastapi/pull/14815) by [@&#8203;Rayyan-Oumlil](https://github.com/Rayyan-Oumlil). ##### Translations - 🌐 Enable Traditional Chinese translations. PR [#&#8203;14842](https://github.com/fastapi/fastapi/pull/14842) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Enable French docs translations. PR [#&#8203;14841](https://github.com/fastapi/fastapi/pull/14841) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for fr (translate-page). PR [#&#8203;14837](https://github.com/fastapi/fastapi/pull/14837) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for de (update-outdated). PR [#&#8203;14836](https://github.com/fastapi/fastapi/pull/14836) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;14833](https://github.com/fastapi/fastapi/pull/14833) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;14835](https://github.com/fastapi/fastapi/pull/14835) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;14832](https://github.com/fastapi/fastapi/pull/14832) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;14831](https://github.com/fastapi/fastapi/pull/14831) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for tr (add-missing). PR [#&#8203;14790](https://github.com/fastapi/fastapi/pull/14790) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for fr (update-outdated). PR [#&#8203;14826](https://github.com/fastapi/fastapi/pull/14826) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for zh-hant (update-outdated). PR [#&#8203;14825](https://github.com/fastapi/fastapi/pull/14825) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;14822](https://github.com/fastapi/fastapi/pull/14822) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Update docs and translations scripts, enable Turkish. PR [#&#8203;14824](https://github.com/fastapi/fastapi/pull/14824) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔨 Add max pages to translate to configs. PR [#&#8203;14840](https://github.com/fastapi/fastapi/pull/14840) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.128.1`](https://github.com/fastapi/fastapi/releases/tag/0.128.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.128.0...0.128.1) ##### Features - ✨ Add `viewport` meta tag to improve Swagger UI on mobile devices. PR [#&#8203;14777](https://github.com/fastapi/fastapi/pull/14777) by [@&#8203;Joab0](https://github.com/Joab0). - 🚸 Improve error message for invalid query parameter type annotations. PR [#&#8203;14479](https://github.com/fastapi/fastapi/pull/14479) by [@&#8203;retwish](https://github.com/retwish). ##### Fixes - 🐛 Update `ValidationError` schema to include `input` and `ctx`. PR [#&#8203;14791](https://github.com/fastapi/fastapi/pull/14791) by [@&#8203;jonathan-fulton](https://github.com/jonathan-fulton). - 🐛 Fix TYPE_CHECKING annotations for Python 3.14 (PEP 649). PR [#&#8203;14789](https://github.com/fastapi/fastapi/pull/14789) by [@&#8203;mgu](https://github.com/mgu). - 🐛 Strip whitespaces from `Authorization` header credentials. PR [#&#8203;14786](https://github.com/fastapi/fastapi/pull/14786) by [@&#8203;WaveTheory1](https://github.com/WaveTheory1). - 🐛 Fix OpenAPI duplication of `anyOf` refs for app-level responses with specified `content` and `model` as `Union`. PR [#&#8203;14463](https://github.com/fastapi/fastapi/pull/14463) by [@&#8203;DJMcoder](https://github.com/DJMcoder). ##### Refactors - 🎨 Tweak types for mypy. PR [#&#8203;14816](https://github.com/fastapi/fastapi/pull/14816) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🏷️ Re-export `IncEx` type from Pydantic instead of duplicating it. PR [#&#8203;14641](https://github.com/fastapi/fastapi/pull/14641) by [@&#8203;mvanderlee](https://github.com/mvanderlee). - 💡 Update comment for Pydantic internals. PR [#&#8203;14814](https://github.com/fastapi/fastapi/pull/14814) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Update docs for contributing translations, simplify title. PR [#&#8203;14817](https://github.com/fastapi/fastapi/pull/14817) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Fix typing issue in `docs_src/app_testing/app_b` code example. PR [#&#8203;14573](https://github.com/fastapi/fastapi/pull/14573) by [@&#8203;timakaa](https://github.com/timakaa). - 📝 Fix example of license identifier in documentation. PR [#&#8203;14492](https://github.com/fastapi/fastapi/pull/14492) by [@&#8203;johnson-earls](https://github.com/johnson-earls). - 📝 Add banner to translated pages. PR [#&#8203;14809](https://github.com/fastapi/fastapi/pull/14809) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Add links to related sections of docs to docstrings. PR [#&#8203;14776](https://github.com/fastapi/fastapi/pull/14776) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Update embedded code examples to Python 3.10 syntax. PR [#&#8203;14758](https://github.com/fastapi/fastapi/pull/14758) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Fix dependency installation command in `docs/en/docs/contributing.md`. PR [#&#8203;14757](https://github.com/fastapi/fastapi/pull/14757) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Use return type annotation instead of `response_model` when possible. PR [#&#8203;14753](https://github.com/fastapi/fastapi/pull/14753) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Use `WSGIMiddleware` from `a2wsgi` instead of deprecated `fastapi.middleware.wsgi.WSGIMiddleware`. PR [#&#8203;14756](https://github.com/fastapi/fastapi/pull/14756) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Fix minor typos in release notes. PR [#&#8203;14780](https://github.com/fastapi/fastapi/pull/14780) by [@&#8203;whyvineet](https://github.com/whyvineet). - 🐛 Fix copy button in custom.js. PR [#&#8203;14722](https://github.com/fastapi/fastapi/pull/14722) by [@&#8203;fcharrier](https://github.com/fcharrier). - 📝 Add contribution instructions about LLM generated code and comments and automated tools for PRs. PR [#&#8203;14706](https://github.com/fastapi/fastapi/pull/14706) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs for management tasks. PR [#&#8203;14705](https://github.com/fastapi/fastapi/pull/14705) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs about managing translations. PR [#&#8203;14704](https://github.com/fastapi/fastapi/pull/14704) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs for contributing with translations. PR [#&#8203;14701](https://github.com/fastapi/fastapi/pull/14701) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Specify language code for code block. PR [#&#8203;14656](https://github.com/fastapi/fastapi/pull/14656) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Translations - 🌐 Improve LLM prompt of `uk` documentation. PR [#&#8203;14795](https://github.com/fastapi/fastapi/pull/14795) by [@&#8203;roli2py](https://github.com/roli2py). - 🌐 Update translations for ja (update-outdated). PR [#&#8203;14588](https://github.com/fastapi/fastapi/pull/14588) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update outdated, found by fixer tool). PR [#&#8203;14739](https://github.com/fastapi/fastapi/pull/14739) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for tr (update-outdated). PR [#&#8203;14745](https://github.com/fastapi/fastapi/pull/14745) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update `llm-prompt.md` for Korean language. PR [#&#8203;14763](https://github.com/fastapi/fastapi/pull/14763) by [@&#8203;seuthootDev](https://github.com/seuthootDev). - 🌐 Update translations for ko (update outdated, found by fixer tool). PR [#&#8203;14738](https://github.com/fastapi/fastapi/pull/14738) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for de (update-outdated). PR [#&#8203;14690](https://github.com/fastapi/fastapi/pull/14690) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update LLM prompt for Russian translations. PR [#&#8203;14733](https://github.com/fastapi/fastapi/pull/14733) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update translations for ru (update-outdated). PR [#&#8203;14693](https://github.com/fastapi/fastapi/pull/14693) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;14724](https://github.com/fastapi/fastapi/pull/14724) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update Korean LLM prompt. PR [#&#8203;14740](https://github.com/fastapi/fastapi/pull/14740) by [@&#8203;hard-coders](https://github.com/hard-coders). - 🌐 Improve LLM prompt for Turkish translations. PR [#&#8203;14728](https://github.com/fastapi/fastapi/pull/14728) by [@&#8203;Kadermiyanyedi](https://github.com/Kadermiyanyedi). - 🌐 Update portuguese llm-prompt.md. PR [#&#8203;14702](https://github.com/fastapi/fastapi/pull/14702) by [@&#8203;ceb10n](https://github.com/ceb10n). - 🌐 Update LLM prompt instructions file for French. PR [#&#8203;14618](https://github.com/fastapi/fastapi/pull/14618) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (add-missing). PR [#&#8203;14699](https://github.com/fastapi/fastapi/pull/14699) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for ko (update-outdated). PR [#&#8203;14589](https://github.com/fastapi/fastapi/pull/14589) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for uk (update-outdated). PR [#&#8203;14587](https://github.com/fastapi/fastapi/pull/14587) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;14686](https://github.com/fastapi/fastapi/pull/14686) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add LLM prompt file for Turkish, generated from the existing translations. PR [#&#8203;14547](https://github.com/fastapi/fastapi/pull/14547) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add LLM prompt file for Traditional Chinese, generated from the existing translations. PR [#&#8203;14550](https://github.com/fastapi/fastapi/pull/14550) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add LLM prompt file for Simplified Chinese, generated from the existing translations. PR [#&#8203;14549](https://github.com/fastapi/fastapi/pull/14549) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬇️ Downgrade LLM translations model to GPT-5 to reduce mistakes. PR [#&#8203;14823](https://github.com/fastapi/fastapi/pull/14823) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🐛 Fix translation script commit in place. PR [#&#8203;14818](https://github.com/fastapi/fastapi/pull/14818) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Update translation script to retry if LLM-response doesn't pass validation with Translation Fixer tool. PR [#&#8203;14749](https://github.com/fastapi/fastapi/pull/14749) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Run tests only on relevant code changes (not on docs). PR [#&#8203;14813](https://github.com/fastapi/fastapi/pull/14813) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Run mypy by pre-commit. PR [#&#8203;14806](https://github.com/fastapi/fastapi/pull/14806) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump ruff from 0.14.3 to 0.14.14. PR [#&#8203;14798](https://github.com/fastapi/fastapi/pull/14798) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pyasn1 from 0.6.1 to 0.6.2. PR [#&#8203;14804](https://github.com/fastapi/fastapi/pull/14804) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump sqlmodel from 0.0.27 to 0.0.31. PR [#&#8203;14802](https://github.com/fastapi/fastapi/pull/14802) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump mkdocs-macros-plugin from 1.4.1 to 1.5.0. PR [#&#8203;14801](https://github.com/fastapi/fastapi/pull/14801) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump gitpython from 3.1.45 to 3.1.46. PR [#&#8203;14800](https://github.com/fastapi/fastapi/pull/14800) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump typer from 0.16.0 to 0.21.1. PR [#&#8203;14799](https://github.com/fastapi/fastapi/pull/14799) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;14803](https://github.com/fastapi/fastapi/pull/14803) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;14796](https://github.com/fastapi/fastapi/pull/14796) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Ensure that an edit to `uv.lock` gets the `internal` label. PR [#&#8203;14759](https://github.com/fastapi/fastapi/pull/14759) by [@&#8203;svlandeg](https://github.com/svlandeg). - 🔧 Update sponsors: remove Requestly. PR [#&#8203;14735](https://github.com/fastapi/fastapi/pull/14735) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors, LambdaTest changes to TestMu AI. PR [#&#8203;14734](https://github.com/fastapi/fastapi/pull/14734) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump actions/cache from 4 to 5. PR [#&#8203;14511](https://github.com/fastapi/fastapi/pull/14511) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump actions/upload-artifact from 5 to 6. PR [#&#8203;14525](https://github.com/fastapi/fastapi/pull/14525) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump actions/download-artifact from 6 to 7. PR [#&#8203;14526](https://github.com/fastapi/fastapi/pull/14526) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👷 Tweak CI input names. PR [#&#8203;14688](https://github.com/fastapi/fastapi/pull/14688) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Refactor translation script to allow committing in place. PR [#&#8203;14687](https://github.com/fastapi/fastapi/pull/14687) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🐛 Fix translation script path. PR [#&#8203;14685](https://github.com/fastapi/fastapi/pull/14685) by [@&#8203;tiangolo](https://github.com/tiangolo). - ✅ Enable tests in CI for scripts. PR [#&#8203;14684](https://github.com/fastapi/fastapi/pull/14684) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add pre-commit local script to fix language translations. PR [#&#8203;14683](https://github.com/fastapi/fastapi/pull/14683) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆️ Migrate to uv. PR [#&#8203;14676](https://github.com/fastapi/fastapi/pull/14676) by [@&#8203;DoctorJohn](https://github.com/DoctorJohn). - 🔨 Add LLM translations tool fixer. PR [#&#8203;14652](https://github.com/fastapi/fastapi/pull/14652) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;14626](https://github.com/fastapi/fastapi/pull/14626) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;14630](https://github.com/fastapi/fastapi/pull/14630) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;14625](https://github.com/fastapi/fastapi/pull/14625) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translation prompts. PR [#&#8203;14619](https://github.com/fastapi/fastapi/pull/14619) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Update LLM translation script to guide reviewers to change the prompt. PR [#&#8203;14614](https://github.com/fastapi/fastapi/pull/14614) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Do not run translations on cron while finishing updating existing languages. PR [#&#8203;14613](https://github.com/fastapi/fastapi/pull/14613) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove test variants for Pydantic v1 in test_request_params. PR [#&#8203;14612](https://github.com/fastapi/fastapi/pull/14612) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove Pydantic v1 specific test variants. PR [#&#8203;14611](https://github.com/fastapi/fastapi/pull/14611) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.128.0`](https://github.com/fastapi/fastapi/releases/tag/0.128.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.127.1...0.128.0) ##### Breaking Changes - ➖ Drop support for `pydantic.v1`. PR [#&#8203;14609](https://github.com/fastapi/fastapi/pull/14609) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ✅ Run performance tests only on Pydantic v2. PR [#&#8203;14608](https://github.com/fastapi/fastapi/pull/14608) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.127.1`](https://github.com/fastapi/fastapi/releases/tag/0.127.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.127.0...0.127.1) ##### Refactors - 🔊 Add a custom `FastAPIDeprecationWarning`. PR [#&#8203;14605](https://github.com/fastapi/fastapi/pull/14605) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Add documentary to website. PR [#&#8203;14600](https://github.com/fastapi/fastapi/pull/14600) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for de (update-outdated). PR [#&#8203;14602](https://github.com/fastapi/fastapi/pull/14602) by [@&#8203;nilslindemann](https://github.com/nilslindemann). - 🌐 Update translations for de (update-outdated). PR [#&#8203;14581](https://github.com/fastapi/fastapi/pull/14581) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ##### Internal - 🔧 Update pre-commit to use local Ruff instead of hook. PR [#&#8203;14604](https://github.com/fastapi/fastapi/pull/14604) by [@&#8203;tiangolo](https://github.com/tiangolo). - ✅ Add missing tests for code examples. PR [#&#8203;14569](https://github.com/fastapi/fastapi/pull/14569) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Remove `lint` job from `test` CI workflow. PR [#&#8203;14593](https://github.com/fastapi/fastapi/pull/14593) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Update secrets check. PR [#&#8203;14592](https://github.com/fastapi/fastapi/pull/14592) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Run CodSpeed tests in parallel to other tests to speed up CI. PR [#&#8203;14586](https://github.com/fastapi/fastapi/pull/14586) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Update scripts and pre-commit to autofix files. PR [#&#8203;14585](https://github.com/fastapi/fastapi/pull/14585) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.127.0`](https://github.com/fastapi/fastapi/releases/tag/0.127.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.126.0...0.127.0) ##### Breaking Changes - 🔊 Add deprecation warnings when using `pydantic.v1`. PR [#&#8203;14583](https://github.com/fastapi/fastapi/pull/14583) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🔧 Add LLM prompt file for Korean, generated from the existing translations. PR [#&#8203;14546](https://github.com/fastapi/fastapi/pull/14546) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add LLM prompt file for Japanese, generated from the existing translations. PR [#&#8203;14545](https://github.com/fastapi/fastapi/pull/14545) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆️ Upgrade OpenAI model for translations to gpt-5.2. PR [#&#8203;14579](https://github.com/fastapi/fastapi/pull/14579) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.126.0`](https://github.com/fastapi/fastapi/releases/tag/0.126.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.125.0...0.126.0) ##### Upgrades - ➖ Drop support for Pydantic v1, keeping short temporary support for Pydantic v2's `pydantic.v1`. PR [#&#8203;14575](https://github.com/fastapi/fastapi/pull/14575) by [@&#8203;tiangolo](https://github.com/tiangolo). - The minimum version of Pydantic installed is now `pydantic >=2.7.0`. - The `standard` dependencies now include `pydantic-settings >=2.0.0` and `pydantic-extra-types >=2.0.0`. ##### Docs - 📝 Fix duplicated variable in `docs_src/python_types/tutorial005_py39.py`. PR [#&#8203;14565](https://github.com/fastapi/fastapi/pull/14565) by [@&#8203;paras-verma7454](https://github.com/paras-verma7454). ##### Translations - 🔧 Add LLM prompt file for Ukrainian, generated from the existing translations. PR [#&#8203;14548](https://github.com/fastapi/fastapi/pull/14548) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔧 Tweak pre-commit to allow committing release-notes. PR [#&#8203;14577](https://github.com/fastapi/fastapi/pull/14577) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆️ Use prek as a pre-commit alternative. PR [#&#8203;14572](https://github.com/fastapi/fastapi/pull/14572) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Add performance tests with CodSpeed. PR [#&#8203;14558](https://github.com/fastapi/fastapi/pull/14558) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.125.0`](https://github.com/fastapi/fastapi/releases/tag/0.125.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.124.4...0.125.0) ##### Breaking Changes - 🔧 Drop support for Python 3.8. PR [#&#8203;14563](https://github.com/fastapi/fastapi/pull/14563) by [@&#8203;tiangolo](https://github.com/tiangolo). - This would actually not be a *breaking* change as no code would really break. Any Python 3.8 installer would just refuse to install the latest version of FastAPI and would only install 0.124.4. Only marking it as a "breaking change" to make it visible. ##### Refactors - ♻️ Upgrade internal syntax to Python 3.9+ 🎉. PR [#&#8203;14564](https://github.com/fastapi/fastapi/pull/14564) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - ⚰️ Remove Python 3.8 from CI and remove Python 3.8 examples from source docs. PR [#&#8203;14559](https://github.com/fastapi/fastapi/pull/14559) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov) and [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Update translations for pt (add-missing). PR [#&#8203;14539](https://github.com/fastapi/fastapi/pull/14539) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Add LLM prompt file for French, generated from the existing French docs. PR [#&#8203;14544](https://github.com/fastapi/fastapi/pull/14544) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Sync Portuguese docs (pages found with script). PR [#&#8203;14554](https://github.com/fastapi/fastapi/pull/14554) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Sync Spanish docs (outdated pages found with script). PR [#&#8203;14553](https://github.com/fastapi/fastapi/pull/14553) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Sync German docs. PR [#&#8203;14519](https://github.com/fastapi/fastapi/pull/14519) by [@&#8203;nilslindemann](https://github.com/nilslindemann). - 🔥 Remove inactive/scarce translations to Vietnamese. PR [#&#8203;14543](https://github.com/fastapi/fastapi/pull/14543) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove inactive/scarce translations to Persian. PR [#&#8203;14542](https://github.com/fastapi/fastapi/pull/14542) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove translation to emoji to simplify the new setup with LLM autotranslations. PR [#&#8203;14541](https://github.com/fastapi/fastapi/pull/14541) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for pt (update-outdated). PR [#&#8203;14537](https://github.com/fastapi/fastapi/pull/14537) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (update-outdated). PR [#&#8203;14532](https://github.com/fastapi/fastapi/pull/14532) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Update translations for es (add-missing). PR [#&#8203;14533](https://github.com/fastapi/fastapi/pull/14533) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Remove translations for removed docs. PR [#&#8203;14516](https://github.com/fastapi/fastapi/pull/14516) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆ Bump `markdown-include-variants` from 0.0.7 to 0.0.8. PR [#&#8203;14556](https://github.com/fastapi/fastapi/pull/14556) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔧 Temporarily disable translations still in progress, being migrated to the new LLM setup. PR [#&#8203;14555](https://github.com/fastapi/fastapi/pull/14555) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔧 Update test workflow config, remove commented code. PR [#&#8203;14540](https://github.com/fastapi/fastapi/pull/14540) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Configure coverage, error on main tests, don't wait for Smokeshow. PR [#&#8203;14536](https://github.com/fastapi/fastapi/pull/14536) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Run Smokeshow always, even on test failures. PR [#&#8203;14538](https://github.com/fastapi/fastapi/pull/14538) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Make Pydantic versions customizable in CI. PR [#&#8203;14535](https://github.com/fastapi/fastapi/pull/14535) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Fix checkout GitHub Action fetch-depth for LLM translations, enable cron monthly. PR [#&#8203;14531](https://github.com/fastapi/fastapi/pull/14531) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Fix Typer command for CI LLM translations. PR [#&#8203;14530](https://github.com/fastapi/fastapi/pull/14530) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Update LLM translation CI, add language matrix and extra commands, prepare for scheduled run. PR [#&#8203;14529](https://github.com/fastapi/fastapi/pull/14529) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Update github-actions user for GitHub Actions workflows. PR [#&#8203;14528](https://github.com/fastapi/fastapi/pull/14528) by [@&#8203;tiangolo](https://github.com/tiangolo). - ➕ Add requirements for translations. PR [#&#8203;14515](https://github.com/fastapi/fastapi/pull/14515) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.124.4`](https://github.com/fastapi/fastapi/releases/tag/0.124.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.124.3...0.124.4) ##### Fixes - 🐛 Fix parameter aliases. PR [#&#8203;14371](https://github.com/fastapi/fastapi/pull/14371) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.124.3`](https://github.com/fastapi/fastapi/releases/tag/0.124.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.124.2...0.124.3) ##### Fixes - 🐛 Fix support for tagged union with discriminator inside of `Annotated` with `Body()`. PR [#&#8203;14512](https://github.com/fastapi/fastapi/pull/14512) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Refactors - ✅ Add set of tests for request parameters and alias. PR [#&#8203;14358](https://github.com/fastapi/fastapi/pull/14358) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Docs - 📝 Tweak links format. PR [#&#8203;14505](https://github.com/fastapi/fastapi/pull/14505) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Update docs about re-raising validation errors, do not include string as is to not leak information. PR [#&#8203;14487](https://github.com/fastapi/fastapi/pull/14487) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔥 Remove external links section. PR [#&#8203;14486](https://github.com/fastapi/fastapi/pull/14486) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Sync Russian docs. PR [#&#8203;14509](https://github.com/fastapi/fastapi/pull/14509) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Sync German docs. PR [#&#8203;14488](https://github.com/fastapi/fastapi/pull/14488) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ##### Internal - 👷 Tweak coverage to not pass Smokeshow max file size limit. PR [#&#8203;14507](https://github.com/fastapi/fastapi/pull/14507) by [@&#8203;tiangolo](https://github.com/tiangolo). - ✅ Expand test matrix to include Windows and MacOS. PR [#&#8203;14171](https://github.com/fastapi/fastapi/pull/14171) by [@&#8203;svlandeg](https://github.com/svlandeg). ### [`v0.124.2`](https://github.com/fastapi/fastapi/releases/tag/0.124.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.124.1...0.124.2) ##### Fixes - 🐛 Fix support for `if TYPE_CHECKING`, non-evaluated stringified annotations. PR [#&#8203;14485](https://github.com/fastapi/fastapi/pull/14485) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.124.1`](https://github.com/fastapi/fastapi/releases/tag/0.124.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.124.0...0.124.1) ##### Fixes - 🐛 Fix handling arbitrary types when using `arbitrary_types_allowed=True`. PR [#&#8203;14482](https://github.com/fastapi/fastapi/pull/14482) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Add variants for code examples in "Advanced User Guide". PR [#&#8203;14413](https://github.com/fastapi/fastapi/pull/14413) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Update tech stack in project generation docs. PR [#&#8203;14472](https://github.com/fastapi/fastapi/pull/14472) by [@&#8203;alejsdev](https://github.com/alejsdev). ##### Internal - ✅ Add test for Pydantic v2, dataclasses, UUID, and `__annotations__`. PR [#&#8203;14477](https://github.com/fastapi/fastapi/pull/14477) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.124.0`](https://github.com/fastapi/fastapi/releases/tag/0.124.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.10...0.124.0) ##### Features - 🚸 Improve tracebacks by adding endpoint metadata. PR [#&#8203;14306](https://github.com/fastapi/fastapi/pull/14306) by [@&#8203;savannahostrowski](https://github.com/savannahostrowski). ##### Internal - ✏️ Fix typo in `scripts/mkdocs_hooks.py`. PR [#&#8203;14457](https://github.com/fastapi/fastapi/pull/14457) by [@&#8203;yujiteshima](https://github.com/yujiteshima). ### [`v0.123.10`](https://github.com/fastapi/fastapi/releases/tag/0.123.10) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.9...0.123.10) ##### Fixes - 🐛 Fix using class (not instance) dependency that has `__call__` method. PR [#&#8203;14458](https://github.com/fastapi/fastapi/pull/14458) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🐛 Fix `separate_input_output_schemas=False` with `computed_field`. PR [#&#8203;14453](https://github.com/fastapi/fastapi/pull/14453) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.123.9`](https://github.com/fastapi/fastapi/releases/tag/0.123.9) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.8...0.123.9) ##### Fixes - 🐛 Fix OAuth2 scopes in OpenAPI in extra corner cases, parent dependency with scopes, sub-dependency security scheme without scopes. PR [#&#8203;14459](https://github.com/fastapi/fastapi/pull/14459) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.123.8`](https://github.com/fastapi/fastapi/releases/tag/0.123.8) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.7...0.123.8) ##### Fixes - 🐛 Fix OpenAPI security scheme OAuth2 scopes declaration, deduplicate security schemes with different scopes. PR [#&#8203;14455](https://github.com/fastapi/fastapi/pull/14455) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.123.7`](https://github.com/fastapi/fastapi/releases/tag/0.123.7) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.6...0.123.7) ##### Fixes - 🐛 Fix evaluating stringified annotations in Python 3.10. PR [#&#8203;11355](https://github.com/fastapi/fastapi/pull/11355) by [@&#8203;chaen](https://github.com/chaen). ### [`v0.123.6`](https://github.com/fastapi/fastapi/releases/tag/0.123.6) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.5...0.123.6) ##### Fixes - 🐛 Fix support for functools wraps and partial combined, for async and regular functions and classes in path operations and dependencies. PR [#&#8203;14448](https://github.com/fastapi/fastapi/pull/14448) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.123.5`](https://github.com/fastapi/fastapi/releases/tag/0.123.5) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.4...0.123.5) ##### Features - ✨ Allow using dependables with `functools.partial()`. PR [#&#8203;9753](https://github.com/fastapi/fastapi/pull/9753) by [@&#8203;lieryan](https://github.com/lieryan). - ✨ Add support for wrapped functions (e.g. `@functools.wraps()`) used with forward references. PR [#&#8203;5077](https://github.com/fastapi/fastapi/pull/5077) by [@&#8203;lucaswiman](https://github.com/lucaswiman). - ✨ Handle wrapped dependencies. PR [#&#8203;9555](https://github.com/fastapi/fastapi/pull/9555) by [@&#8203;phy1729](https://github.com/phy1729). ##### Fixes - 🐛 Fix optional sequence handling with new union syntax from Python 3.10. PR [#&#8203;14430](https://github.com/fastapi/fastapi/pull/14430) by [@&#8203;Viicos](https://github.com/Viicos). ##### Refactors - 🔥 Remove dangling extra condiitonal no longer needed. PR [#&#8203;14435](https://github.com/fastapi/fastapi/pull/14435) by [@&#8203;tiangolo](https://github.com/tiangolo). - ♻️ Refactor internals, update `is_coroutine` check to reuse internal supported variants (unwrap, check class). PR [#&#8203;14434](https://github.com/fastapi/fastapi/pull/14434) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Translations - 🌐 Sync German docs. PR [#&#8203;14367](https://github.com/fastapi/fastapi/pull/14367) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ### [`v0.123.4`](https://github.com/fastapi/fastapi/releases/tag/0.123.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.3...0.123.4) ##### Fixes - 🐛 Fix OpenAPI schema support for computed fields when using `separate_input_output_schemas=False`. PR [#&#8203;13207](https://github.com/fastapi/fastapi/pull/13207) by [@&#8203;vgrafe](https://github.com/vgrafe). ##### Docs - 📝 Fix docstring of `servers` parameter. PR [#&#8203;14405](https://github.com/fastapi/fastapi/pull/14405) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.123.3`](https://github.com/fastapi/fastapi/releases/tag/0.123.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.2...0.123.3) ##### Fixes - 🐛 Fix Query\Header\Cookie parameter model alias. PR [#&#8203;14360](https://github.com/fastapi/fastapi/pull/14360) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🐛 Fix optional sequence handling in `serialize sequence value` with Pydantic V2. PR [#&#8203;14297](https://github.com/fastapi/fastapi/pull/14297) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.123.2`](https://github.com/fastapi/fastapi/releases/tag/0.123.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.1...0.123.2) ##### Fixes - 🐛 Fix unformatted `{type_}` in FastAPIError. PR [#&#8203;14416](https://github.com/fastapi/fastapi/pull/14416) by [@&#8203;Just-Helpful](https://github.com/Just-Helpful). - 🐛 Fix parsing extra non-body parameter list. PR [#&#8203;14356](https://github.com/fastapi/fastapi/pull/14356) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🐛 Fix parsing extra `Form` parameter list. PR [#&#8203;14303](https://github.com/fastapi/fastapi/pull/14303) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🐛 Fix support for form values with empty strings interpreted as missing (`None` if that's the default), for compatibility with HTML forms. PR [#&#8203;13537](https://github.com/fastapi/fastapi/pull/13537) by [@&#8203;MarinPostma](https://github.com/MarinPostma). ##### Docs - 📝 Add tip on how to install `pip` in case of `No module named pip` error in `virtual-environments.md`. PR [#&#8203;14211](https://github.com/fastapi/fastapi/pull/14211) by [@&#8203;zadevhub](https://github.com/zadevhub). - 📝 Update Primary Key notes for the SQL databases tutorial to avoid confusion. PR [#&#8203;14120](https://github.com/fastapi/fastapi/pull/14120) by [@&#8203;FlaviusRaducu](https://github.com/FlaviusRaducu). - 📝 Clarify estimation note in documentation. PR [#&#8203;14070](https://github.com/fastapi/fastapi/pull/14070) by [@&#8203;SaisakthiM](https://github.com/SaisakthiM). ### [`v0.123.1`](https://github.com/fastapi/fastapi/releases/tag/0.123.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.123.0...0.123.1) ##### Fixes - 🐛 Avoid accessing non-existing "$ref" key for Pydantic v2 compat remapping. PR [#&#8203;14361](https://github.com/fastapi/fastapi/pull/14361) by [@&#8203;svlandeg](https://github.com/svlandeg). - 🐛 Fix `TypeError` when encoding a decimal with a `NaN` or `Infinity` value. PR [#&#8203;12935](https://github.com/fastapi/fastapi/pull/12935) by [@&#8203;kentwelcome](https://github.com/kentwelcome). ##### Internal - 🐛 Fix Windows UnicodeEncodeError in CLI test. PR [#&#8203;14295](https://github.com/fastapi/fastapi/pull/14295) by [@&#8203;hemanth-thirthahalli](https://github.com/hemanth-thirthahalli). - 🔧 Update sponsors: add Greptile. PR [#&#8203;14429](https://github.com/fastapi/fastapi/pull/14429) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;14426](https://github.com/fastapi/fastapi/pull/14426) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump markdown-include-variants from 0.0.6 to 0.0.7. PR [#&#8203;14423](https://github.com/fastapi/fastapi/pull/14423) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;14422](https://github.com/fastapi/fastapi/pull/14422) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;14420](https://github.com/fastapi/fastapi/pull/14420) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.123.0`](https://github.com/fastapi/fastapi/releases/tag/0.123.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.122.1...0.123.0) ##### Fixes - 🐛 Cache dependencies that don't use scopes and don't have sub-dependencies with scopes. PR [#&#8203;14419](https://github.com/fastapi/fastapi/pull/14419) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.122.1`](https://github.com/fastapi/fastapi/releases/tag/0.122.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.122.0...0.122.1) ##### Fixes - 🐛 Fix hierarchical security scope propagation. PR [#&#8203;5624](https://github.com/fastapi/fastapi/pull/5624) by [@&#8203;kristjanvalur](https://github.com/kristjanvalur). ##### Docs - 💅 Update CSS to explicitly use emoji font. PR [#&#8203;14415](https://github.com/fastapi/fastapi/pull/14415) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆ Bump markdown-include-variants from 0.0.5 to 0.0.6. PR [#&#8203;14418](https://github.com/fastapi/fastapi/pull/14418) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.122.0`](https://github.com/fastapi/fastapi/releases/tag/0.122.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.121.3...0.122.0) ##### Fixes - 🐛 Use `401` status code in security classes when credentials are missing. PR [#&#8203;13786](https://github.com/fastapi/fastapi/pull/13786) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - If your code depended on these classes raising the old (less correct) `403` status code, check the new docs about how to override the classes, to use the same old behavior: [Use Old 403 Authentication Error Status Codes](https://fastapi.tiangolo.com/how-to/authentication-error-status-code/). ##### Internal - 🔧 Configure labeler to exclude files that start from underscore for `lang-all` label. PR [#&#8203;14213](https://github.com/fastapi/fastapi/pull/14213) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 👷 Add pre-commit config with local script for permalinks. PR [#&#8203;14398](https://github.com/fastapi/fastapi/pull/14398) by [@&#8203;tiangolo](https://github.com/tiangolo). - 💄 Use font Fira Code to fix display of Rich panels in docs in Windows. PR [#&#8203;14387](https://github.com/fastapi/fastapi/pull/14387) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Add custom pre-commit CI. PR [#&#8203;14397](https://github.com/fastapi/fastapi/pull/14397) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump actions/checkout from 5 to 6. PR [#&#8203;14381](https://github.com/fastapi/fastapi/pull/14381) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👷 Upgrade `latest-changes` GitHub Action and pin `actions/checkout@v5`. PR [#&#8203;14403](https://github.com/fastapi/fastapi/pull/14403) by [@&#8203;svlandeg](https://github.com/svlandeg). - 🛠️ Add `add-permalinks` and `add-permalinks-page` to `scripts/docs.py`. PR [#&#8203;14033](https://github.com/fastapi/fastapi/pull/14033) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🔧 Upgrade Material for MkDocs and remove insiders. PR [#&#8203;14375](https://github.com/fastapi/fastapi/pull/14375) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.121.3`](https://github.com/fastapi/fastapi/releases/tag/0.121.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.121.2...0.121.3) #### 0.121.3 ##### Refactors - ♻️ Make the result of `Depends()` and `Security()` hashable, as a workaround for other tools interacting with these internal parts. PR [#&#8203;14372](https://github.com/fastapi/fastapi/pull/14372) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Upgrades - ⬆️ Bump Starlette to <`0.51.0`. PR [#&#8203;14282](https://github.com/fastapi/fastapi/pull/14282) by [@&#8203;musicinmybrain](https://github.com/musicinmybrain). ##### Docs - 📝 Add missing hash part. PR [#&#8203;14369](https://github.com/fastapi/fastapi/pull/14369) by [@&#8203;nilslindemann](https://github.com/nilslindemann). - 📝 Fix typos in code comments. PR [#&#8203;14364](https://github.com/fastapi/fastapi/pull/14364) by [@&#8203;Edge-Seven](https://github.com/Edge-Seven). - 📝 Add docs for using FastAPI Cloud. PR [#&#8203;14359](https://github.com/fastapi/fastapi/pull/14359) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.121.2`](https://github.com/fastapi/fastapi/releases/tag/0.121.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.121.1...0.121.2) ##### Fixes - 🐛 Fix handling of JSON Schema attributes named "$ref". PR [#&#8203;14349](https://github.com/fastapi/fastapi/pull/14349) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Add EuroPython talk & podcast episode with Sebastián Ramírez. PR [#&#8203;14260](https://github.com/fastapi/fastapi/pull/14260) by [@&#8203;clytaemnestra](https://github.com/clytaemnestra). - ✏️ Fix links and add missing permalink in docs. PR [#&#8203;14217](https://github.com/fastapi/fastapi/pull/14217) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Translations - 🌐 Update Portuguese translations with LLM prompt. PR [#&#8203;14228](https://github.com/fastapi/fastapi/pull/14228) by [@&#8203;ceb10n](https://github.com/ceb10n). - 🔨 Add Portuguese translations LLM prompt. PR [#&#8203;14208](https://github.com/fastapi/fastapi/pull/14208) by [@&#8203;ceb10n](https://github.com/ceb10n). - 🌐 Sync Russian docs. PR [#&#8203;14331](https://github.com/fastapi/fastapi/pull/14331) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Sync German docs. PR [#&#8203;14317](https://github.com/fastapi/fastapi/pull/14317) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ### [`v0.121.1`](https://github.com/fastapi/fastapi/releases/tag/0.121.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.121.0...0.121.1) ##### Fixes - 🐛 Fix `Depends(func, scope='function')` for top level (parameterless) dependencies. PR [#&#8203;14301](https://github.com/fastapi/fastapi/pull/14301) by [@&#8203;luzzodev](https://github.com/luzzodev). ##### Docs - 📝 Upate docs for advanced dependencies with `yield`, noting the changes in 0.121.0, adding `scope`. PR [#&#8203;14287](https://github.com/fastapi/fastapi/pull/14287) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆ Bump ruff from 0.13.2 to 0.14.3. PR [#&#8203;14276](https://github.com/fastapi/fastapi/pull/14276) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14289](https://github.com/fastapi/fastapi/pull/14289) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). ### [`v0.121.0`](https://github.com/fastapi/fastapi/releases/tag/0.121.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.120.4...0.121.0) ##### Features - ✨ Add support for dependencies with scopes, support `scope="request"` for dependencies with `yield` that exit before the response is sent. PR [#&#8203;14262](https://github.com/fastapi/fastapi/pull/14262) by [@&#8203;tiangolo](https://github.com/tiangolo). - New docs: [Dependencies with `yield` - Early exit and `scope`](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-with-yield/#early-exit-and-scope). ##### Internal - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;14273](https://github.com/fastapi/fastapi/pull/14273) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;14274](https://github.com/fastapi/fastapi/pull/14274) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;14280](https://github.com/fastapi/fastapi/pull/14280) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump mkdocs-macros-plugin from 1.4.0 to 1.4.1. PR [#&#8203;14277](https://github.com/fastapi/fastapi/pull/14277) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump mkdocstrings\[python] from 0.26.1 to 0.30.1. PR [#&#8203;14279](https://github.com/fastapi/fastapi/pull/14279) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.120.4`](https://github.com/fastapi/fastapi/releases/tag/0.120.4) [Compare Source](https://github.com/fastapi/fastapi/compare/0.120.3...0.120.4) ##### Fixes - 🐛 Fix security schemes in OpenAPI when added at the top level app. PR [#&#8203;14266](https://github.com/fastapi/fastapi/pull/14266) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.120.3`](https://github.com/fastapi/fastapi/releases/tag/0.120.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.120.2...0.120.3) ##### Refactors - ♻️ Reduce internal cyclic recursion in dependencies, from 2 functions calling each other to 1 calling itself. PR [#&#8203;14256](https://github.com/fastapi/fastapi/pull/14256) by [@&#8203;tiangolo](https://github.com/tiangolo). - ♻️ Refactor internals of dependencies, simplify code and remove `get_param_sub_dependant`. PR [#&#8203;14255](https://github.com/fastapi/fastapi/pull/14255) by [@&#8203;tiangolo](https://github.com/tiangolo). - ♻️ Refactor internals of dependencies, simplify using dataclasses. PR [#&#8203;14254](https://github.com/fastapi/fastapi/pull/14254) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Docs - 📝 Update note for untranslated pages. PR [#&#8203;14257](https://github.com/fastapi/fastapi/pull/14257) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.120.2`](https://github.com/fastapi/fastapi/releases/tag/0.120.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.120.1...0.120.2) ##### Fixes - 🐛 Fix separation of schemas with nested models introduced in 0.119.0. PR [#&#8203;14246](https://github.com/fastapi/fastapi/pull/14246) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔧 Add sponsor: SerpApi. PR [#&#8203;14248](https://github.com/fastapi/fastapi/pull/14248) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump actions/download-artifact from 5 to 6. PR [#&#8203;14236](https://github.com/fastapi/fastapi/pull/14236) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14237](https://github.com/fastapi/fastapi/pull/14237) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Bump actions/upload-artifact from 4 to 5. PR [#&#8203;14235](https://github.com/fastapi/fastapi/pull/14235) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.120.1`](https://github.com/fastapi/fastapi/releases/tag/0.120.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.120.0...0.120.1) ##### Upgrades - ⬆️ Bump Starlette to <`0.50.0`. PR [#&#8203;14234](https://github.com/fastapi/fastapi/pull/14234) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Internal - 🔧 Add `license` and `license-files` to `pyproject.toml`, remove `License` from `classifiers`. PR [#&#8203;14230](https://github.com/fastapi/fastapi/pull/14230) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.120.0`](https://github.com/fastapi/fastapi/releases/tag/0.120.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.119.1...0.120.0) There are no major nor breaking changes in this release. ☕️ The internal reference documentation now uses `annotated_doc.Doc` instead of `typing_extensions.Doc`, this adds a new (very small) dependency on [`annotated-doc`](https://github.com/fastapi/annotated-doc), a package made just to provide that `Doc` documentation utility class. I would expect `typing_extensions.Doc` to be deprecated and then removed at some point from `typing_extensions`, for that reason there's the new `annotated-doc` micro-package. If you are curious about this, you can read more in the repo for [`annotated-doc`](https://github.com/fastapi/annotated-doc). This new version `0.120.0` only contains that transition to the new home package for that utility class `Doc`. ##### Translations - 🌐 Sync German docs. PR [#&#8203;14188](https://github.com/fastapi/fastapi/pull/14188) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ##### Internal - ➕ Migrate internal reference documentation from `typing_extensions.Doc` to `annotated_doc.Doc`. PR [#&#8203;14222](https://github.com/fastapi/fastapi/pull/14222) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🛠️ Update German LLM prompt and test file. PR [#&#8203;14189](https://github.com/fastapi/fastapi/pull/14189) by [@&#8203;nilslindemann](https://github.com/nilslindemann). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14181](https://github.com/fastapi/fastapi/pull/14181) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). ### [`v0.119.1`](https://github.com/fastapi/fastapi/releases/tag/0.119.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.119.0...0.119.1) ##### Fixes - 🐛 Fix internal Pydantic v1 compatibility (warnings) for Python 3.14 and Pydantic 2.12.1. PR [#&#8203;14186](https://github.com/fastapi/fastapi/pull/14186) by [@&#8203;svlandeg](https://github.com/svlandeg). ##### Docs - 📝 Replace `starlette.io` by `starlette.dev` and `uvicorn.org` by `uvicorn.dev`. PR [#&#8203;14176](https://github.com/fastapi/fastapi/pull/14176) by [@&#8203;Kludex](https://github.com/Kludex). ##### Internal - 🔧 Add sponsor Requestly. PR [#&#8203;14205](https://github.com/fastapi/fastapi/pull/14205) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Configure reminder for `waiting` label in `issue-manager`. PR [#&#8203;14156](https://github.com/fastapi/fastapi/pull/14156) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.119.0`](https://github.com/fastapi/fastapi/releases/tag/0.119.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.118.3...0.119.0) FastAPI now (temporarily) supports both Pydantic v2 models and `pydantic.v1` models 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**. ```Python from fastapi import FastAPI from pydantic import BaseModel as BaseModelV2 from pydantic.v1 import BaseModel class Item(BaseModel): name: str description: str | None = None class ItemV2(BaseModelV2): title: str summary: str | None = None app = FastAPI() @app.post("/items/", response_model=ItemV2) def create_item(item: Item): return {"title": item.name, "summary": item.description} ``` 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](https://fastapi.tiangolo.com/how-to/migrate-from-pydantic-v1-to-pydantic-v2/). ##### Features - ✨ Add support for `from pydantic.v1 import BaseModel`, mixed Pydantic v1 and v2 models in the same app. PR [#&#8203;14168](https://github.com/fastapi/fastapi/pull/14168) by [@&#8203;tiangolo](https://github.com/tiangolo). ### [`v0.118.3`](https://github.com/fastapi/fastapi/releases/tag/0.118.3) [Compare Source](https://github.com/fastapi/fastapi/compare/0.118.2...0.118.3) ##### Upgrades - ⬆️ Add support for Python 3.14. PR [#&#8203;14165](https://github.com/fastapi/fastapi/pull/14165) by [@&#8203;svlandeg](https://github.com/svlandeg). ### [`v0.118.2`](https://github.com/fastapi/fastapi/releases/tag/0.118.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.118.1...0.118.2) ##### Fixes - 🐛 Fix tagged discriminated union not recognized as body field. PR [#&#8203;12942](https://github.com/fastapi/fastapi/pull/12942) by [@&#8203;frankie567](https://github.com/frankie567). ##### Internal - ⬆ Bump astral-sh/setup-uv from 6 to 7. PR [#&#8203;14167](https://github.com/fastapi/fastapi/pull/14167) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). ### [`v0.118.1`](https://github.com/fastapi/fastapi/releases/tag/0.118.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.118.0...0.118.1) ##### Upgrades - 👽️ Ensure compatibility with Pydantic 2.12.0. PR [#&#8203;14036](https://github.com/fastapi/fastapi/pull/14036) by [@&#8203;cjwatson](https://github.com/cjwatson). ##### Docs - 📝 Add External Link: Getting started with logging in FastAPI. PR [#&#8203;14152](https://github.com/fastapi/fastapi/pull/14152) by [@&#8203;itssimon](https://github.com/itssimon). ##### Translations - 🔨 Add Russian translations LLM prompt. PR [#&#8203;13936](https://github.com/fastapi/fastapi/pull/13936) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🌐 Sync German docs. PR [#&#8203;14149](https://github.com/fastapi/fastapi/pull/14149) by [@&#8203;nilslindemann](https://github.com/nilslindemann). - 🌐 Add Russian translations for missing pages (LLM-generated). PR [#&#8203;14135](https://github.com/fastapi/fastapi/pull/14135) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Update Russian translations for existing pages (LLM-generated). PR [#&#8203;14123](https://github.com/fastapi/fastapi/pull/14123) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🌐 Remove configuration files for inactive translations. PR [#&#8203;14130](https://github.com/fastapi/fastapi/pull/14130) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - 🔨 Move local coverage logic to its own script. PR [#&#8203;14166](https://github.com/fastapi/fastapi/pull/14166) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14161](https://github.com/fastapi/fastapi/pull/14161) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Bump griffe-typingdoc from 0.2.8 to 0.2.9. PR [#&#8203;14144](https://github.com/fastapi/fastapi/pull/14144) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump mkdocs-macros-plugin from 1.3.9 to 1.4.0. PR [#&#8203;14145](https://github.com/fastapi/fastapi/pull/14145) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump markdown-include-variants from 0.0.4 to 0.0.5. PR [#&#8203;14146](https://github.com/fastapi/fastapi/pull/14146) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14126](https://github.com/fastapi/fastapi/pull/14126) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;14150](https://github.com/fastapi/fastapi/pull/14150) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;14139](https://github.com/fastapi/fastapi/pull/14139) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;14138](https://github.com/fastapi/fastapi/pull/14138) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump ruff from 0.12.7 to 0.13.2. PR [#&#8203;14147](https://github.com/fastapi/fastapi/pull/14147) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump sqlmodel from 0.0.24 to 0.0.25. PR [#&#8203;14143](https://github.com/fastapi/fastapi/pull/14143) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump tiangolo/issue-manager from 0.5.1 to 0.6.0. PR [#&#8203;14148](https://github.com/fastapi/fastapi/pull/14148) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👷 Update docs previews comment, single comment, add failure status. PR [#&#8203;14129](https://github.com/fastapi/fastapi/pull/14129) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Modify `mkdocs_hooks.py` to add `title` to page's metadata (remove permalinks in social cards). PR [#&#8203;14125](https://github.com/fastapi/fastapi/pull/14125) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ### [`v0.118.0`](https://github.com/fastapi/fastapi/releases/tag/0.118.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.117.1...0.118.0) #### 0.118.0 ##### Fixes - 🐛 Fix support for `StreamingResponse`s with dependencies with `yield` or `UploadFile`s, close after the response is done. PR [#&#8203;14099](https://github.com/fastapi/fastapi/pull/14099) by [@&#8203;tiangolo](https://github.com/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 with `yield` would have been already run. For example, if you had a database session in a dependency with `yield`, the `StreamingResponse` would not be able to use that session while streaming data because the session would have already been closed in the exit code after `yield`. This behavior was reverted in 0.118.0, to make the exit code after `yield` be executed after the response is sent. You can read more about it in the docs for [Advanced Dependencies - Dependencies with `yield`, `HTTPException`, `except` and Background Tasks](https://fastapi.tiangolo.com/advanced/advanced-dependencies#dependencies-with-yield-httpexception-except-and-background-tasks). Including what you could do if you wanted to close a database session earlier, before returning the response to the client. ##### Docs - 📝 Update `tutorial/security/oauth2-jwt/` to use `pwdlib` with Argon2 instead of `passlib`. PR [#&#8203;13917](https://github.com/fastapi/fastapi/pull/13917) by [@&#8203;Neizvestnyj](https://github.com/Neizvestnyj). - ✏️ Fix typos in OAuth2 password request forms. PR [#&#8203;14112](https://github.com/fastapi/fastapi/pull/14112) by [@&#8203;alv2017](https://github.com/alv2017). - 📝 Update contributing guidelines for installing requirements. PR [#&#8203;14095](https://github.com/fastapi/fastapi/pull/14095) by [@&#8203;alejsdev](https://github.com/alejsdev). ##### Translations - 🌐 Sync German docs. PR [#&#8203;14098](https://github.com/fastapi/fastapi/pull/14098) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ##### Internal - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14103](https://github.com/fastapi/fastapi/pull/14103) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ♻️ Refactor sponsor image handling. PR [#&#8203;14102](https://github.com/fastapi/fastapi/pull/14102) by [@&#8203;alejsdev](https://github.com/alejsdev). - 🐛 Fix sponsor display issue by hiding element on image error. PR [#&#8203;14097](https://github.com/fastapi/fastapi/pull/14097) by [@&#8203;alejsdev](https://github.com/alejsdev). - 🐛 Hide sponsor badge when sponsor image is not displayed. PR [#&#8203;14096](https://github.com/fastapi/fastapi/pull/14096) by [@&#8203;alejsdev](https://github.com/alejsdev). ### [`v0.117.1`](https://github.com/fastapi/fastapi/releases/tag/0.117.1) [Compare Source](https://github.com/fastapi/fastapi/compare/0.117.0...0.117.1) ##### Fixes - 🐛 Fix validation error when `File` is declared after `Form` parameter. PR [#&#8203;11194](https://github.com/fastapi/fastapi/pull/11194) by [@&#8203;thomasleveil](https://github.com/thomasleveil). ### [`v0.117.0`](https://github.com/fastapi/fastapi/releases/tag/0.117.0) [Compare Source](https://github.com/fastapi/fastapi/compare/0.116.2...0.117.0) ##### Features - ✨ Allow `None` as return type for bodiless responses. PR [#&#8203;9425](https://github.com/fastapi/fastapi/pull/9425) by [@&#8203;hofrob](https://github.com/hofrob). - ✨ Allow array values for OpenAPI schema `type` field. PR [#&#8203;13639](https://github.com/fastapi/fastapi/pull/13639) by [@&#8203;sammasak](https://github.com/sammasak). - ✨ Add OpenAPI `external_docs` parameter to `FastAPI`. PR [#&#8203;13713](https://github.com/fastapi/fastapi/pull/13713) by [@&#8203;cmtoro](https://github.com/cmtoro). ##### Fixes - ⚡️ Fix `default_factory` for response model field with Pydantic V1. PR [#&#8203;9704](https://github.com/fastapi/fastapi/pull/9704) by [@&#8203;vvanglro](https://github.com/vvanglro). - 🐛 Fix inconsistent processing of model docstring formfeed char with Pydantic V1. PR [#&#8203;6039](https://github.com/fastapi/fastapi/pull/6039) by [@&#8203;MaxwellPayne](https://github.com/MaxwellPayne). - 🐛 Fix `jsonable_encoder` alters `json_encoders` of Pydantic v1 objects. PR [#&#8203;4972](https://github.com/fastapi/fastapi/pull/4972) by [@&#8203;aboubacs](https://github.com/aboubacs). - 🐛 Reenable `allow_arbitrary_types` when only 1 argument is used on the API endpoint. PR [#&#8203;13694](https://github.com/fastapi/fastapi/pull/13694) by [@&#8203;rmawatson](https://github.com/rmawatson). - 🐛 Fix `inspect.getcoroutinefunction()` can break testing with `unittest.mock.patch()`. PR [#&#8203;14022](https://github.com/fastapi/fastapi/pull/14022) by [@&#8203;secrett2633](https://github.com/secrett2633). ##### Refactors - ♻️ Create `dependency-cache` dict in `solve_dependencies` only if `None` (don't re-create if empty). PR [#&#8203;13689](https://github.com/fastapi/fastapi/pull/13689) by [@&#8203;bokshitsky](https://github.com/bokshitsky). - ✅ Enable test case for duplicated headers in `test_tutorial/test_header_params/test_tutorial003.py`. PR [#&#8203;13864](https://github.com/fastapi/fastapi/pull/13864) by [@&#8203;Amogha-ark](https://github.com/Amogha-ark). - 📌 Pin `httpx` to `>=0.23.0,<1.0.0`. PR [#&#8203;14086](https://github.com/fastapi/fastapi/pull/14086) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). ##### Docs - 📝 Add note about Cookies and JavaScript on `tutorial/cookie-params.md`. PR [#&#8203;13510](https://github.com/fastapi/fastapi/pull/13510) by [@&#8203;Kludex](https://github.com/Kludex). - 📝 Remove outdated formatting from `path-params-numeric-validations.md` for languages `en`, `es` and `uk`.. PR [#&#8203;14059](https://github.com/fastapi/fastapi/pull/14059) by [@&#8203;svlandeg](https://github.com/svlandeg). - 📝 Fix and Improve English Documentation. PR [#&#8203;14048](https://github.com/fastapi/fastapi/pull/14048) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ##### Translations - 📝 Update prompts and German translation. PR [#&#8203;14015](https://github.com/fastapi/fastapi/pull/14015) by [@&#8203;nilslindemann](https://github.com/nilslindemann). ##### Internal - ✅ Simplify tests for response_model. PR [#&#8203;14062](https://github.com/fastapi/fastapi/pull/14062) by [@&#8203;dynamicy](https://github.com/dynamicy). - 🚨 Install pydantic.mypy plugin. PR [#&#8203;14081](https://github.com/fastapi/fastapi/pull/14081) by [@&#8203;svlandeg](https://github.com/svlandeg). - ✅ Add LLM test file. PR [#&#8203;14049](https://github.com/fastapi/fastapi/pull/14049) by [@&#8203;nilslindemann](https://github.com/nilslindemann). - 🔨 Update translations script. PR [#&#8203;13968](https://github.com/fastapi/fastapi/pull/13968) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 🛠️ Update `docs.py generate-readme` command to remove permalinks from headers. PR [#&#8203;14055](https://github.com/fastapi/fastapi/pull/14055) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆️ Update mypy to 1.14.1. PR [#&#8203;12970](https://github.com/fastapi/fastapi/pull/12970) by [@&#8203;tamird](https://github.com/tamird). ### [`v0.116.2`](https://github.com/fastapi/fastapi/releases/tag/0.116.2) [Compare Source](https://github.com/fastapi/fastapi/compare/0.116.1...0.116.2) ##### Upgrades - ⬆️ Upgrade Starlette supported version range to >=0.40.0,<0.49.0. PR [#&#8203;14077](https://github.com/fastapi/fastapi/pull/14077) by [@&#8203;musicinmybrain](https://github.com/musicinmybrain). ##### Docs - 📝 Add documentation for Behind a Proxy - Proxy Forwarded Headers, using `--forwarded-allow-ips="*"`. PR [#&#8203;14028](https://github.com/fastapi/fastapi/pull/14028) by [@&#8203;tiangolo](https://github.com/tiangolo). - 📝 Add deprecation info block about `dict()` in `docs/tutorial/body.md`. PR [#&#8203;13906](https://github.com/fastapi/fastapi/pull/13906) by [@&#8203;jomkv](https://github.com/jomkv). - 📝 Fix Twitter to be X (Twitter) everywhere in documentation. PR [#&#8203;13809](https://github.com/fastapi/fastapi/pull/13809) by [@&#8203;valentinDruzhinin](https://github.com/valentinDruzhinin). - 🐛 Prevent scroll-to-top on restart/fast buttons in `termynal.js`. PR [#&#8203;13714](https://github.com/fastapi/fastapi/pull/13714) by [@&#8203;Ashish-Pandey62](https://github.com/Ashish-Pandey62). - 📝 Update testing events documentation. PR [#&#8203;13259](https://github.com/fastapi/fastapi/pull/13259) by [@&#8203;z0z0r4](https://github.com/z0z0r4). - 📝 Remove obsolete `url` field in error responses in docs. PR [#&#8203;13655](https://github.com/fastapi/fastapi/pull/13655) by [@&#8203;Taoup](https://github.com/Taoup). - 📝 Bring the `scope` claim in line with the standard in `docs_src/security/tutorial005.py`. PR [#&#8203;11189](https://github.com/fastapi/fastapi/pull/11189) by [@&#8203;DurandA](https://github.com/DurandA). - 📝 Update TrustedHostMiddleware Documentation. PR [#&#8203;11441](https://github.com/fastapi/fastapi/pull/11441) by [@&#8203;soulee-dev](https://github.com/soulee-dev). - 📝 Remove links to site callbackhell.com that doesn't exist anymore. PR [#&#8203;14006](https://github.com/fastapi/fastapi/pull/14006) by [@&#8203;dennybiasiolli](https://github.com/dennybiasiolli). - 📝 Add permalinks to headers in English docs. PR [#&#8203;13993](https://github.com/fastapi/fastapi/pull/13993) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - 📝 Update `docs/en/docs/advanced/generate-clients.md`. PR [#&#8203;13793](https://github.com/fastapi/fastapi/pull/13793) by [@&#8203;mrlubos](https://github.com/mrlubos). - 📝 Add discussion template for new language translation requests. PR [#&#8203;13535](https://github.com/fastapi/fastapi/pull/13535) by [@&#8203;alejsdev](https://github.com/alejsdev). ##### Translations - 📝 Fix code include for Pydantic models example in `docs/zh/docs/python-types.md`. PR [#&#8203;13997](https://github.com/fastapi/fastapi/pull/13997) by [@&#8203;anfreshman](https://github.com/anfreshman). - 🌐 Update Portuguese Translation for `docs/pt/docs/async.md`. PR [#&#8203;13863](https://github.com/fastapi/fastapi/pull/13863) by [@&#8203;EdmilsonRodrigues](https://github.com/EdmilsonRodrigues). - 📝 Fix highlight line in `docs/ja/docs/tutorial/body.md`. PR [#&#8203;13927](https://github.com/fastapi/fastapi/pull/13927) by [@&#8203;KoyoMiyazaki](https://github.com/KoyoMiyazaki). - 🌐 Add Persian translation for `docs/fa/docs/environment-variables.md`. PR [#&#8203;13923](https://github.com/fastapi/fastapi/pull/13923) by [@&#8203;Mohammad222PR](https://github.com/Mohammad222PR). - 🌐 Add Persian translation for `docs/fa/docs/python-types.md`. PR [#&#8203;13524](https://github.com/fastapi/fastapi/pull/13524) by [@&#8203;Mohammad222PR](https://github.com/Mohammad222PR). - 🌐 Update Portuguese Translation for `docs/pt/docs/project-generation.md`. PR [#&#8203;13875](https://github.com/fastapi/fastapi/pull/13875) by [@&#8203;EdmilsonRodrigues](https://github.com/EdmilsonRodrigues). - 🌐 Add Persian translation for `docs/fa/docs/async.md`. PR [#&#8203;13541](https://github.com/fastapi/fastapi/pull/13541) by [@&#8203;Mohammad222PR](https://github.com/Mohammad222PR). - 🌐 Add Bangali translation for `docs/bn/about/index.md`. PR [#&#8203;13882](https://github.com/fastapi/fastapi/pull/13882) by [@&#8203;sajjadrahman56](https://github.com/sajjadrahman56). ##### Internal - ⬆ Bump pyjwt from 2.8.0 to 2.9.0. PR [#&#8203;13960](https://github.com/fastapi/fastapi/pull/13960) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14080](https://github.com/fastapi/fastapi/pull/14080) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Bump actions/setup-python from 5 to 6. PR [#&#8203;14042](https://github.com/fastapi/fastapi/pull/14042) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump actions/labeler from 5 to 6. PR [#&#8203;14046](https://github.com/fastapi/fastapi/pull/14046) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14056](https://github.com/fastapi/fastapi/pull/14056) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14035](https://github.com/fastapi/fastapi/pull/14035) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Bump pypa/gh-action-pypi-publish from 1.12.4 to 1.13.0. PR [#&#8203;14041](https://github.com/fastapi/fastapi/pull/14041) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;14029](https://github.com/fastapi/fastapi/pull/14029) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;14030](https://github.com/fastapi/fastapi/pull/14030) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;14031](https://github.com/fastapi/fastapi/pull/14031) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Experts. PR [#&#8203;14034](https://github.com/fastapi/fastapi/pull/14034) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Detect and label merge conflicts on PRs automatically. PR [#&#8203;14045](https://github.com/fastapi/fastapi/pull/14045) by [@&#8203;svlandeg](https://github.com/svlandeg). - 🔧 Update sponsors: remove Platform.sh. PR [#&#8203;14027](https://github.com/fastapi/fastapi/pull/14027) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: remove Mobb. PR [#&#8203;14026](https://github.com/fastapi/fastapi/pull/14026) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🛠️ Update `mkdocs_hooks` to handle headers with permalinks when building docs. PR [#&#8203;14025](https://github.com/fastapi/fastapi/pull/14025) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;14016](https://github.com/fastapi/fastapi/pull/14016) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Bump `mkdocs-macros-plugin` from 1.3.7 to 1.3.9. PR [#&#8203;14003](https://github.com/fastapi/fastapi/pull/14003) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;13999](https://github.com/fastapi/fastapi/pull/13999) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;13983](https://github.com/fastapi/fastapi/pull/13983) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Bump actions/checkout from 4 to 5. PR [#&#8203;13986](https://github.com/fastapi/fastapi/pull/13986) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 🔧 Update Speakeasy sponsor graphic. PR [#&#8203;13971](https://github.com/fastapi/fastapi/pull/13971) by [@&#8203;chailandau](https://github.com/chailandau). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;13969](https://github.com/fastapi/fastapi/pull/13969) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Bump actions/download-artifact from 4 to 5. PR [#&#8203;13975](https://github.com/fastapi/fastapi/pull/13975) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI People - Experts. PR [#&#8203;13963](https://github.com/fastapi/fastapi/pull/13963) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump ruff from 0.11.2 to 0.12.7. PR [#&#8203;13957](https://github.com/fastapi/fastapi/pull/13957) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump cairosvg from 2.7.1 to 2.8.2. PR [#&#8203;13959](https://github.com/fastapi/fastapi/pull/13959) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pydantic-ai from 0.0.30 to 0.4.10. PR [#&#8203;13958](https://github.com/fastapi/fastapi/pull/13958) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI GitHub topic repositories. PR [#&#8203;13962](https://github.com/fastapi/fastapi/pull/13962) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ Bump mkdocs-material from 9.6.15 to 9.6.16. PR [#&#8203;13961](https://github.com/fastapi/fastapi/pull/13961) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump tiangolo/latest-changes from 0.3.2 to 0.4.0. PR [#&#8203;13952](https://github.com/fastapi/fastapi/pull/13952) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - 👥 Update FastAPI People - Sponsors. PR [#&#8203;13956](https://github.com/fastapi/fastapi/pull/13956) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Contributors and Translators. PR [#&#8203;13955](https://github.com/fastapi/fastapi/pull/13955) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: Databento link and sponsors_badge data. PR [#&#8203;13954](https://github.com/fastapi/fastapi/pull/13954) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔧 Update sponsors: Add Railway. PR [#&#8203;13953](https://github.com/fastapi/fastapi/pull/13953) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⚒️ Update translate script, update prompt to minimize generated diff. PR [#&#8203;13947](https://github.com/fastapi/fastapi/pull/13947) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;13943](https://github.com/fastapi/fastapi/pull/13943) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⚒️ Tweak translate script and CI. PR [#&#8203;13939](https://github.com/fastapi/fastapi/pull/13939) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👷 Add CI to translate with LLMs. PR [#&#8203;13937](https://github.com/fastapi/fastapi/pull/13937) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⚒️ Update translate script, show and update outdated translations. PR [#&#8203;13933](https://github.com/fastapi/fastapi/pull/13933) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Refactor translate script with extra feedback (prints). PR [#&#8203;13932](https://github.com/fastapi/fastapi/pull/13932) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Update translations script to remove old (removed) files. PR [#&#8203;13928](https://github.com/fastapi/fastapi/pull/13928) by [@&#8203;tiangolo](https://github.com/tiangolo). - ⬆ \[pre-commit.ci] pre-commit autoupdate. PR [#&#8203;13894](https://github.com/fastapi/fastapi/pull/13894) by [@&#8203;pre-commit-ci\[bot\]](https://github.com/apps/pre-commit-ci). - ⬆ Update httpx requirement to >=0.23.0,<0.29.0. PR [#&#8203;13114](https://github.com/fastapi/fastapi/pull/13114) by [@&#8203;yan12125](https://github.com/yan12125). - 🔧 Update sponsors: Add Mobb. PR [#&#8203;13916](https://github.com/fastapi/fastapi/pull/13916) by [@&#8203;tiangolo](https://github.com/tiangolo). - 👥 Update FastAPI People - Experts. PR [#&#8203;13889](https://github.com/fastapi/fastapi/pull/13889) by [@&#8203;tiangolo](https://github.com/tiangolo). - 🔨 Update FastAPI People sleep interval, use external settings. PR [#&#8203;13888](https://github.com/fastapi/fastapi/pull/13888) by [@&#8203;tiangolo](https://github.com/tiangolo). </details> <details> <summary>pydantic/pydantic (pydantic)</summary> ### [`v2.14.1`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v250-2023-11-13) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.14.0...v2.14.1) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.5.0) The code released in v2.5.0 is functionally identical to that of v2.5.0b1. ##### What's Changed ##### Packaging - Update pydantic-core from 2.10.1 to 2.14.1, significant changes from these updates are described below, full changelog [here](https://github.com/pydantic/pydantic-core/compare/v2.10.1...v2.14.1) - Update to `pyright==1.1.335` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;8075](https://github.com/pydantic/pydantic/pull/8075) ##### New Features - Allow plugins to catch non `ValidationError` errors by [@&#8203;adriangb](https://github.com/adriangb) in [#&#8203;7806](https://github.com/pydantic/pydantic/pull/7806) - Support `__doc__` argument in `create_model()` by [@&#8203;chris-spann](https://github.com/chris-spann) in [#&#8203;7863](https://github.com/pydantic/pydantic/pull/7863) - Expose `regex_engine` flag - meaning you can use with the Rust or Python regex libraries in constraints by [@&#8203;utkini](https://github.com/utkini) in [#&#8203;7768](https://github.com/pydantic/pydantic/pull/7768) - Save return type generated from type annotation in `ComputedFieldInfo` by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7889](https://github.com/pydantic/pydantic/pull/7889) - Adopting `ruff` formatter by [@&#8203;Luca-Blight](https://github.com/Luca-Blight) in [#&#8203;7930](https://github.com/pydantic/pydantic/pull/7930) - Added `validation_error_cause` to config by [@&#8203;zakstucke](https://github.com/zakstucke) in [#&#8203;7626](https://github.com/pydantic/pydantic/pull/7626) - Make path of the item to validate available in plugin by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;7861](https://github.com/pydantic/pydantic/pull/7861) - Add `CallableDiscriminator` and `Tag` by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;7983](https://github.com/pydantic/pydantic/pull/7983) - `CallableDiscriminator` renamed to `Discriminator` by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8047](https://github.com/pydantic/pydantic/pull/8047) - Make union case tags affect union error messages by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8001](https://github.com/pydantic/pydantic/pull/8001) - Add `examples` and `json_schema_extra` to `@computed_field` by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;8013](https://github.com/pydantic/pydantic/pull/8013) - Add `JsonValue` type by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;7998](https://github.com/pydantic/pydantic/pull/7998) - Allow `str` as argument to `Discriminator` by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8047](https://github.com/pydantic/pydantic/pull/8047) - Add `SchemaSerializer.__reduce__` method to enable pickle serialization by [@&#8203;edoakes](https://github.com/edoakes) in [pydantic/pydantic-core#1006](https://github.com/pydantic/pydantic-core/pull/1006) ##### Changes - **Significant Change:** replace `ultra_strict` with 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 [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/pydantic-core#867](https://github.com/pydantic/pydantic-core/pull/867) - Add support for instance method reassignment when `extra='allow'` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7683](https://github.com/pydantic/pydantic/pull/7683) - Support JSON schema generation for `Enum` types with no cases by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7927](https://github.com/pydantic/pydantic/pull/7927) - Warn if a class inherits from `Generic` before `BaseModel` by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7891](https://github.com/pydantic/pydantic/pull/7891) ##### Performance - New custom JSON parser, `jiter` by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [pydantic/pydantic-core#974](https://github.com/pydantic/pydantic-core/pull/974) - PGO build for MacOS M1 by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [pydantic/pydantic-core#1063](https://github.com/pydantic/pydantic-core/pull/1063) - Use `__getattr__` for all package imports, improve import time by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [#&#8203;7947](https://github.com/pydantic/pydantic/pull/7947) ##### Fixes - Fix `mypy` issue with subclasses of `RootModel` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7677](https://github.com/pydantic/pydantic/pull/7677) - Properly rebuild the `FieldInfo` when a forward ref gets evaluated by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;7698](https://github.com/pydantic/pydantic/pull/7698) - Fix failure to load `SecretStr` from JSON (regression in v2.4) by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7729](https://github.com/pydantic/pydantic/pull/7729) - Fix `defer_build` behavior with `TypeAdapter` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7736](https://github.com/pydantic/pydantic/pull/7736) - Improve compatibility with legacy `mypy` versions by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;7742](https://github.com/pydantic/pydantic/pull/7742) - Fix: update `TypeVar` handling when default is not set by [@&#8203;pmmmwh](https://github.com/pmmmwh) in [#&#8203;7719](https://github.com/pydantic/pydantic/pull/7719) - Support specification of `strict` on `Enum` type fields by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7761](https://github.com/pydantic/pydantic/pull/7761) - Wrap `weakref.ref` instead of subclassing to fix `cloudpickle` serialization by [@&#8203;edoakes](https://github.com/edoakes) in [#&#8203;7780](https://github.com/pydantic/pydantic/pull/7780) - Keep values of private attributes set within `model_post_init` in subclasses by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7775](https://github.com/pydantic/pydantic/pull/7775) - Add more specific type for non-callable `json_schema_extra` by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7803](https://github.com/pydantic/pydantic/pull/7803) - Raise an error when deleting frozen (model) fields by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7800](https://github.com/pydantic/pydantic/pull/7800) - Fix schema sorting bug with default values by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7817](https://github.com/pydantic/pydantic/pull/7817) - Use generated alias for aliases that are not specified otherwise by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7802](https://github.com/pydantic/pydantic/pull/7802) - Support `strict` specification for `UUID` types by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7865](https://github.com/pydantic/pydantic/pull/7865) - JSON schema: fix extra parameter handling by [@&#8203;me-and](https://github.com/me-and) in [#&#8203;7810](https://github.com/pydantic/pydantic/pull/7810) - Fix: support `pydantic.Field(kw_only=True)` with inherited dataclasses by [@&#8203;PrettyWood](https://github.com/PrettyWood) in [#&#8203;7827](https://github.com/pydantic/pydantic/pull/7827) - Support `validate_call` decorator for methods in classes with `__slots__` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7883](https://github.com/pydantic/pydantic/pull/7883) - Fix pydantic dataclass problem with `dataclasses.field` default by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;7898](https://github.com/pydantic/pydantic/pull/7898) - Fix schema generation for generics with union type bounds by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7899](https://github.com/pydantic/pydantic/pull/7899) - Fix version for `importlib_metadata` on python 3.7 by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7904](https://github.com/pydantic/pydantic/pull/7904) - Support `|` operator (Union) in PydanticRecursiveRef by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7892](https://github.com/pydantic/pydantic/pull/7892) - Fix `display_as_type` for `TypeAliasType` in python 3.12 by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;7929](https://github.com/pydantic/pydantic/pull/7929) - Add support for `NotRequired` generics in `TypedDict` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;7932](https://github.com/pydantic/pydantic/pull/7932) - Make generic `TypeAliasType` specifications produce different schema definitions by [@&#8203;alexdrydew](https://github.com/alexdrydew) in [#&#8203;7893](https://github.com/pydantic/pydantic/pull/7893) - Added fix for signature of inherited dataclass by [@&#8203;howsunjow](https://github.com/howsunjow) in [#&#8203;7925](https://github.com/pydantic/pydantic/pull/7925) - Make the model name generation more robust in JSON schema by [@&#8203;joakimnordling](https://github.com/joakimnordling) in [#&#8203;7881](https://github.com/pydantic/pydantic/pull/7881) - Fix plurals in validation error messages (in tests) by [@&#8203;Iipin](https://github.com/Iipin) in [#&#8203;7972](https://github.com/pydantic/pydantic/pull/7972) - `PrivateAttr` is passed from `Annotated` default position by [@&#8203;tabassco](https://github.com/tabassco) in [#&#8203;8004](https://github.com/pydantic/pydantic/pull/8004) - Don't decode bytes (which may not be UTF8) when displaying SecretBytes by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;8012](https://github.com/pydantic/pydantic/pull/8012) - Use `classmethod` instead of `classmethod[Any, Any, Any]` by [@&#8203;Mr-Pepe](https://github.com/Mr-Pepe) in [#&#8203;7979](https://github.com/pydantic/pydantic/pull/7979) - Clearer error on invalid Plugin by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [#&#8203;8023](https://github.com/pydantic/pydantic/pull/8023) - Correct pydantic dataclasses import by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [#&#8203;8027](https://github.com/pydantic/pydantic/pull/8027) - Fix misbehavior for models referencing redefined type aliases by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8050](https://github.com/pydantic/pydantic/pull/8050) - Fix `Optional` field with `validate_default` only performing one field validation by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1002](https://github.com/pydantic/pydantic-core/pull/1002) - Fix `definition-ref` bug with `Dict` keys by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1014](https://github.com/pydantic/pydantic-core/pull/1014) - Fix bug allowing validation of `bool` types with `coerce_numbers_to_str=True` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1017](https://github.com/pydantic/pydantic-core/pull/1017) - Don't accept `NaN` in float and decimal constraints by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/pydantic-core#1037](https://github.com/pydantic/pydantic-core/pull/1037) - Add `lax_str` and `lax_int` support for enum values not inherited from str/int by [@&#8203;michaelhly](https://github.com/michaelhly) in [pydantic/pydantic-core#1015](https://github.com/pydantic/pydantic-core/pull/1015) - Support subclasses in lists in `Union` of `List` types by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1039](https://github.com/pydantic/pydantic-core/pull/1039) - Allow validation against `max_digits` and `decimals` to pass if normalized or non-normalized input is valid by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1049](https://github.com/pydantic/pydantic-core/pull/1049) - Fix: proper pluralization in `ValidationError` messages by [@&#8203;Iipin](https://github.com/Iipin) in [pydantic/pydantic-core#1050](https://github.com/pydantic/pydantic-core/pull/1050) - Disallow the string `'-'` as `datetime` input by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/speedate#52](https://github.com/pydantic/speedate/pull/52) & [pydantic/pydantic-core#1060](https://github.com/pydantic/pydantic-core/pull/1060) - Fix: NaN and Inf float serialization by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/pydantic-core#1062](https://github.com/pydantic/pydantic-core/pull/1062) - Restore manylinux-compatible PGO builds by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/pydantic-core#1068](https://github.com/pydantic/pydantic-core/pull/1068) ##### New Contributors ##### `pydantic` - [@&#8203;schneebuzz](https://github.com/schneebuzz) made their first contribution in [#&#8203;7699](https://github.com/pydantic/pydantic/pull/7699) - [@&#8203;edoakes](https://github.com/edoakes) made their first contribution in [#&#8203;7780](https://github.com/pydantic/pydantic/pull/7780) - [@&#8203;alexmojaki](https://github.com/alexmojaki) made their first contribution in [#&#8203;7775](https://github.com/pydantic/pydantic/pull/7775) - [@&#8203;NickG123](https://github.com/NickG123) made their first contribution in [#&#8203;7751](https://github.com/pydantic/pydantic/pull/7751) - [@&#8203;gowthamgts](https://github.com/gowthamgts) made their first contribution in [#&#8203;7830](https://github.com/pydantic/pydantic/pull/7830) - [@&#8203;jamesbraza](https://github.com/jamesbraza) made their first contribution in [#&#8203;7848](https://github.com/pydantic/pydantic/pull/7848) - [@&#8203;laundmo](https://github.com/laundmo) made their first contribution in [#&#8203;7850](https://github.com/pydantic/pydantic/pull/7850) - [@&#8203;rahmatnazali](https://github.com/rahmatnazali) made their first contribution in [#&#8203;7870](https://github.com/pydantic/pydantic/pull/7870) - [@&#8203;waterfountain1996](https://github.com/waterfountain1996) made their first contribution in [#&#8203;7878](https://github.com/pydantic/pydantic/pull/7878) - [@&#8203;chris-spann](https://github.com/chris-spann) made their first contribution in [#&#8203;7863](https://github.com/pydantic/pydantic/pull/7863) - [@&#8203;me-and](https://github.com/me-and) made their first contribution in [#&#8203;7810](https://github.com/pydantic/pydantic/pull/7810) - [@&#8203;utkini](https://github.com/utkini) made their first contribution in [#&#8203;7768](https://github.com/pydantic/pydantic/pull/7768) - [@&#8203;bn-l](https://github.com/bn-l) made their first contribution in [#&#8203;7744](https://github.com/pydantic/pydantic/pull/7744) - [@&#8203;alexdrydew](https://github.com/alexdrydew) made their first contribution in [#&#8203;7893](https://github.com/pydantic/pydantic/pull/7893) - [@&#8203;Luca-Blight](https://github.com/Luca-Blight) made their first contribution in [#&#8203;7930](https://github.com/pydantic/pydantic/pull/7930) - [@&#8203;howsunjow](https://github.com/howsunjow) made their first contribution in [#&#8203;7925](https://github.com/pydantic/pydantic/pull/7925) - [@&#8203;joakimnordling](https://github.com/joakimnordling) made their first contribution in [#&#8203;7881](https://github.com/pydantic/pydantic/pull/7881) - [@&#8203;icfly2](https://github.com/icfly2) made their first contribution in [#&#8203;7976](https://github.com/pydantic/pydantic/pull/7976) - [@&#8203;Yummy-Yums](https://github.com/Yummy-Yums) made their first contribution in [#&#8203;8003](https://github.com/pydantic/pydantic/pull/8003) - [@&#8203;Iipin](https://github.com/Iipin) made their first contribution in [#&#8203;7972](https://github.com/pydantic/pydantic/pull/7972) - [@&#8203;tabassco](https://github.com/tabassco) made their first contribution in [#&#8203;8004](https://github.com/pydantic/pydantic/pull/8004) - [@&#8203;Mr-Pepe](https://github.com/Mr-Pepe) made their first contribution in [#&#8203;7979](https://github.com/pydantic/pydantic/pull/7979) - [@&#8203;0x00cl](https://github.com/0x00cl) made their first contribution in [#&#8203;8010](https://github.com/pydantic/pydantic/pull/8010) - [@&#8203;barraponto](https://github.com/barraponto) made their first contribution in [#&#8203;8032](https://github.com/pydantic/pydantic/pull/8032) ##### `pydantic-core` - [@&#8203;sisp](https://github.com/sisp) made their first contribution in [pydantic/pydantic-core#995](https://github.com/pydantic/pydantic-core/pull/995) - [@&#8203;michaelhly](https://github.com/michaelhly) made their first contribution in [pydantic/pydantic-core#1015](https://github.com/pydantic/pydantic-core/pull/1015) ### [`v2.14.0`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2140-2026-10-08) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.13.5...v2.14.0) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.0) ##### What's Changed The highlights of the v2.14 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-14-release). Several minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.14/get-started/version-policy/#pydantic-v2)) 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 - Add support for `multiple_of` constraint in `fraction` and `timedelta` core schemas by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13873](https://github.com/pydantic/pydantic/pull/13873) - Add `__namespace__` parameter to `create_model()` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13895](https://github.com/pydantic/pydantic/pull/13895) ##### Changes - Add an `ordered-dict` core schema by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13796](https://github.com/pydantic/pydantic/pull/13796) - Add a `counter` core schema by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13824](https://github.com/pydantic/pydantic/pull/13824) - Do not mutate `model_config` attribute by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13825](https://github.com/pydantic/pydantic/pull/13825) - Reject newlines in `NameEmail` validation by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13897](https://github.com/pydantic/pydantic/pull/13897) ##### Fixes - Call enum constructors in both validation modes by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13792](https://github.com/pydantic/pydantic/pull/13792) - Fix documentation examples not raising and remove unused `string_sub_type` unused error code by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13821](https://github.com/pydantic/pydantic/pull/13821) - Catch `OverflowError` during `ByteSize` validation by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13850](https://github.com/pydantic/pydantic/pull/13850) - Require `multiple_of` constraints to be positive by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13862](https://github.com/pydantic/pydantic/pull/13862) - Always pop field name and model type stacks during schema generation by [@&#8203;saquibjawedbit](https://github.com/saquibjawedbit) in [#&#8203;13859](https://github.com/pydantic/pydantic/pull/13859) - Handle `TypeError` gracefully during docstring extraction by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13874](https://github.com/pydantic/pydantic/pull/13874) - Fix config propagation of stdlib dataclasses and `TypedDict`s in JSON Schema by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13891](https://github.com/pydantic/pydantic/pull/13891) - Don't apply `ser_json_timedelta` to all datetime types in serialization inference by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13892](https://github.com/pydantic/pydantic/pull/13892) - Encode JSON Schema defaults with a consistent configuration by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13893](https://github.com/pydantic/pydantic/pull/13893) - Propagate `init` and `kw_only=False` from `Field()` to stdlib dataclass fields by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13898](https://github.com/pydantic/pydantic/pull/13898) - Respect propagated extra config in the JSON Schema of stdlib dataclasses by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13899](https://github.com/pydantic/pydantic/pull/13899) - Handle OS errors during `ZoneInfo` validation by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13912](https://github.com/pydantic/pydantic/pull/13912) - Handle exceptions during `Decimal` validation by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13940](https://github.com/pydantic/pydantic/pull/13940) - Rebuild incomplete types during serialization inference by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13922](https://github.com/pydantic/pydantic/pull/13922) - Reject large exponents in `Fraction` validation by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13944](https://github.com/pydantic/pydantic/pull/13944) - Avoid validating URL prefix multiple times in multi host URLs by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13945](https://github.com/pydantic/pydantic/pull/13945) ##### New Contributors - [@&#8203;saquibjawedbit](https://github.com/saquibjawedbit) made their first contribution in [#&#8203;13859](https://github.com/pydantic/pydantic/pull/13859) ### [`v2.13.5`](https://github.com/pydantic/pydantic/releases/tag/v2.13.5): 2026-08-28 [Compare Source](https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5) #### v2.13.5 (2026-08-28) ##### What's Changed ##### Fixes - Allow reuse of validators when plugins are set by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13535](https://github.com/pydantic/pydantic/pull/13535) - Fix missing GC traversal on some `pydantic-core` struct fields by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13624](https://github.com/pydantic/pydantic/pull/13624) - Fix missing GC traversal in `pydantic-core` for `GeneralFieldsSerializer` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13629](https://github.com/pydantic/pydantic/pull/13629) - Count validated model fields once in smart unions by [@&#8203;tamird](https://github.com/tamird) in [#&#8203;13731](https://github.com/pydantic/pydantic/pull/13731) ### [`v2.13.4`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2134-2026-05-06) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.4) ##### What's Changed ##### Packaging - Bump libc from 0.2.155 to 0.2.185 by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13109](https://github.com/pydantic/pydantic/pull/13109) - Adapt `pydantic-core` linker flags on macOS by [@&#8203;washingtoneg](https://github.com/washingtoneg) and [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13147](https://github.com/pydantic/pydantic/pull/13147) ##### Fixes - Preserve `RootModel` core metadata by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13129](https://github.com/pydantic/pydantic/pull/13129) ### [`v2.13.3`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2133-2026-04-20) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.3) ##### What's Changed ##### Fixes - Handle `AttributeError` subclasses with `from_attributes` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13096](https://github.com/pydantic/pydantic/pull/13096) ### [`v2.13.2`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2132-2026-04-17) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.2) ##### What's Changed ##### Fixes - Fix `ValidationInfo.field_name` missing with `model_validate_json()` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13084](https://github.com/pydantic/pydantic/pull/13084) ### [`v2.13.1`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2131-2026-04-15) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.1) ##### What's Changed ##### Fixes - Fix `ValidationInfo.data` missing with `model_validate_json()` by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [#&#8203;13079](https://github.com/pydantic/pydantic/pull/13079) ### [`v2.13.0`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2130-2026-04-13) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.0) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.13.0) The highlights of the v2.13 release are available in the [blog post](https://pydantic.dev/articles/pydantic-v2-13-release). Several minor changes (considered non-breaking changes according to our [versioning policy](https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2)) are also included in this release. Make sure to look into them before upgrading. This release contains the updated `pydantic.v1` namespace, 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 - Allow default factories of private attributes to take validated model data by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13013](https://github.com/pydantic/pydantic/pull/13013) ##### Changes - Warn when serializing fixed length tuples with too few items by [@&#8203;arvindsaripalli](https://github.com/arvindsaripalli) in [#&#8203;13016](https://github.com/pydantic/pydantic/pull/13016) ##### Fixes - Change type of `Any` when synthesizing `_build_sources` for `BaseSettings.__init__()` signature in the mypy plugin by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13049](https://github.com/pydantic/pydantic/pull/13049) - Fix model equality when using runtime `extra` configuration by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13062](https://github.com/pydantic/pydantic/pull/13062) ##### Packaging - Add zizmor for GitHub Actions workflow linting by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13039](https://github.com/pydantic/pydantic/pull/13039) - Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;13064](https://github.com/pydantic/pydantic/pull/13064) ##### New Contributors - [@&#8203;arvindsaripalli](https://github.com/arvindsaripalli) made their first contribution in [#&#8203;13016](https://github.com/pydantic/pydantic/pull/13016) ### [`v2.12.5`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2125-2025-11-26) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.12.4...v2.12.5) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.5) This is the fifth 2.12 patch release, addressing an issue with the `MISSING` sentinel 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. - Fix pickle error when using `model_construct()` on a model with `MISSING` as a default value by [@&#8203;ornariece](https://github.com/ornariece) in [#&#8203;12522](https://github.com/pydantic/pydantic/pull/12522). - Several updates to the documentation by [@&#8203;Viicos](https://github.com/Viicos). ### [`v2.12.4`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2124-2025-11-05) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.12.3...v2.12.4) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.4) This is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the `build()` method of the [`AnyUrl` and Dsn types](https://pydantic.dev/docs/validation/latest/api/pydantic/networks/). This patch release also fixes an issue with the serialization of IP address types, when `serialize_as_any` is used. The next patch release will 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 `TypedDict` classes by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12427](https://github.com/pydantic/pydantic/pull/12427). This issue is only relevant on Python 3.14 and greater. - Exclude fields with `exclude_if` from JSON Schema required fields by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12430](https://github.com/pydantic/pydantic/pull/12430) - Revert URL percent-encoding of credentials in the `build()` method of the [`AnyUrl` and Dsn types](https://pydantic.dev/docs/validation/latest/api/pydantic/networks/) by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1833](https://github.com/pydantic/pydantic-core/pull/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 [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1868](https://github.com/pydantic/pydantic-core/pull/1868). The 2.12 changes to the `serialize_as_any` behavior made it so that IP address types could not properly serialize to JSON. - Avoid getting default values from defaultdict by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1853](https://github.com/pydantic/pydantic-core/pull/1853). This fixes a subtle regression in the validation behavior of the [`collections.defaultdict`](https://docs.python.org/3/library/collections.html#collections.defaultdict) type. - Fix issue with field serializers on nested typed dictionaries by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1879](https://github.com/pydantic/pydantic-core/pull/1879). - Add more `pydantic-core` builds for the three-threaded version of Python 3.14 by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1864](https://github.com/pydantic/pydantic-core/pull/1864). ### [`v2.12.3`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2123-2025-10-17) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.12.2...v2.12.3) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.3) ##### What's Changed This is the third 2.12 patch release, fixing issues related to the `FieldInfo` class, and reverting a change to the supported [*after* model validator](https://pydantic.dev/docs/validation/latest/concepts/validators/#model-validators) function signatures. - Raise a warning when an invalid after model validator function signature is raised by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12414](https://github.com/pydantic/pydantic/pull/12414). 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. - Add [`FieldInfo.asdict()`](https://pydantic.dev/docs/validation/latest/api/pydantic/fields/#pydantic.fields.FieldInfo.asdict) method, improve documentation around `FieldInfo` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12411](https://github.com/pydantic/pydantic/pull/12411). This also add back support for mutations on `FieldInfo` classes, that are reused as `Annotated` metadata. **However**, note that this is still *not* a supported pattern. Instead, please refer to the [added example](https://pydantic.dev/docs/validation/latest/examples/dynamic_models/) in the documentation. The [blog post](https://pydantic.dev/articles/pydantic-v2-12-release#changes) section on changes was also updated to document the changes related to `serialize_as_any`. ### [`v2.12.2`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2122-2025-10-14) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.12.1...v2.12.2) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.2) ##### What's Changed ##### Fixes - Release a new `pydantic-core` version, as a corrupted CPython 3.10 `manylinux2014_aarch64` wheel got uploaded ([pydantic-core#1843](https://github.com/pydantic/pydantic-core/pull/1843)). - Fix issue with recursive generic models with a parent model class by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12398](https://github.com/pydantic/pydantic/pull/12398) ### [`v2.12.1`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2121-2025-10-13) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.12.0...v2.12.1) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.1) ##### 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 - Do not evaluate annotations when inspecting validators and serializers by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12355](https://github.com/pydantic/pydantic/pull/12355) - Make sure `None` is converted as `NoneType` in Python 3.14 by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12370](https://github.com/pydantic/pydantic/pull/12370) - Backport V1 runtime warning when using Python 3.14 by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12367](https://github.com/pydantic/pydantic/pull/12367) - Fix error message for invalid validator signatures by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12366](https://github.com/pydantic/pydantic/pull/12366) - Populate field name in `ValidationInfo` for validation of default value by [@&#8203;Viicos](https://github.com/Viicos) in [pydantic-core#1826](https://github.com/pydantic/pydantic-core/pull/1826) - Encode credentials in `MultiHostUrl` builder by [@&#8203;willswire](https://github.com/willswire) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829) - Respect field serializers when using `serialize_as_any` serialization flag by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829) - Fix various `RootModel` serialization issues by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic-core#1836](https://github.com/pydantic/pydantic-core/pull/1836) ##### New Contributors - [@&#8203;willswire](https://github.com/willswire) made their first contribution in [pydantic-core#1829](https://github.com/pydantic/pydantic-core/pull/1829) ### [`v2.12.0`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2120-2025-10-07) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.11.10...v2.12.0) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.12.0) 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](https://pydantic.dev/docs/validation/2.12/get-started/version-policy/#pydantic-v2)) 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 - Add `extra` parameter to the validate functions by [@&#8203;anvilpete](https://github.com/anvilpete) in [#&#8203;12233](https://github.com/pydantic/pydantic/pull/12233) - Add `exclude_computed_fields` serialization option by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12334](https://github.com/pydantic/pydantic/pull/12334) - Add `preverse_empty_path` URL options by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12336](https://github.com/pydantic/pydantic/pull/12336) - Add `union_format` parameter to JSON Schema generation by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12147](https://github.com/pydantic/pydantic/pull/12147) - Add `__qualname__` parameter for `create_model` by [@&#8203;Atry](https://github.com/Atry) in [#&#8203;12001](https://github.com/pydantic/pydantic/pull/12001) ##### Fixes - Do not try to infer name from lambda definitions in pipelines API by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12289](https://github.com/pydantic/pydantic/pull/12289) - Use proper namespace for functions in `TypeAdapter` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12324](https://github.com/pydantic/pydantic/pull/12324) - Use `Any` for context type annotation in `TypeAdapter` by [@&#8203;inducer](https://github.com/inducer) in [#&#8203;12279](https://github.com/pydantic/pydantic/pull/12279) - Expose `FieldInfo` in `pydantic.fields.__all__` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12339](https://github.com/pydantic/pydantic/pull/12339) - Respect `validation_alias` in `@validate_call` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12340](https://github.com/pydantic/pydantic/pull/12340) - Use `Any` as context annotation in plugin API by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12341](https://github.com/pydantic/pydantic/pull/12341) - Use proper `stacklevel` in warnings when possible by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12342](https://github.com/pydantic/pydantic/pull/12342) ##### Packaging - Update V1 copy to v1.10.24 by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;12338](https://github.com/pydantic/pydantic/pull/12338) ##### New Contributors - [@&#8203;anvilpete](https://github.com/anvilpete) made their first contribution in [#&#8203;12233](https://github.com/pydantic/pydantic/pull/12233) - [@&#8203;JonathanWindell](https://github.com/JonathanWindell) made their first contribution in [#&#8203;12327](https://github.com/pydantic/pydantic/pull/12327) - [@&#8203;inducer](https://github.com/inducer) made their first contribution in [#&#8203;12279](https://github.com/pydantic/pydantic/pull/12279) - [@&#8203;Atry](https://github.com/Atry) made their first contribution in [#&#8203;12001](https://github.com/pydantic/pydantic/pull/12001) ### [`v2.11.10`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v21110-2025-10-04) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.11.9...v2.11.10) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.10) ##### What's Changed ##### Fixes - Backport v1.10.24 changes by [@&#8203;Viicos](https://github.com/Viicos) ### [`v2.11.9`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2119-2025-09-13) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.11.8...v2.11.9) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.9) ##### What's Changed ##### Fixes - Backport v1.10.23 changes by [@&#8203;Viicos](https://github.com/Viicos) ### [`v2.11.8`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2118-2025-09-13) [Compare Source](https://github.com/pydantic/pydantic/compare/v2.11.7...v2.11.8) [GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.11.8) ##### What's Changed ##### Fixes - Fix mypy plugin for mypy 1.18 by [@&#8203;cdce8p](https://github.com/cdce8p) in [#&#8203;12209](https://github.com/pydantic/pydantic/pull/12209) </details> <details> <summary>pydantic/pydantic-settings (pydantic-settings)</summary> ### [`v2.16.2`](https://github.com/pydantic/pydantic-settings/compare/v2.16.1...v2.16.2) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.16.1...v2.16.2) ### [`v2.16.1`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.16.1) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1) #### Highlights This patch release fixes two CLI regressions introduced in 2.16.0. ##### Bug fixes **CLI** - Fixed-length tuple positionals such as `CliPositionalArg[tuple[int, int]]` and `NamedTuple`s are single-valued again ([#&#8203;1069](https://github.com/pydantic/pydantic-settings/pull/1069)). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a `SettingsError` or put the wrong argument into the tuple. Variable-length tuples (`tuple[int, ...]` and bare `Tuple`) are still variadic. - A field typed as an alias of a list of dicts, e.g. `type ListOfDict = list[dict[str, int]]`, accepts a JSON list again ([#&#8203;1049](https://github.com/pydantic/pydantic-settings/pull/1049)). Since 2.16.0, `--xx '[{"a":1},{"b":2}]'` was merged into the single dict `{"a": 1, "b": 2}` and failed validation. <details> <summary><b>All changes</b> (including dependency bumps and internal maintenance)</summary> #### What's Changed * Harden CI by @&#8203;Viicos in https://github.com/pydantic/pydantic-settings/pull/1044 * Keep list of dicts CLI values as lists by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1049 * Keep fixed-length tuple CLI positionals single-valued by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1069 * Prepare release 2.16.1 by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1087 * build(deps): bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/1056 **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1> </details> ### [`v2.16.0`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.16.0) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.0) #### Highlights ##### Breaking changes and behavior changes - **Python 3.10 is no longer supported** ([#&#8203;1003](https://github.com/pydantic/pydantic-settings/pull/1003)). pydantic-settings now requires Python 3.11+, since 3.10 reaches end of life this month. The `tomli` fallback is gone in favor of stdlib `tomllib`; the `toml` extra is kept as an empty extra so `pip install pydantic-settings[toml]` keeps working. - **`python-dotenv>=1.2.2` is now required** ([#&#8203;971](https://github.com/pydantic/pydantic-settings/pull/971)) to pick up the fix for CVE-2026-28684. - **Aliases are ignored in every source when `validate_by_alias=False`** ([#&#8203;1033](https://github.com/pydantic/pydantic-settings/pull/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 raising `extra_forbidden`, and the CLI exposes `--apple` rather than `--pomo`. - **`validation_alias` takes precedence over `alias`** ([#&#8203;1038](https://github.com/pydantic/pydantic-settings/pull/1038)). When the two differ, values from JSON/YAML/TOML files and the CLI were silently ignored; they now load. CLI help lists the `validation_alias` flag first, and `CliApp.serialize` emits it. - **CLI case-insensitivity only lowercases registered options** ([#&#8203;1036](https://github.com/pydantic/pydantic-settings/pull/1036)). With `case_sensitive=False`, args after `--` and those captured by `CliUnknownArgs` keep their case (`-Xmx4G` no longer becomes `-xmx4g`). Unrecognized options are now reported as typed (`--NOPE` instead of `--nope`). - **JSON and YAML config files are read as UTF-8 by default** ([#&#8203;955](https://github.com/pydantic/pydantic-settings/pull/955)) instead of the locale encoding, completing the secrets-file fix from 2.15.0. `json_file_encoding`/`yaml_file_encoding` still override it. - **Discriminated union defaults are partially updated again** ([#&#8203;997](https://github.com/pydantic/pydantic-settings/pull/997)). This reverts the 2.15.0 regression with `nested_model_default_partial_update=True`: the default is only dropped when the incoming value selects a *different* union member. ##### New features - **Python 3.15 and pydantic 2.14 support** ([#&#8203;1026](https://github.com/pydantic/pydantic-settings/pull/1026), [#&#8203;1029](https://github.com/pydantic/pydantic-settings/pull/1029), [#&#8203;1022](https://github.com/pydantic/pydantic-settings/pull/1022)). pydantic 2.14 broke `CliApp.run` and `validate_by_alias=False` handling; both are fixed. - **Cached settings instances** via `Settings.settings_cached()` and `Settings.settings_clear_cache()` ([#&#8203;952](https://github.com/pydantic/pydantic-settings/pull/952)). These give you a process-local singleton per settings class without hand-rolling `lru_cache` wrappers. Calling the class directly still builds a fresh instance. - **AWS Systems Manager Parameter Store source** — `AWSSystemsManagerSettingsSource` ([#&#8203;941](https://github.com/pydantic/pydantic-settings/pull/941)). It recursively reads every parameter under an `ssm_path`, with `/` mapping onto nested models. Install it with the new `aws-systems-manager` extra. - **`env_file_depth`** ([#&#8203;940](https://github.com/pydantic/pydantic-settings/pull/940)) lets a relative `env_file` be found in parent directories, mirroring `pyproject_toml_depth`. This is useful when scripts run from a subdirectory of a monorepo. It defaults to `0`, which keeps the current behavior. - **`CliVariadicArg` for named variadic options** ([#&#8203;949](https://github.com/pydantic/pydantic-settings/pull/949), [#&#8203;958](https://github.com/pydantic/pydantic-settings/pull/958)). It accepts `--param a b c` in addition to repeated `--param a --param b`. Required fields need at least one value. ##### Bug fixes **CLI** - `CliApp.serialize` output now round-trips through `CliApp.run` for enums, tuples, dates and `Decimal`s ([#&#8203;988](https://github.com/pydantic/pydantic-settings/pull/988)), explicit `None` values ([#&#8203;981](https://github.com/pydantic/pydantic-settings/pull/981)), empty containers ([#&#8203;1008](https://github.com/pydantic/pydantic-settings/pull/1008)), `CliVariadicArg` values ([#&#8203;976](https://github.com/pydantic/pydantic-settings/pull/976)) and populated `CliUnknownArgs` fields, which previously raised `IndexError` ([#&#8203;992](https://github.com/pydantic/pydantic-settings/pull/992)). - Empty JSON arrays (`--items []`) now give an empty list instead of `['']` ([#&#8203;994](https://github.com/pydantic/pydantic-settings/pull/994)). - Tuples, `frozenset`, `MutableSequence` and other collection subtypes are now treated as repeatable/variadic options ([#&#8203;972](https://github.com/pydantic/pydantic-settings/pull/972)), and so are named collection type aliases such as `TypeAliasType('Addrs', list[IPvAnyAddress])` ([#&#8203;1032](https://github.com/pydantic/pydantic-settings/pull/1032)). - `cli_exit_on_error=False` is now honored in `CliSubCommand` parsers, which raise `SettingsError` instead of exiting ([#&#8203;977](https://github.com/pydantic/pydantic-settings/pull/977)). - `CliSubCommand` aliases keep their case with `case_sensitive=False` ([#&#8203;989](https://github.com/pydantic/pydantic-settings/pull/989)). - Each `CliUnknownArgs` field now receives only its own subcommand's leftover args ([#&#8203;1004](https://github.com/pydantic/pydantic-settings/pull/1004)). - `CliApp.format_help` no longer crashes when `cli_prefix` is set in `model_config` ([#&#8203;945](https://github.com/pydantic/pydantic-settings/pull/945)). **Type aliases and parsing** - Named union type aliases (`TypeAliasType('V', list[int] | str)`) now decode like their inline equivalents in env and dotenv sources, including under `Optional`, `Annotated` and custom validation aliases ([#&#8203;1006](https://github.com/pydantic/pydantic-settings/pull/1006), [#&#8203;1030](https://github.com/pydantic/pydantic-settings/pull/1030), [#&#8203;1041](https://github.com/pydantic/pydantic-settings/pull/1041)). - Resolving a named `Annotated` type alias no longer mutates shared `FieldInfo` metadata, which made validators run twice on subclasses or after `model_rebuild()` ([#&#8203;979](https://github.com/pydantic/pydantic-settings/pull/979)). - A bare single-segment `AliasPath('SOME_KEY')` no longer tries to JSON-decode plain string values ([#&#8203;980](https://github.com/pydantic/pydantic-settings/pull/980)). - `collections.abc.Set`/`MutableSet`/`typing.AbstractSet` fields now JSON-decode env values ([#&#8203;973](https://github.com/pydantic/pydantic-settings/pull/973)). - A bare `typing.Dict` field with `env_nested_delimiter` no longer raises `IndexError`, which was a regression in 2.13.0 ([#&#8203;1009](https://github.com/pydantic/pydantic-settings/pull/1009)). - Case-insensitive matching now works for nested pydantic dataclasses ([#&#8203;1010](https://github.com/pydantic/pydantic-settings/pull/1010)). **Dotenv, secrets and config files** - With `extra='allow'`, a non-lowercase `env_prefix` is now stripped from dotenv extras ([#&#8203;959](https://github.com/pydantic/pydantic-settings/pull/959), [#&#8203;968](https://github.com/pydantic/pydantic-settings/pull/968)). - `secrets_case_sensitive=True` is now honored on Windows ([#&#8203;1001](https://github.com/pydantic/pydantic-settings/pull/1001)). - An empty JSON config file is treated as an empty mapping instead of crashing ([#&#8203;947](https://github.com/pydantic/pydantic-settings/pull/947)), matching YAML and TOML. - TOML table headers: `~` paths are now expanded when checking that the file exists ([#&#8203;1034](https://github.com/pydantic/pydantic-settings/pull/1034)), and an explicit `toml_table_header=()` now overrides the model config to read the file root ([#&#8203;1027](https://github.com/pydantic/pydantic-settings/pull/1027)). **Cloud sources** - Azure Key Vault and GCP Secret Manager now honor `env_parse_none_str` ([#&#8203;1019](https://github.com/pydantic/pydantic-settings/pull/1019), [#&#8203;1040](https://github.com/pydantic/pydantic-settings/pull/1040)). - Azure Key Vault: `dash_to_underscore=True` now works for nested model fields ([#&#8203;1025](https://github.com/pydantic/pydantic-settings/pull/1025)). - `NestedSecretsSettingsSource` now validates its specific constructor arguments ([#&#8203;975](https://github.com/pydantic/pydantic-settings/pull/975)). - `DotenvFiltering` is exported from `pydantic_settings.sources.types` ([#&#8203;944](https://github.com/pydantic/pydantic-settings/pull/944)). ##### Documentation - Document that runtime validation arguments (`strict`, `extra`, `context`) passed to `model_validate()` are not applied to `BaseSettings`, and give a workaround ([#&#8203;1017](https://github.com/pydantic/pydantic-settings/pull/1017)). - Explain why `extra='forbid'` doesn't reject misspelled top-level env vars ([#&#8203;986](https://github.com/pydantic/pydantic-settings/pull/986)). - Clarify alias plus nested model env lookup with `populate_by_name` ([#&#8203;933](https://github.com/pydantic/pydantic-settings/pull/933)), and add a nested model example for `env_prefix_target` ([#&#8203;953](https://github.com/pydantic/pydantic-settings/pull/953)). - Fix assorted typos ([#&#8203;942](https://github.com/pydantic/pydantic-settings/pull/942), [#&#8203;964](https://github.com/pydantic/pydantic-settings/pull/964)). <details> <summary><b>All changes</b> (including dependency bumps and internal maintenance)</summary> #### What's Changed * Bump boto3 from 1.43.60 to 1.43.66 in the python-packages group by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/936 * docs: clarify alias + nested model env lookup with populate_by_name by @&#8203;pranjalm37 in https://github.com/pydantic/pydantic-settings/pull/933 * lint: enable flake8-bugbear and fix the issues it found by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/931 * Bump the python-packages group with 6 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/943 * docs: improve ENV_FILE_SENTINEL comment phrasing in sources/types.py by @&#8203;aoright in https://github.com/pydantic/pydantic-settings/pull/942 * fix(types): include DotenvFiltering in __all__ in sources.types by @&#8203;aoright in https://github.com/pydantic/pydantic-settings/pull/944 * Add env_file_depth for parent directory env file lookup by @&#8203;dmi03 in https://github.com/pydantic/pydantic-settings/pull/940 * Add an AWS Systems Manager Parameter Store settings source by @&#8203;ChrisJr404 in https://github.com/pydantic/pydantic-settings/pull/941 * fix: use self.cli_prefix instead of cli_prefix in CliSettingsSource constructor by @&#8203;RomainL972 in https://github.com/pydantic/pydantic-settings/pull/945 * Bump the python-packages group with 6 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/948 * fix: treat empty JSON config file as empty mapping instead of crashing by @&#8203;sneha4175 in https://github.com/pydantic/pydantic-settings/pull/947 * Expand ruff rule selection by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/950 * Enable ruff's flake8-return (RET) rules by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/951 * docs: add nested model alias example for env_prefix_target by @&#8203;MohammedAlkindi in https://github.com/pydantic/pydantic-settings/pull/953 * Add cached settings instances by @&#8203;tiangolo in https://github.com/pydantic/pydantic-settings/pull/952 * Bump the github-actions group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/954 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/957 * Add CliVariadicArg for named variadic CLI options by @&#8203;gyanu2507 in https://github.com/pydantic/pydantic-settings/pull/949 * Fix CliVariadicArg empty-value handling for named options by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/958 * fix: read JSON and YAML config as UTF-8, not the locale encoding by @&#8203;MohammedAlkindi in https://github.com/pydantic/pydantic-settings/pull/955 * Reach 100% test coverage by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/963 * docs: fix three small wording/typo errors by @&#8203;simpleqt in https://github.com/pydantic/pydantic-settings/pull/964 * fix: strip a case-normalized env_prefix from dotenv extras by @&#8203;MohammedAlkindi in https://github.com/pydantic/pydantic-settings/pull/959 * fix: slice the case-normalized prefix in dotenv match_prefix by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/968 * Bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/966 * fix: address CVE-2026-28684 in python-dotenv dependency by @&#8203;jmartens in https://github.com/pydantic/pydantic-settings/pull/971 * build(deps): bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/978 * Verify `NestedSecretsSettingsSource` specific arguments by @&#8203;makukha in https://github.com/pydantic/pydantic-settings/pull/975 * Fix abstract Set annotations not being treated as complex by @&#8203;mmdverse in https://github.com/pydantic/pydantic-settings/pull/973 * Fix CLI append-action detection for collection subtypes by @&#8203;mmdverse in https://github.com/pydantic/pydantic-settings/pull/972 * Honor cli_exit_on_error=False in CliSubCommand parsers by @&#8203;glaziermag in https://github.com/pydantic/pydantic-settings/pull/977 * Preserve CliVariadicArg values in CliApp.serialize argparse/env styles by @&#8203;glaziermag in https://github.com/pydantic/pydantic-settings/pull/976 * Avoid mutating field metadata when resolving type aliases by @&#8203;jakezwang in https://github.com/pydantic/pydantic-settings/pull/979 * fix: bare AliasPath complexity keyed off name length, not path length by @&#8203;ishan-1010 in https://github.com/pydantic/pydantic-settings/pull/980 * docs: clarify extra validation for environment variables by @&#8203;hulkbig in https://github.com/pydantic/pydantic-settings/pull/986 * build(deps): bump the python-packages group with 2 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/990 * Preserve explicit None values in CLI serialization by @&#8203;mtcd001-tech in https://github.com/pydantic/pydantic-settings/pull/981 * Make `CliApp.serialize` output parseable for enum and non-JSON values by @&#8203;SulimanAbdulrazzaq in https://github.com/pydantic/pydantic-settings/pull/988 * Preserve CliSubCommand alias case with case_sensitive=False by @&#8203;glaziermag in https://github.com/pydantic/pydantic-settings/pull/989 * Fix Path.is_mount type-checking error on win32 platform by @&#8203;truecallerabreham in https://github.com/pydantic/pydantic-settings/pull/982 * build(deps): bump astral-sh/setup-uv from 10.0.1 to 10.2.0 in the github-actions group by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/998 * build(deps): bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/999 * Fix `CliApp.serialize` for models with `CliUnknownArgs` fields by @&#8203;truecallerabreham in https://github.com/pydantic/pydantic-settings/pull/992 * Honor `secrets_case_sensitive` on Windows by overriding `_load_env_vars` by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1001 * Fix empty JSON arrays in CLI list arguments by @&#8203;hansu650 in https://github.com/pydantic/pydantic-settings/pull/994 * Bump `samuelcolvin/check-python-version` action to v5.1 by @&#8203;Viicos in https://github.com/pydantic/pydantic-settings/pull/1014 * build(deps): bump the python-packages group with 7 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/1015 * Only skip partial updates for discriminated unions selecting another type by @&#8203;SammyTourani in https://github.com/pydantic/pydantic-settings/pull/997 * fix: handle bare typing.Dict in EnvSettingsSource.next_field (#&#8203;1007) by @&#8203;DawnofGenX in https://github.com/pydantic/pydantic-settings/pull/1009 * Apply case-insensitive field matching to nested pydantic dataclasses by @&#8203;sungbin1015 in https://github.com/pydantic/pydantic-settings/pull/1010 * Document that runtime validation arguments are not applied to BaseSettings by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1017 * Fix named union alias parsing in environment sources by @&#8203;hulkbig in https://github.com/pydantic/pydantic-settings/pull/1006 * Drop support for Python 3.10 by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1003 * Add support for Python 3.15 by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1026 * Give each CliUnknownArgs field only its own parser leftovers by @&#8203;fhgffy in https://github.com/pydantic/pydantic-settings/pull/1004 * Preserve empty containers in CLI serialization by @&#8203;fallintoplace in https://github.com/pydantic/pydantic-settings/pull/1008 * Honor env_parse_none_str for Azure Key Vault secrets by @&#8203;fhgffy in https://github.com/pydantic/pydantic-settings/pull/1019 * Fix nested Azure Key Vault dash translation by @&#8203;goudan789 in https://github.com/pydantic/pydantic-settings/pull/1025 * Support pydantic 2.14 by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1029 * Read field names when `validate_by_alias=False` on pydantic 2.14 by @&#8203;maharanay22 in https://github.com/pydantic/pydantic-settings/pull/1022 * Ignore aliases in every source when `validate_by_alias=False` by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1033 * Honor explicit empty TOML table header overrides by @&#8203;xiehuanyi in https://github.com/pydantic/pydantic-settings/pull/1027 * Fix CLI parsing for named collection type aliases by @&#8203;JackyHsu-X in https://github.com/pydantic/pydantic-settings/pull/1032 * Fix JSON decoding for optional named union aliases by @&#8203;hulkbig in https://github.com/pydantic/pydantic-settings/pull/1030 * Decode optional Annotated named union aliases by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1041 * Expand home paths when checking TOML table headers by @&#8203;JunaidAhamed-7777 in https://github.com/pydantic/pydantic-settings/pull/1034 * Fix config file and CLI values being ignored when alias differs from validation_alias by @&#8203;hzmsh in https://github.com/pydantic/pydantic-settings/pull/1038 * Honor env_parse_none_str for GCP Secret Manager by @&#8203;Ganesh1729-ui in https://github.com/pydantic/pydantic-settings/pull/1040 * Simplify alias resolution branch and test alias with AliasChoices/AliasPath by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1042 * Keep case of non-option CLI args when case_sensitive=False by @&#8203;hzmsh in https://github.com/pydantic/pydantic-settings/pull/1036 * Prepare release 2.16.0 by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/1043 #### New Contributors * @&#8203;pranjalm37 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/933 * @&#8203;aoright made their first contribution in https://github.com/pydantic/pydantic-settings/pull/942 * @&#8203;dmi03 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/940 * @&#8203;ChrisJr404 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/941 * @&#8203;RomainL972 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/945 * @&#8203;sneha4175 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/947 * @&#8203;MohammedAlkindi made their first contribution in https://github.com/pydantic/pydantic-settings/pull/953 * @&#8203;tiangolo made their first contribution in https://github.com/pydantic/pydantic-settings/pull/952 * @&#8203;gyanu2507 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/949 * @&#8203;simpleqt made their first contribution in https://github.com/pydantic/pydantic-settings/pull/964 * @&#8203;jmartens made their first contribution in https://github.com/pydantic/pydantic-settings/pull/971 * @&#8203;mmdverse made their first contribution in https://github.com/pydantic/pydantic-settings/pull/973 * @&#8203;glaziermag made their first contribution in https://github.com/pydantic/pydantic-settings/pull/977 * @&#8203;jakezwang made their first contribution in https://github.com/pydantic/pydantic-settings/pull/979 * @&#8203;ishan-1010 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/980 * @&#8203;hulkbig made their first contribution in https://github.com/pydantic/pydantic-settings/pull/986 * @&#8203;mtcd001-tech made their first contribution in https://github.com/pydantic/pydantic-settings/pull/981 * @&#8203;SulimanAbdulrazzaq made their first contribution in https://github.com/pydantic/pydantic-settings/pull/988 * @&#8203;truecallerabreham made their first contribution in https://github.com/pydantic/pydantic-settings/pull/982 * @&#8203;hansu650 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/994 * @&#8203;SammyTourani made their first contribution in https://github.com/pydantic/pydantic-settings/pull/997 * @&#8203;DawnofGenX made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1009 * @&#8203;sungbin1015 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1010 * @&#8203;fhgffy made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1004 * @&#8203;fallintoplace made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1008 * @&#8203;goudan789 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1025 * @&#8203;maharanay22 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1022 * @&#8203;xiehuanyi made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1027 * @&#8203;JackyHsu-X made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1032 * @&#8203;JunaidAhamed-7777 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1034 * @&#8203;hzmsh made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1038 * @&#8203;Ganesh1729-ui made their first contribution in https://github.com/pydantic/pydantic-settings/pull/1040 **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.15.0...v2.16.0> </details> ### [`v2.15.0`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.15.0) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.14.2...v2.15.0) #### Highlights ##### Behavior changes - **`case_sensitive` now applies to init kwargs and config-file sources** ([#&#8203;900](https://github.com/pydantic/pydantic-settings/pull/900)). `InitSettingsSource` and the JSON/TOML/YAML config sources previously ignored `case_sensitive`. Since it defaults to `False`, **case-insensitive matching is now the default** for these sources — e.g. `Settings(TeSt=...)` now populates a `test` field where it previously did not. Nested keys are still matched case-sensitively. - **Fields with unresolved forward references now emit a warning** ([#&#8203;901](https://github.com/pydantic/pydantic-settings/pull/901)). Settings sources can silently fail to resolve such fields; they now raise `IncompleteFieldDefinitionWarning` telling you to call `model_rebuild()`. If you have `filterwarnings = error` configured, this may surface as a new failure. - **Non-JSON env values for strict fields now raise `ValidationError`** ([#&#8203;926](https://github.com/pydantic/pydantic-settings/pull/926)) instead of a less specific error. ##### New features - **Show environment variable names in CLI help** via `cli_show_env_vars=True` ([#&#8203;860](https://github.com/pydantic/pydantic-settings/pull/860)), so generated `--help` output doubles as configuration documentation. - **`PYDANTIC_SETTINGS_DEBUG` for debugging settings resolution** ([#&#8203;906](https://github.com/pydantic/pydantic-settings/pull/906), [#&#8203;913](https://github.com/pydantic/pydantic-settings/pull/913)). Set it to a truthy value with `DEBUG` logging enabled to see each source's contribution in priority order, which source won for each value, and which `env_file`/secret files were probed, loaded, or skipped — the long-standing "why isn't my `.env` being picked up?" question. - **`toml_table_header` for regular TOML files** ([#&#8203;882](https://github.com/pydantic/pydantic-settings/pull/882), [#&#8203;886](https://github.com/pydantic/pydantic-settings/pull/886), [#&#8203;887](https://github.com/pydantic/pydantic-settings/pull/887)), letting you root settings at a nested table in any TOML file, not just `pyproject.toml`. - **`Traversable` support for JSON/TOML/YAML file sources** ([#&#8203;902](https://github.com/pydantic/pydantic-settings/pull/902)), so you can load config packaged inside a distribution — including files inside a zip or wheel — via `importlib.resources.files(...)` without casting to `Path`. - **GCP: `project_id` can come from an earlier settings source** ([#&#8203;878](https://github.com/pydantic/pydantic-settings/pull/878)), rather than only from the constructor or `GOOGLE_CLOUD_PROJECT`. ##### Bug fixes - Fix env vars not loading on Windows with `case_sensitive=True` ([#&#8203;894](https://github.com/pydantic/pydantic-settings/pull/894)). Windows upper-cases `os.environ` keys, so fields raised `Field required` instead of picking up their values. - Read secret files as UTF-8 instead of the platform locale encoding ([#&#8203;917](https://github.com/pydantic/pydantic-settings/pull/917)). On Windows code pages such as cp1252 this silently corrupted non-ASCII secrets. - Fix `AliasPath` on nested model fields not JSON-decoding env values ([#&#8203;898](https://github.com/pydantic/pydantic-settings/pull/898)). - Fix case-insensitive matching for **optional** nested models ([#&#8203;905](https://github.com/pydantic/pydantic-settings/pull/905)). - Fix dotenv extras being wrongly claimed by a complex field sharing a name prefix ([#&#8203;912](https://github.com/pydantic/pydantic-settings/pull/912)) — e.g. `dbx_token` being swallowed by a `db: dict` field. - Fix `nested_model_default_partial_update=True` corrupting discriminated unions ([#&#8203;876](https://github.com/pydantic/pydantic-settings/pull/876)). - Fix `Secret` subclasses crashing when loaded from the environment ([#&#8203;920](https://github.com/pydantic/pydantic-settings/pull/920)). - Fix enum names not parsing through nested annotations such as `Optional[Annotated[MyEnum, ...]]` with `env_parse_enums=True` ([#&#8203;910](https://github.com/pydantic/pydantic-settings/pull/910)). - An empty `yaml_config_section` now falls back to defaults instead of raising `AttributeError: 'NoneType' object has no attribute 'keys'` ([#&#8203;914](https://github.com/pydantic/pydantic-settings/pull/914)). - `NestedSecretsSettingsSource` no longer follows symlinks pointing outside `secrets_dir` ([#&#8203;889](https://github.com/pydantic/pydantic-settings/pull/889)). - GCP: skip the `list_secrets` call when `case_sensitive=True` ([#&#8203;862](https://github.com/pydantic/pydantic-settings/pull/862)), lowering the required IAM permissions to just `roles/secretmanager.secretAccessor`. - AWS: `types-boto3[secretsmanager]` is no longer required at runtime ([#&#8203;880](https://github.com/pydantic/pydantic-settings/pull/880)). ##### Documentation - Document JSON parsing of complex env values, plus a comma-separated-values recipe ([#&#8203;919](https://github.com/pydantic/pydantic-settings/pull/919)). - Recommend an async settings loading pattern ([#&#8203;908](https://github.com/pydantic/pydantic-settings/pull/908)). - Clarify behavior when an unprefixed value is present in a dotenv file ([#&#8203;895](https://github.com/pydantic/pydantic-settings/pull/895)). - Clarify environment variable helper descriptions ([#&#8203;867](https://github.com/pydantic/pydantic-settings/pull/867)) and fix assorted typos ([#&#8203;904](https://github.com/pydantic/pydantic-settings/pull/904)). <details> <summary><b>All changes</b> (including dependency bumps and internal maintenance)</summary> #### What's Changed * Update documentation link for Pydantic settings by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/863 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/865 * docs: clarify environment variable helper descriptions by @&#8203;vip892766gma in https://github.com/pydantic/pydantic-settings/pull/867 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/870 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/875 * Skip list_secrets call when case_sensitive=True by @&#8203;ecerulm in https://github.com/pydantic/pydantic-settings/pull/862 * GoogleSecretManagerSettingsSource: read project_id from previous sources by @&#8203;ecerulm in https://github.com/pydantic/pydantic-settings/pull/878 * Bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/883 * fix: move SecretsManagerClient type import under TYPE_CHECKING by @&#8203;gavin913-lss in https://github.com/pydantic/pydantic-settings/pull/880 * Skip partial update merging for discriminated union fields by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/876 * Support using a table header as root when reading a TOML file by @&#8203;whyscream in https://github.com/pydantic/pydantic-settings/pull/882 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/885 * Don't complain about missing table headers in a TOML file that isn't there by @&#8203;whyscream in https://github.com/pydantic/pydantic-settings/pull/886 * Address issues in toml table header implementation by @&#8203;whyscream in https://github.com/pydantic/pydantic-settings/pull/887 * Bump the python-packages group with 2 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/888 * Prevent NestedSecretsSettingsSource from following symlinks outside secrets_dir by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/889 * Add 'Part of the Pydantic Stack' footer to README by @&#8203;strawgate in https://github.com/pydantic/pydantic-settings/pull/891 * Bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/893 * Add support for showing environment variable names in CLI help text by @&#8203;brad-alexander in https://github.com/pydantic/pydantic-settings/pull/860 * Fix loading env vars on Windows with case_sensitive=True by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/894 * Bump the github-actions group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/896 * Bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/897 * Add explicit callout for the case where the unprefixed value is in dotenv by @&#8203;martinky24 in https://github.com/pydantic/pydantic-settings/pull/895 * Fix AliasPath on nested model fields not decoding env values (#&#8203;670) by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/898 * Support case_sensitive in InitSettingsSource and config file sources by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/900 * Warn when using fields not fully resolved at instantiation by @&#8203;Viicos in https://github.com/pydantic/pydantic-settings/pull/901 * Support Traversable for json/toml/yaml config file sources (#&#8203;299) by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/902 * docs: fix typos in docs and source comments by @&#8203;maxtaran2010 in https://github.com/pydantic/pydantic-settings/pull/904 * Apply case-insensitive field matching to optional nested models (#&#8203;903) by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/905 * Bump boto3 from 1.43.36 to 1.43.40 in the python-packages group by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/907 * Add PYDANTIC_SETTINGS_DEBUG for debugging settings sources (#&#8203;538) by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/906 * docs: recommend async settings loading pattern by @&#8203;w3lld1 in https://github.com/pydantic/pydantic-settings/pull/908 * fix: parse enum names through nested annotations by @&#8203;Sanjays2402 in https://github.com/pydantic/pydantic-settings/pull/910 * Fix dotenv extras being claimed by complex fields sharing a name prefix by @&#8203;ritsth in https://github.com/pydantic/pydantic-settings/pull/912 * Add debug logging for env_file and secret file resolution by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/913 * docs: document JSON parsing of complex env values + comma-separated recipe by @&#8203;hrithvikakb in https://github.com/pydantic/pydantic-settings/pull/919 * fix: coerce empty yaml_config_section to an empty mapping instead of crashing by @&#8203;chuenchen309 in https://github.com/pydantic/pydantic-settings/pull/914 * Bump the python-packages group with 3 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/915 * fix: read secret files as UTF-8 instead of the locale encoding by @&#8203;dchaudhari7177 in https://github.com/pydantic/pydantic-settings/pull/917 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/921 * Bump the github-actions group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/925 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/924 * fix: treat Secret subclasses as non-complex fields (#&#8203;716) by @&#8203;Rony-ZenAlden in https://github.com/pydantic/pydantic-settings/pull/920 * fix: raise ValidationError for non-JSON env values on strict fields by @&#8203;shuvamk in https://github.com/pydantic/pydantic-settings/pull/926 * test: move function-local imports to the top of test modules by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/927 * Bump the python-packages group with 4 updates by @&#8203;dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/929 * Prepare release 2.15.0 by @&#8203;hramezani in https://github.com/pydantic/pydantic-settings/pull/930 #### New Contributors * @&#8203;vip892766gma made their first contribution in https://github.com/pydantic/pydantic-settings/pull/867 * @&#8203;ecerulm made their first contribution in https://github.com/pydantic/pydantic-settings/pull/862 * @&#8203;gavin913-lss made their first contribution in https://github.com/pydantic/pydantic-settings/pull/880 * @&#8203;whyscream made their first contribution in https://github.com/pydantic/pydantic-settings/pull/882 * @&#8203;strawgate made their first contribution in https://github.com/pydantic/pydantic-settings/pull/891 * @&#8203;brad-alexander made their first contribution in https://github.com/pydantic/pydantic-settings/pull/860 * @&#8203;martinky24 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/895 * @&#8203;maxtaran2010 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/904 * @&#8203;w3lld1 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/908 * @&#8203;Sanjays2402 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/910 * @&#8203;ritsth made their first contribution in https://github.com/pydantic/pydantic-settings/pull/912 * @&#8203;hrithvikakb made their first contribution in https://github.com/pydantic/pydantic-settings/pull/919 * @&#8203;chuenchen309 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/914 * @&#8203;dchaudhari7177 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/917 * @&#8203;Rony-ZenAlden made their first contribution in https://github.com/pydantic/pydantic-settings/pull/920 * @&#8203;shuvamk made their first contribution in https://github.com/pydantic/pydantic-settings/pull/926 **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.15.0> </details> ### [`v2.14.2`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.14.2) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2) #### What's Changed This is a security patch release. - Prevent `NestedSecretsSettingsSource` from following symlinks outside `secrets_dir` by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;889](https://github.com/pydantic/pydantic-settings/pull/889) - Prepare release 2.14.2 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;890](https://github.com/pydantic/pydantic-settings/pull/890) ##### Security Fixes [GHSA-4xgf-cpjx-pc3j](https://github.com/pydantic/pydantic-settings/security/advisories/GHSA-4xgf-cpjx-pc3j): `NestedSecretsSettingsSource` with `secrets_nested_subdir=True` could follow a symbolic link inside `secrets_dir` pointing outside it, reading out-of-tree files into settings values and bypassing the `secrets_dir_max_size` cap. 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.1`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.14.1) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1) #### What's Changed - Bump the python-packages group with 4 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;850](https://github.com/pydantic/pydantic-settings/pull/850) - Bump the python-packages group with 5 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;854](https://github.com/pydantic/pydantic-settings/pull/854) - Bump the github-actions group with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;853](https://github.com/pydantic/pydantic-settings/pull/853) - Bump the python-packages group with 2 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;856](https://github.com/pydantic/pydantic-settings/pull/856) - Fix field named `cls` conflicting with classmethod parameter by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;858](https://github.com/pydantic/pydantic-settings/pull/858) - Prepare release 2.14.1 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;859](https://github.com/pydantic/pydantic-settings/pull/859) **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1> ### [`v2.14.0`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.14.0) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0) #### What's Changed - Fix parsing env vars into Optional Strict types by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;792](https://github.com/pydantic/pydantic-settings/pull/792) - Fix RecursionError with mutually recursive models in CLI by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;794](https://github.com/pydantic/pydantic-settings/pull/794) - Fix env_file from model_config ignored in CliApp.run() ([#&#8203;795](https://github.com/pydantic/pydantic-settings/issues/795)) by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;796](https://github.com/pydantic/pydantic-settings/pull/796) - Update dependencies by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;798](https://github.com/pydantic/pydantic-settings/pull/798) - Add Dependabot configuration by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;801](https://github.com/pydantic/pydantic-settings/pull/801) - Bump samuelcolvin/check-python-version from 4.1 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;802](https://github.com/pydantic/pydantic-settings/pull/802) - Bump actions/upload-artifact from 4 to 7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;803](https://github.com/pydantic/pydantic-settings/pull/803) - Bump actions/checkout from 4 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;804](https://github.com/pydantic/pydantic-settings/pull/804) - Bump astral-sh/setup-uv from 5 to 7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;805](https://github.com/pydantic/pydantic-settings/pull/805) - Bump actions/setup-python from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;806](https://github.com/pydantic/pydantic-settings/pull/806) - Ignore chardet and group GitHub Actions in Dependabot by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;808](https://github.com/pydantic/pydantic-settings/pull/808) - Bump actions/download-artifact from 4 to 8 in the github-actions group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;809](https://github.com/pydantic/pydantic-settings/pull/809) - Bump the python-packages group with 2 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;810](https://github.com/pydantic/pydantic-settings/pull/810) - Support reading .env files from FIFOs (e.g. 1Password Environments) by [@&#8203;JacobHayes](https://github.com/JacobHayes) in [#&#8203;776](https://github.com/pydantic/pydantic-settings/pull/776) - Fix AliasChoices ignored when changing provider priority by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;813](https://github.com/pydantic/pydantic-settings/pull/813) - fix: resolve KeyError in run_subcommand for underscore field names by [@&#8203;bradykieffer](https://github.com/bradykieffer) in [#&#8203;799](https://github.com/pydantic/pydantic-settings/pull/799) - Bump the python-packages group with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;814](https://github.com/pydantic/pydantic-settings/pull/814) - Fix `Literal[numeric Enum]` coercion for CLI and env vars by [@&#8203;m9810223](https://github.com/m9810223) in [#&#8203;811](https://github.com/pydantic/pydantic-settings/pull/811) - Fix nested discriminated unions not discovered by env/CLI providers by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;816](https://github.com/pydantic/pydantic-settings/pull/816) - Bump the python-packages group with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;820](https://github.com/pydantic/pydantic-settings/pull/820) - CLI ensure env nested max split internally. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;821](https://github.com/pydantic/pydantic-settings/pull/821) - Bump the python-packages group with 4 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;824](https://github.com/pydantic/pydantic-settings/pull/824) - Migrate `boto3-stubs` to `types-boto3` by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;831](https://github.com/pydantic/pydantic-settings/pull/831) - Fix CLI not recognizing field name with validate_by_name and AliasChoices by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;826](https://github.com/pydantic/pydantic-settings/pull/826) - Allow customisation of the dotevn setting source to filter variables by [@&#8203;CaselIT](https://github.com/CaselIT) in [#&#8203;832](https://github.com/pydantic/pydantic-settings/pull/832) - Bump the python-packages group with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;833](https://github.com/pydantic/pydantic-settings/pull/833) - Introduce yamlfmt by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;836](https://github.com/pydantic/pydantic-settings/pull/836) - Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;837](https://github.com/pydantic/pydantic-settings/pull/837) - Introduce zizmor by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;838](https://github.com/pydantic/pydantic-settings/pull/838) - Fix CliPositionalArg\[list\[CustomType]] crash for custom types by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;839](https://github.com/pydantic/pydantic-settings/pull/839) - Add note about Mypy plugin for `BaseSettings.__init__()` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;842](https://github.com/pydantic/pydantic-settings/pull/842) - Fix `cli_ignore_unknown_args=True` not working on subcommands by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;844](https://github.com/pydantic/pydantic-settings/pull/844) - Bump the python-packages group with 4 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;847](https://github.com/pydantic/pydantic-settings/pull/847) - Fix CLI descriptions lost under `python -OO` by falling back to `json_schema_extra` by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;843](https://github.com/pydantic/pydantic-settings/pull/843) - Prepare release 2.14.0 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;848](https://github.com/pydantic/pydantic-settings/pull/848) #### New Contributors - [@&#8203;dependabot](https://github.com/dependabot)\[bot] made their first contribution in [#&#8203;802](https://github.com/pydantic/pydantic-settings/pull/802) - [@&#8203;JacobHayes](https://github.com/JacobHayes) made their first contribution in [#&#8203;776](https://github.com/pydantic/pydantic-settings/pull/776) - [@&#8203;bradykieffer](https://github.com/bradykieffer) made their first contribution in [#&#8203;799](https://github.com/pydantic/pydantic-settings/pull/799) - [@&#8203;CaselIT](https://github.com/CaselIT) made their first contribution in [#&#8203;832](https://github.com/pydantic/pydantic-settings/pull/832) **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0> ### [`v2.13.1`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.13.1) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.13.0...v2.13.1) #### What's Changed - Fix regression for bool fields since 2.13.0 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;784](https://github.com/pydantic/pydantic-settings/pull/784) - Fix RecursionError with self-referential models in CliApp by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;783](https://github.com/pydantic/pydantic-settings/pull/783) - Fix CLI parsing error for set field types since 2.13.0 ([#&#8203;787](https://github.com/pydantic/pydantic-settings/issues/787)) by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;788](https://github.com/pydantic/pydantic-settings/pull/788) - Fix AttributeError with nested env vars for dict fields ([#&#8203;785](https://github.com/pydantic/pydantic-settings/issues/785)) by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;786](https://github.com/pydantic/pydantic-settings/pull/786) - Fix JSON decoding for parameterized PEP 695 type aliases by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;780](https://github.com/pydantic/pydantic-settings/pull/780) - v2.13.1 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;790](https://github.com/pydantic/pydantic-settings/pull/790) **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.13.0...v2.13.1> ### [`v2.13.0`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.13.0) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.12.0...v2.13.0) #### What's Changed - fix: Deterministic alias selection when using validate_by_name by [@&#8203;chbndrhnns](https://github.com/chbndrhnns) in [#&#8203;707](https://github.com/pydantic/pydantic-settings/pull/707) - add deep merge functionality to config file sources by [@&#8203;pmeier](https://github.com/pmeier) in [#&#8203;698](https://github.com/pydantic/pydantic-settings/pull/698) - Add support for AWS Secrets Manager VersionId parameter by [@&#8203;jcyamacho](https://github.com/jcyamacho) in [#&#8203;708](https://github.com/pydantic/pydantic-settings/pull/708) - bugfix: Return `None` for inaccessible GCP Secret Manager secrets by [@&#8203;zaphod72](https://github.com/zaphod72) in [#&#8203;712](https://github.com/pydantic/pydantic-settings/pull/712) - Bugfix for cli_kebab_case="all" and CliImplicitFlag\[bool] by [@&#8203;Digity101](https://github.com/Digity101) in [#&#8203;702](https://github.com/pydantic/pydantic-settings/pull/702) - Unpack type alisases when looking for `NoDecode` by [@&#8203;tselepakis](https://github.com/tselepakis) in [#&#8203;695](https://github.com/pydantic/pydantic-settings/pull/695) - CliToggleFlag and CliDualFlag by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;717](https://github.com/pydantic/pydantic-settings/pull/717) - Fix for CLI duplicate enum field values. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;722](https://github.com/pydantic/pydantic-settings/pull/722) - fixed load nested config from env by [@&#8203;Sube-py](https://github.com/Sube-py) in [#&#8203;723](https://github.com/pydantic/pydantic-settings/pull/723) - Add non-Path files support (for example Traversable) and open files using Path.open method by [@&#8203;mahenzon](https://github.com/mahenzon) in [#&#8203;724](https://github.com/pydantic/pydantic-settings/pull/724) - add one more traversable test by [@&#8203;mahenzon](https://github.com/mahenzon) in [#&#8203;725](https://github.com/pydantic/pydantic-settings/pull/725) - CLI fix fox external list args. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;727](https://github.com/pydantic/pydantic-settings/pull/727) - fix: handle case-insensitive retrieval in GoogleSecretManagerSettingsSource by [@&#8203;ezwiefel](https://github.com/ezwiefel) in [#&#8203;730](https://github.com/pydantic/pydantic-settings/pull/730) - CLI test fixes for help text formatting. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;735](https://github.com/pydantic/pydantic-settings/pull/735) - Avoid conflicts with the `NAME` environment variable in WSL by [@&#8203;kzrnm](https://github.com/kzrnm) in [#&#8203;747](https://github.com/pydantic/pydantic-settings/pull/747) - fix: When restoring init kwargs, use deterministic order by [@&#8203;chbndrhnns](https://github.com/chbndrhnns) in [#&#8203;746](https://github.com/pydantic/pydantic-settings/pull/746) - Add env_prefix_target by [@&#8203;kzrnm](https://github.com/kzrnm) in [#&#8203;749](https://github.com/pydantic/pydantic-settings/pull/749) - Remove `(default: …)` in the help message for `CliToggleFlag` by [@&#8203;kzrnm](https://github.com/kzrnm) in [#&#8203;740](https://github.com/pydantic/pydantic-settings/pull/740) - Add support for CLI serialize styles. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;755](https://github.com/pydantic/pydantic-settings/pull/755) - Add support for overriding default help on CLI internal parser. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;758](https://github.com/pydantic/pydantic-settings/pull/758) - CLI format_help method support by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;759](https://github.com/pydantic/pydantic-settings/pull/759) - feat(gcp): support SecretVersion annotation for per-field secret versioning by [@&#8203;ezwiefel](https://github.com/ezwiefel) in [#&#8203;763](https://github.com/pydantic/pydantic-settings/pull/763) - Allow `snake_case_conversion` with `env_prefix` for Azure Key Vault source by [@&#8203;cstarkers](https://github.com/cstarkers) in [#&#8203;762](https://github.com/pydantic/pydantic-settings/pull/762) - fix: Only override preferred_key when no value was found by [@&#8203;chbndrhnns](https://github.com/chbndrhnns) in [#&#8203;767](https://github.com/pydantic/pydantic-settings/pull/767) - Update deps by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;768](https://github.com/pydantic/pydantic-settings/pull/768) - CLI coerce numeric types. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;769](https://github.com/pydantic/pydantic-settings/pull/769) - CLI Union Discriminator Choices in Help by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;764](https://github.com/pydantic/pydantic-settings/pull/764) - Add nested path support for yaml_config_section (fixes [#&#8203;772](https://github.com/pydantic/pydantic-settings/issues/772)) by [@&#8203;hugo-romero-mm](https://github.com/hugo-romero-mm) in [#&#8203;773](https://github.com/pydantic/pydantic-settings/pull/773) - Prepare release 2.13.0 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;777](https://github.com/pydantic/pydantic-settings/pull/777) #### New Contributors - [@&#8203;pmeier](https://github.com/pmeier) made their first contribution in [#&#8203;698](https://github.com/pydantic/pydantic-settings/pull/698) - [@&#8203;jcyamacho](https://github.com/jcyamacho) made their first contribution in [#&#8203;708](https://github.com/pydantic/pydantic-settings/pull/708) - [@&#8203;zaphod72](https://github.com/zaphod72) made their first contribution in [#&#8203;712](https://github.com/pydantic/pydantic-settings/pull/712) - [@&#8203;Digity101](https://github.com/Digity101) made their first contribution in [#&#8203;702](https://github.com/pydantic/pydantic-settings/pull/702) - [@&#8203;Sube-py](https://github.com/Sube-py) made their first contribution in [#&#8203;723](https://github.com/pydantic/pydantic-settings/pull/723) - [@&#8203;mahenzon](https://github.com/mahenzon) made their first contribution in [#&#8203;724](https://github.com/pydantic/pydantic-settings/pull/724) - [@&#8203;kzrnm](https://github.com/kzrnm) made their first contribution in [#&#8203;747](https://github.com/pydantic/pydantic-settings/pull/747) - [@&#8203;cstarkers](https://github.com/cstarkers) made their first contribution in [#&#8203;762](https://github.com/pydantic/pydantic-settings/pull/762) - [@&#8203;hugo-romero-mm](https://github.com/hugo-romero-mm) made their first contribution in [#&#8203;773](https://github.com/pydantic/pydantic-settings/pull/773) **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.12.0...v2.13.0> ### [`v2.12.0`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.12.0) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.11.0...v2.12.0) #### What's Changed - Support for enum kebab case. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;686](https://github.com/pydantic/pydantic-settings/pull/686) - Apply source order: init > env > dotenv > secrets > defaults and pres… by [@&#8203;chbndrhnns](https://github.com/chbndrhnns) in [#&#8203;688](https://github.com/pydantic/pydantic-settings/pull/688) - Add NestedSecretsSettings source by [@&#8203;makukha](https://github.com/makukha) in [#&#8203;690](https://github.com/pydantic/pydantic-settings/pull/690) - Strip non-explicit default values. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;692](https://github.com/pydantic/pydantic-settings/pull/692) - Coerce env vars if strict is True. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;693](https://github.com/pydantic/pydantic-settings/pull/693) - Restore init kwarg names before returning final state dictionary. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;700](https://github.com/pydantic/pydantic-settings/pull/700) - Drop Python3.9 support by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;699](https://github.com/pydantic/pydantic-settings/pull/699) - Adapt test_protected_namespace_defaults for dev. Pydantic by [@&#8203;musicinmybrain](https://github.com/musicinmybrain) in [#&#8203;637](https://github.com/pydantic/pydantic-settings/pull/637) - Add Python 3.14 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;704](https://github.com/pydantic/pydantic-settings/pull/704) - Prepare release 2.12 by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;705](https://github.com/pydantic/pydantic-settings/pull/705) #### New Contributors - [@&#8203;chbndrhnns](https://github.com/chbndrhnns) made their first contribution in [#&#8203;688](https://github.com/pydantic/pydantic-settings/pull/688) **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.11.0...v2.12.0> ### [`v2.11.0`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.11.0) [Compare Source](https://github.com/pydantic/pydantic-settings/compare/2.10.1...v2.11.0) #### What's Changed - CLI Serialize Support by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;643](https://github.com/pydantic/pydantic-settings/pull/643) - Inspect type aliases to determine if an annotation is complex by [@&#8203;tselepakis](https://github.com/tselepakis) in [#&#8203;644](https://github.com/pydantic/pydantic-settings/pull/644) - Revert "fix: Respect 'cli_parse_args' from model_config with settings_customise_sources ([#&#8203;611](https://github.com/pydantic/pydantic-settings/issues/611))" by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;655](https://github.com/pydantic/pydantic-settings/pull/655) - Remove parsing of command line arguments from `CliSettingsSource.__init__`. by [@&#8203;trygve-baerland](https://github.com/trygve-baerland) in [#&#8203;656](https://github.com/pydantic/pydantic-settings/pull/656) - turn off allow_abbrev on subparsers by [@&#8203;mroch](https://github.com/mroch) in [#&#8203;658](https://github.com/pydantic/pydantic-settings/pull/658) - CLI Serialization Fixes by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;649](https://github.com/pydantic/pydantic-settings/pull/649) - Fix PydanticModel type checking. by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;659](https://github.com/pydantic/pydantic-settings/pull/659) - Avoid env_prefix falling back to env vars without prefix by [@&#8203;tselepakis](https://github.com/tselepakis) in [#&#8203;648](https://github.com/pydantic/pydantic-settings/pull/648) - Warn if model_config sets unused keys for missing settings sources by [@&#8203;HomerusJa](https://github.com/HomerusJa) in [#&#8203;663](https://github.com/pydantic/pydantic-settings/pull/663) - Included endpoint_url kwarg in AWSSecretsManagerSettingsSource class by [@&#8203;adrianohrl](https://github.com/adrianohrl) in [#&#8203;664](https://github.com/pydantic/pydantic-settings/pull/664) - Fix typo ("Accesing") in the "Adding sources" docs by [@&#8203;deepyaman](https://github.com/deepyaman) in [#&#8203;668](https://github.com/pydantic/pydantic-settings/pull/668) - CLI Windows Path Fix by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;669](https://github.com/pydantic/pydantic-settings/pull/669) - Cli root model support by [@&#8203;kschwab](https://github.com/kschwab) in [#&#8203;677](https://github.com/pydantic/pydantic-settings/pull/677) - Snake case conversion in Azure Key Vault by [@&#8203;AndreuCodina](https://github.com/AndreuCodina) in [#&#8203;680](https://github.com/pydantic/pydantic-settings/pull/680) - Make `InitSettingsSource` resolution deterministic by [@&#8203;enrico-stauss](https://github.com/enrico-stauss) in [#&#8203;681](https://github.com/pydantic/pydantic-settings/pull/681) - Update deps by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;683](https://github.com/pydantic/pydantic-settings/pull/683) #### New Contributors - [@&#8203;tselepakis](https://github.com/tselepakis) made their first contribution in [#&#8203;644](https://github.com/pydantic/pydantic-settings/pull/644) - [@&#8203;trygve-baerland](https://github.com/trygve-baerland) made their first contribution in [#&#8203;656](https://github.com/pydantic/pydantic-settings/pull/656) - [@&#8203;mroch](https://github.com/mroch) made their first contribution in [#&#8203;658](https://github.com/pydantic/pydantic-settings/pull/658) - [@&#8203;HomerusJa](https://github.com/HomerusJa) made their first contribution in [#&#8203;663](https://github.com/pydantic/pydantic-settings/pull/663) - [@&#8203;adrianohrl](https://github.com/adrianohrl) made their first contribution in [#&#8203;664](https://github.com/pydantic/pydantic-settings/pull/664) - [@&#8203;deepyaman](https://github.com/deepyaman) made their first contribution in [#&#8203;668](https://github.com/pydantic/pydantic-settings/pull/668) - [@&#8203;enrico-stauss](https://github.com/enrico-stauss) made their first contribution in [#&#8203;681](https://github.com/pydantic/pydantic-settings/pull/681) **Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/2.10.1...v2.11.0> </details> <details> <summary>Kludex/python-multipart (python-multipart)</summary> ### [`v0.0.32`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0032-2026-06-04) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32) - Speed up partial-boundary scanning for CR/LF-dense part data [#&#8203;300](https://github.com/Kludex/python-multipart/pull/300). ### [`v0.0.31`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0031-2026-06-04) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31) - Speed up multipart header parsing and callback dispatch [#&#8203;295](https://github.com/Kludex/python-multipart/pull/295). - Bound header field name size before validating [#&#8203;296](https://github.com/Kludex/python-multipart/pull/296). - Validate `Content-Length` is non-negative in `parse_form` [#&#8203;297](https://github.com/Kludex/python-multipart/pull/297). ### [`v0.0.30`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0030-2026-05-31) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30) - Parse `application/x-www-form-urlencoded` bodies per the WHATWG URL standard, treating only `&` as a field separator [#&#8203;290](https://github.com/Kludex/python-multipart/pull/290). - Ignore RFC 2231/5987 extended parameters (`name*`, `filename*`) in `parse_options_header`, keeping the plain parameter authoritative per [RFC 7578 §4.2](https://datatracker.ietf.org/doc/html/rfc7578#section-4.2) [#&#8203;291](https://github.com/Kludex/python-multipart/pull/291). ### [`v0.0.29`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0029-2026-05-17) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.28...0.0.29) - Handle malformed RFC 2231 continuations in `parse_options_header` [#&#8203;270](https://github.com/Kludex/python-multipart/pull/270). ### [`v0.0.28`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0028-2026-05-10) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28) - Speed up partial-boundary tail scan via `bytes.find` [#&#8203;281](https://github.com/Kludex/python-multipart/pull/281). - Cap multipart boundary length at 256 bytes [#&#8203;282](https://github.com/Kludex/python-multipart/pull/282). ### [`v0.0.27`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0027-2026-04-27) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27) - Add multipart header limits [#&#8203;267](https://github.com/Kludex/python-multipart/pull/267). - Pass parse offsets via constructors [#&#8203;268](https://github.com/Kludex/python-multipart/pull/268). ### [`v0.0.26`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0026-2026-04-10) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.25...0.0.26) - Skip preamble before the first multipart boundary more efficiently [#&#8203;262](https://github.com/Kludex/python-multipart/pull/262). - Silently discard epilogue data after the closing multipart boundary [#&#8203;259](https://github.com/Kludex/python-multipart/pull/259). ### [`v0.0.25`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0025-2026-04-10) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.24...0.0.25) - Add MIME content type info to `File` [#&#8203;143](https://github.com/Kludex/python-multipart/pull/143). - Handle CTE values case-insensitively [#&#8203;258](https://github.com/Kludex/python-multipart/pull/258). - Remove custom `FormParser` classes [#&#8203;257](https://github.com/Kludex/python-multipart/pull/257). - Add `UPLOAD_DELETE_TMP` to `FormParser` config [#&#8203;254](https://github.com/Kludex/python-multipart/pull/254). - Emit `field_end` for trailing bare field names on finalize [#&#8203;230](https://github.com/Kludex/python-multipart/pull/230). - Handle multipart headers case-insensitively [#&#8203;252](https://github.com/Kludex/python-multipart/pull/252). - Apply Apache-2.0 properly [#&#8203;247](https://github.com/Kludex/python-multipart/pull/247). ### [`v0.0.24`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0024-2026-04-05) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.23...0.0.24) - Validate `chunk_size` in `parse_form()` [#&#8203;244](https://github.com/Kludex/python-multipart/pull/244). ### [`v0.0.23`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0023-2026-04-05) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.22...0.0.23) - Remove unused `trust_x_headers` parameter and `X-File-Name` fallback [#&#8203;196](https://github.com/Kludex/python-multipart/pull/196). - Return processed length from `QuerystringParser._internal_write` [#&#8203;229](https://github.com/Kludex/python-multipart/pull/229). - Cleanup metadata dunders from `__init__.py` [#&#8203;227](https://github.com/Kludex/python-multipart/pull/227). ### [`v0.0.22`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0022-2026-01-25) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.21...0.0.22) - Drop directory path from filename in `File` [9433f4b](https://github.com/Kludex/python-multipart/commit/9433f4bbc9652bdde82bbe380984e32f8cfc89c4). ### [`v0.0.21`](https://github.com/Kludex/python-multipart/blob/HEAD/CHANGELOG.md#0021-2025-12-17) [Compare Source](https://github.com/Kludex/python-multipart/compare/0.0.20...0.0.21) - Add support for Python 3.14 and drop EOL 3.8 and 3.9 [#&#8203;216](https://github.com/Kludex/python-multipart/pull/216). </details> <details> <summary>Kludex/uvicorn (uvicorn)</summary> ### [`v0.54.0`](https://github.com/Kludex/uvicorn/releases/tag/0.54.0): Version 0.54.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.53.0...0.54.0) #### 📨 Send metadata after the response body `uvicorn` 0.54.0 adds response trailers and `103 Early Hints` to its experimental HTTP/2 implementation through `zttp`. ```console uv add uvicorn==0.54.0 "zttp>=0.0.34" ``` - **Send HTTP/2 response trailers** ([#&#8203;3146](https://github.com/Kludex/uvicorn/pull/3146)). The ASGI `http.response.trailers` extension lets applications send metadata, such as checksums, after the response body. Clients must send `TE: trailers` to receive them. Multiple trailer messages are combined before completing the response. - **HTTP/2 remains experimental and opt-in.** Enable it with `--http zttp --http2`. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported. #### 💡 Hint at resources before the final response - **Send `103 Early Hints` over HTTP/2** ([#&#8203;3137](https://github.com/Kludex/uvicorn/pull/3137)). Applications can use the ASGI `http.response.early_hint` extension to send resource hints before the final response. Each supplied link becomes a separate `Link` header. **Full changelog:** [0.53.0...0.54.0](https://github.com/Kludex/uvicorn/compare/0.53.0...0.54.0) ### [`v0.53.0`](https://github.com/Kludex/uvicorn/releases/tag/0.53.0): Version 0.53.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.52.4...0.53.0) #### 🌐 Opt-in HTTP/2 support `uvicorn` 0.53.0 adds experimental HTTP/2 through `zttp`, alongside a new `zuvloop` integration and connection-handling improvements. ```console uv add uvicorn==0.53.0 ``` - **Serve HTTP/1.1 and HTTP/2 with `zttp`** ([#&#8203;2982](https://github.com/Kludex/uvicorn/pull/2982), [#&#8203;3101](https://github.com/Kludex/uvicorn/pull/3101)). Install `zttp`, then enable HTTP/2 with `--http zttp --http2`. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge. - **HTTP/2 remains experimental.** Upgrade-based h2c and WebSockets over HTTP/2 are not supported. #### ⚙️ More event loop choice - **Run Uvicorn with `zuvloop`** ([#&#8203;3104](https://github.com/Kludex/uvicorn/pull/3104)). Install `zuvloop` separately and select it explicitly with `--loop zuvloop` on CPython 3.14 or newer. #### 🛡️ More reliable connections and proxies - **Honor `Connection: close` token lists** ([#&#8203;3103](https://github.com/Kludex/uvicorn/pull/3103)). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations. - **Trust IPv6 loopback proxies by default** ([#&#8203;3119](https://github.com/Kludex/uvicorn/pull/3119)). The default `FORWARDED_ALLOW_IPS` value now includes `::1`. - **Keep upgraded WebSockets alive** ([#&#8203;3107](https://github.com/Kludex/uvicorn/pull/3107)). Uvicorn cancels the HTTP keep-alive timer when the connection becomes a WebSocket. **Full changelog:** [0.52.4...0.53.0](https://github.com/Kludex/uvicorn/compare/0.52.4...0.53.0) ### [`v0.52.4`](https://github.com/Kludex/uvicorn/releases/tag/0.52.4): Version 0.52.4 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4) ##### Fixed - Remove duplicate `Date` headers from accepted WebSocket handshakes with `websockets-sansio` ([#&#8203;3078](https://github.com/Kludex/uvicorn/pull/3078)) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4> ### [`v0.52.3`](https://github.com/Kludex/uvicorn/releases/tag/0.52.3): Version 0.52.3 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3) ##### Changed - Update `zttp` to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance ([#&#8203;3067](https://github.com/Kludex/uvicorn/issues/3067)) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3> ### [`v0.52.2`](https://github.com/Kludex/uvicorn/releases/tag/0.52.2): Version 0.52.2 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2) ##### Fixed - Update `zttp` to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance ([#&#8203;3063](https://github.com/Kludex/uvicorn/issues/3063)) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2> ### [`v0.52.1`](https://github.com/Kludex/uvicorn/releases/tag/0.52.1): Version 0.52.1 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1) ##### Fixed - Complete the closing handshake on server-initiated WebSocket closes in the `websockets-sansio` and `wsproto` implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection ([#&#8203;3053](https://github.com/Kludex/uvicorn/issues/3053)) - Add missing write flow control to the `websockets-sansio` implementation, preventing data truncation on server-initiated closes with large in-flight payloads ([#&#8203;3048](https://github.com/Kludex/uvicorn/issues/3048)) - Handle connection loss while a WebSocket write is waiting on backpressure ([#&#8203;3050](https://github.com/Kludex/uvicorn/issues/3050)) - Remove duplicate `Content-Type` and `Content-Length` headers from WebSocket denial responses on the `websockets-sansio` implementation, and deliver non-UTF-8 denial bodies intact ([#&#8203;3041](https://github.com/Kludex/uvicorn/issues/3041)) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1> ### [`v0.52.0`](https://github.com/Kludex/uvicorn/releases/tag/0.52.0): Version 0.52.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0) This release adds an experimental HTTP/1.1 implementation backed by [zttp](https://zttp.marcelotryle.com/), 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](https://github.com/Kludex/uvicorn/issues). ##### Added - Add an experimental `zttp` HTTP/1.1 implementation, selectable with `--http zttp` ([#&#8203;2979](https://github.com/Kludex/uvicorn/issues/2979)) ##### Fixed - Keep non-ASCII WebSocket request headers intact with websockets 17.0, which encodes them with ISO-8859-1 ([#&#8203;3036](https://github.com/Kludex/uvicorn/issues/3036)) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0> ### [`v0.51.0`](https://github.com/Kludex/uvicorn/releases/tag/0.51.0): Version 0.51.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0) #### What's Changed - Restart workers with overlap on SIGHUP for near-zero-downtime reloads by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;3025](https://github.com/Kludex/uvicorn/pull/3025) - Remove colorama from the standard extra by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;3027](https://github.com/Kludex/uvicorn/pull/3027) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0> ### [`v0.50.2`](https://github.com/Kludex/uvicorn/releases/tag/0.50.2): Version 0.50.2 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.50.1...0.50.2) #### What's Changed - Require websockets>=13.0 for the default sansio implementation by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;3021](https://github.com/Kludex/uvicorn/pull/3021) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.50.1...0.50.2> ### [`v0.50.1`](https://github.com/Kludex/uvicorn/releases/tag/0.50.1): Version 0.50.1 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1) #### What's Changed - Split comma-separated `Sec-WebSocket-Protocol` values in the websockets-sansio implementation by [@&#8203;Aayush7352](https://github.com/Aayush7352) in [#&#8203;3019](https://github.com/Kludex/uvicorn/pull/3019) #### New Contributors - [@&#8203;Aayush7352](https://github.com/Aayush7352) made their first contribution in [#&#8203;3019](https://github.com/Kludex/uvicorn/pull/3019) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1> ### [`v0.50.0`](https://github.com/Kludex/uvicorn/releases/tag/0.50.0): Version 0.50.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0) #### What's Changed - Memoize trusted host checks to avoid re-parsing the client IP per request by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2970](https://github.com/Kludex/uvicorn/pull/2970) - Cache the `asgi` scope sub-dict per connection by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2976](https://github.com/Kludex/uvicorn/pull/2976) - Build a fresh `asgi` scope dict per request by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2977](https://github.com/Kludex/uvicorn/pull/2977) - Replace click.style with an internal ANSI style helper by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2981](https://github.com/Kludex/uvicorn/pull/2981) - Avoid copying single-frame WebSocket payloads in websockets-sansio by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2983](https://github.com/Kludex/uvicorn/pull/2983) - Deprecate the legacy websockets implementation and default `auto` to websockets-sansio by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2985](https://github.com/Kludex/uvicorn/pull/2985) - Exit with a dedicated code on startup failure and stop the supervisor when a worker can't boot by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;3001](https://github.com/Kludex/uvicorn/pull/3001) - Skip the eager app import in the parent when spawning workers by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;3012](https://github.com/Kludex/uvicorn/pull/3012) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0> ### [`v0.49.0`](https://github.com/Kludex/uvicorn/releases/tag/0.49.0): Version 0.49.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0) #### What's Changed - Bump httptools minimum version to 0.8.0 by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2962](https://github.com/Kludex/uvicorn/pull/2962) - Consume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2971](https://github.com/Kludex/uvicorn/pull/2971) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0> ### [`v0.48.0`](https://github.com/Kludex/uvicorn/releases/tag/0.48.0): Version 0.48.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0) #### What's Changed - Default `ssl_ciphers` to `None` and use OpenSSL defaults by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2940](https://github.com/Kludex/uvicorn/pull/2940) - Ignore duplicate forwarding headers in `ProxyHeadersMiddleware` by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2944](https://github.com/Kludex/uvicorn/pull/2944) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0> ### [`v0.47.0`](https://github.com/Kludex/uvicorn/releases/tag/0.47.0): Version 0.47.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0) #### What's Changed - Eagerly import the ASGI app in the parent process by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2919](https://github.com/Kludex/uvicorn/pull/2919) - Add `ssl_context_factory` for custom `SSLContext` configuration by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2920](https://github.com/Kludex/uvicorn/pull/2920) - Treat `fd=0` as a valid file descriptor with reload/workers by [@&#8203;eltoder](https://github.com/eltoder) in [#&#8203;2927](https://github.com/Kludex/uvicorn/pull/2927) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0> ### [`v0.46.0`](https://github.com/Kludex/uvicorn/releases/tag/0.46.0): Version 0.46.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0) #### What's Changed - Support `ws_max_size` in `wsproto` implementation by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2915](https://github.com/Kludex/uvicorn/pull/2915) - Support `ws_ping_interval` and `ws_ping_timeout` in `wsproto` implementation by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2916](https://github.com/Kludex/uvicorn/pull/2916) - Use `bytearray` for incoming WebSocket message buffer in websockets-sansio by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2917](https://github.com/Kludex/uvicorn/pull/2917) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0> ### [`v0.45.0`](https://github.com/Kludex/uvicorn/releases/tag/0.45.0): Version 0.45.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0) #### What's Changed - Preserve forwarded client ports in proxy headers middleware by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2903](https://github.com/Kludex/uvicorn/pull/2903) - Accept `os.PathLike` for `log_config` by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2905](https://github.com/Kludex/uvicorn/pull/2905) - Accept `log_level` strings case-insensitively by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2907](https://github.com/Kludex/uvicorn/pull/2907) - Raise helpful `ImportError` when PyYAML is missing for YAML log config by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2906](https://github.com/Kludex/uvicorn/pull/2906) - Revert empty context for ASGI runs by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2911](https://github.com/Kludex/uvicorn/pull/2911) - Add `--reset-contextvars` flag to isolate ASGI request context by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2912](https://github.com/Kludex/uvicorn/pull/2912) - Revert "Emit `http.disconnect` on server shutdown for streaming responses" ([#&#8203;2829](https://github.com/Kludex/uvicorn/issues/2829)) by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2913](https://github.com/Kludex/uvicorn/pull/2913) #### New Contributors - [@&#8203;Krishnachaitanyakc](https://github.com/Krishnachaitanyakc) made their first contribution in [#&#8203;2870](https://github.com/Kludex/uvicorn/pull/2870) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0> ### [`v0.44.0`](https://github.com/Kludex/uvicorn/releases/tag/0.44.0): Version 0.44.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0) #### What's Changed - Implement websocket keepalive pings for websockets-sansio by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2888](https://github.com/Kludex/uvicorn/pull/2888) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0> ### [`v0.43.0`](https://github.com/Kludex/uvicorn/releases/tag/0.43.0): Version 0.43.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0) #### Changed - Emit `http.disconnect` ASGI `receive()` event on server shutting down for streaming responses ([#&#8203;2829](https://github.com/Kludex/uvicorn/issues/2829)) - Use native `context` parameter for `create_task` on Python 3.11+ ([#&#8203;2859](https://github.com/Kludex/uvicorn/issues/2859)) - Drop cast in ASGI types ([#&#8203;2875](https://github.com/Kludex/uvicorn/issues/2875)) *** **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0> ### [`v0.42.0`](https://github.com/Kludex/uvicorn/releases/tag/0.42.0): Version 0.42.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0) #### Changed - Use `bytearray` for request body accumulation to avoid O(n^2) allocation on fragmented bodies ([#&#8203;2845](https://github.com/Kludex/uvicorn/issues/2845)) #### Fixed - Escape brackets and backslash in httptools `HEADER_RE` regex ([#&#8203;2824](https://github.com/Kludex/uvicorn/issues/2824)) - Fix multiple issues in websockets sans-io implementation ([#&#8203;2825](https://github.com/Kludex/uvicorn/issues/2825)) *** #### New Contributors - [@&#8203;bysiber](https://github.com/bysiber) made their first contribution in [#&#8203;2825](https://github.com/Kludex/uvicorn/pull/2825) *** **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0> ### [`v0.41.0`](https://github.com/Kludex/uvicorn/releases/tag/0.41.0): Version 0.41.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.40.0...0.41.0) #### Added - Add `--limit-max-requests-jitter` to stagger worker restarts ([#&#8203;2707](https://github.com/Kludex/uvicorn/issues/2707)) - Add socket path to `scope["server"]` ([#&#8203;2561](https://github.com/Kludex/uvicorn/issues/2561)) #### Changed - Rename `LifespanOn.error_occured` to `error_occurred` ([#&#8203;2776](https://github.com/Kludex/uvicorn/issues/2776)) #### Fixed - Ignore permission denied errors in watchfiles reloader ([#&#8203;2817](https://github.com/Kludex/uvicorn/issues/2817)) - Ensure lifespan shutdown runs when `should_exit` is set during startup ([#&#8203;2812](https://github.com/Kludex/uvicorn/issues/2812)) - Reduce the log level of 'request limit exceeded' messages ([#&#8203;2788](https://github.com/Kludex/uvicorn/issues/2788)) *** #### New Contributors - [@&#8203;t-kawasumi](https://github.com/t-kawasumi) made their first contribution in [#&#8203;2776](https://github.com/Kludex/uvicorn/pull/2776) - [@&#8203;fardyn](https://github.com/fardyn) made their first contribution in [#&#8203;2800](https://github.com/Kludex/uvicorn/pull/2800) - [@&#8203;ewie](https://github.com/ewie) made their first contribution in [#&#8203;2807](https://github.com/Kludex/uvicorn/pull/2807) - [@&#8203;shevron](https://github.com/shevron) made their first contribution in [#&#8203;2788](https://github.com/Kludex/uvicorn/pull/2788) - [@&#8203;jonashaag](https://github.com/jonashaag) made their first contribution in [#&#8203;2707](https://github.com/Kludex/uvicorn/pull/2707) *** **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.40.0...0.41.0> ### [`v0.40.0`](https://github.com/Kludex/uvicorn/releases/tag/0.40.0): Version 0.40.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.39.0...0.40.0) #### What's Changed - Drop Python 3.9 by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2772](https://github.com/Kludex/uvicorn/pull/2772) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.39.0...0.40.0> ### [`v0.39.0`](https://github.com/Kludex/uvicorn/releases/tag/0.39.0): Version 0.39.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.38.0...0.39.0) #### What's Changed - explicitly start ASGI run with empty context by [@&#8203;pmeier](https://github.com/pmeier) in [#&#8203;2742](https://github.com/Kludex/uvicorn/pull/2742) - fix(websockets): Send close frame on ASGI return by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2769](https://github.com/Kludex/uvicorn/pull/2769) #### New Contributors - [@&#8203;pmeier](https://github.com/pmeier) made their first contribution in [#&#8203;2742](https://github.com/Kludex/uvicorn/pull/2742) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.38.0...0.39.0> ### [`v0.38.0`](https://github.com/Kludex/uvicorn/releases/tag/0.38.0): Version 0.38.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.37.0...0.38.0) #### What's Changed - Support Python 3.14 by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2723](https://github.com/Kludex/uvicorn/pull/2723) *** #### New Contributors - [@&#8203;NGANAMODEIJunior](https://github.com/NGANAMODEIJunior) made their first contribution in [#&#8203;2713](https://github.com/Kludex/uvicorn/pull/2713) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.37.0...0.38.0> ### [`v0.37.0`](https://github.com/Kludex/uvicorn/releases/tag/0.37.0): Version 0.37.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.36.1...0.37.0) #### What's Changed - Add `--timeout-worker-healthcheck` setting by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2711](https://github.com/Kludex/uvicorn/pull/2711) - Add `os.PathLike[str]` type to `ssl_ca_certs` by [@&#8203;rnv812](https://github.com/rnv812) in [#&#8203;2676](https://github.com/Kludex/uvicorn/pull/2676) #### New Contributors - [@&#8203;LincolnPuzey](https://github.com/LincolnPuzey) made their first contribution in [#&#8203;2669](https://github.com/Kludex/uvicorn/pull/2669) - [@&#8203;rnv812](https://github.com/rnv812) made their first contribution in [#&#8203;2676](https://github.com/Kludex/uvicorn/pull/2676) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.36.1...0.37.0> ### [`v0.36.1`](https://github.com/Kludex/uvicorn/releases/tag/0.36.1): Version 0.36.1 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.36.0...0.36.1) #### What's Changed - Raise an exception when calling removed `Config.setup_event_loop()` by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2709](https://github.com/Kludex/uvicorn/pull/2709) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.36.0...0.36.1> ### [`v0.36.0`](https://github.com/Kludex/uvicorn/releases/tag/0.36.0): Version 0.36.0 [Compare Source](https://github.com/Kludex/uvicorn/compare/0.35.0...0.36.0) #### Added - Support custom IOLOOPs by [@&#8203;gnir-work](https://github.com/gnir-work) in [#&#8203;2435](https://github.com/Kludex/uvicorn/pull/2435) - Allow to provide importable string in `--http`, `--ws` and `--loop` by [@&#8203;Kludex](https://github.com/Kludex) in [#&#8203;2658](https://github.com/Kludex/uvicorn/pull/2658) *** ##### New Contributors - [@&#8203;gnir-work](https://github.com/gnir-work) made their first contribution in [#&#8203;2435](https://github.com/Kludex/uvicorn/pull/2435) - [@&#8203;musicinmybrain](https://github.com/musicinmybrain) made their first contribution in [#&#8203;2659](https://github.com/Kludex/uvicorn/pull/2659) - [@&#8203;secrett2633](https://github.com/secrett2633) made their first contribution in [#&#8203;2684](https://github.com/Kludex/uvicorn/pull/2684) **Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.35.0...0.36.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **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](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNjQuNyIsInVwZGF0ZWRJblZlciI6IjQ0LjE5MC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
renovate-bot force-pushed renovate/all-minor-patch from 2418a29ba7 to d97fe7dba5 2026-10-16 13:42:19 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from d97fe7dba5 to ad9e6faaf1 2026-10-18 05:55:18 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from ad9e6faaf1 to 1517741289 2026-10-18 13:57:40 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 1517741289 to 493ff06dbc 2026-10-19 06:02:56 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 493ff06dbc to 5f6cb7b183 2026-10-19 14:05:39 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 5f6cb7b183 to f22d8d4d44 2026-10-19 22:08:31 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from f22d8d4d44 to 1efb0d13a3 2026-10-20 06:12:02 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 1efb0d13a3 to 45ffda12cf 2026-10-20 14:14:29 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 45ffda12cf to f610418b4e 2026-10-20 22:17:35 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from f610418b4e to 3ebb1b335b 2026-10-21 06:20:20 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 3ebb1b335b to d0f24e2cea 2026-10-21 14:23:08 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from d0f24e2cea to 5df7c76043 2026-10-21 22:26:24 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 5df7c76043 to 2973c88449 2026-10-22 14:31:58 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 2973c88449 to 4e27367eac 2026-10-22 22:35:13 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 4e27367eac to 8087bce8c1 2026-10-23 22:43:58 -04:00 Compare
renovate-bot force-pushed renovate/all-minor-patch from 8087bce8c1 to 18fc4932fa 2026-10-28 07:23:17 -04:00 Compare
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/all-minor-patch:renovate/all-minor-patch
git switch renovate/all-minor-patch

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.

git switch main
git merge --no-ff renovate/all-minor-patch
git switch renovate/all-minor-patch
git rebase main
git switch main
git merge --ff-only renovate/all-minor-patch
git switch renovate/all-minor-patch
git rebase main
git switch main
git merge --no-ff renovate/all-minor-patch
git switch main
git merge --squash renovate/all-minor-patch
git switch main
git merge --ff-only renovate/all-minor-patch
git switch main
git merge renovate/all-minor-patch
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
lukasdotcom/secured-remote-docker-build!2
No description provided.