Make pool min_size a maintained connection floor and add init_size to
control the number of connections opened at startup (#1323).
Idle connections at or below min_size are retained, and closed connections
are replaced in the background. init_size defaults to min_size.
To preserve the previous behavior, where the pool could drain to zero,
replace min_size=N with init_size=N, min_size=0.
(by @shatilov-diman in 67a1cbc)
Use the statement cache for copy_records_to_table() introspection (#1360)
(by @matemax in dd05865)
Fixes
Clean up connections rejected by target_session_attrs immediately so an
unresponsive rejected host cannot delay the selected connection, and cleanup
tasks cannot outlive the event loop. Rejected connections are aborted without
waiting for a graceful disconnect; servers may log "unexpected EOF on client
connection" if the Terminate message is not delivered before the transport
closes.
Fix a connection pool deadlock when releasing a connection after a protocol
abort (#1324)
(by @pchaseh in 4a83cc2)
Honor Connection.close(timeout=...) while waiting for a pending
cancellation (#1361)
(by @gyanu2507 in c06bcb4)
Prevent stuck cancellation from blocking connection teardown or pool release
by bounding cancellation with the command or release timeout (#1370)
(by @elprans in 4cf0220)
Preserve the server error when the connection closes mid-operation (#1369)
(by @RitiGrover in 6c8f1a7)
Fix COPY cleanup when a records generator raises, preserving the original
exception and avoiding protocol desynchronization and stalled rollback (#1358)
(by @CodingCossack in fdc6bc8)
Reparse unnamed statements before cursor binding when the statement cache
is disabled (#1364)
(by @elprans in 302ba49)
Allow cursors in transactions started outside Connection.transaction(),
such as with an explicit BEGIN (#1350)
(by @aryansk in 25aaaf5)
Fix a segfault in Record.get() with an invalid number of positional
arguments (#1333)
(by @apoorvdarshan in 40a3832)
Align SSL startup retries with libpq and improve SSL rejection diagnostics
(#1366). Retry alternative transports only before authentication succeeds.
Direct TLS now requires sslmode=require, verify-ca, or verify-full,
or an explicit SSLContext.
(by @elprans in 78752c9)
Preserve password errors during SSL fallback when the fallback fails with
a less specific authorization error (#1331)
(by @Mauricio0129 in 2d97947)
Handle cleartext password authentication when no password is supplied
without raising an AttributeError (#1351)
(by @aryansk in 6be5915)
Set the postgresql ALPN protocol on SSL contexts created by asyncpg so
direct TLS connections work with PostgreSQL 17 and later (#1372).
User-provided contexts must set this protocol for direct TLS connections.
(by @DurandA in b21325d)
Link explicitly against libm on non-Windows platforms to fix undefined
math symbol errors when loading the extensions (#1305)
(by @veeceey in db8ecc2)
Fix builds on FreeBSD 15 by linking against libstdthreads (#1368)
(by @elprans in 87bcaf9)
♻️ Refactor internals to preserve APIRouter and APIRoute instances. PR #15745 by @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)
FastMCP 3.4.7 restores CIMD private_key_jwt authentication for OAuthProxy deployments at a bare origin. Client assertions are now validated against the exact token endpoint advertised in authorization server metadata, eliminating the doubled-slash audience mismatch.
What's Changed
Security 🔒
Backport CIMD assertion audience fix to v3 by @jlowin in #4799
Docs 📚
Docs: add v3.4.7 changelog entries by @jlowin in #4810
FastMCP 3.4.6 backports trusted-proxy support for SSRF-protected OAuth metadata and JWKS fetches. Deployments can now route these requests through a mandated corporate proxy while preserving custom CA certificates; FastMCP refuses the fetch when no proxy is configured instead of risking an unprotected direct request.
FastMCP 3.4.5 collects five fixes for the 3.x line. The one that prompted it: a single Ed25519 key in a JWKS — which Rauthy, Ory Hydra, and some Keycloak configurations publish by default — made JWTVerifier reject every token, including ones correctly signed by supported keys in the same set.
FastMCP 3.4.4 restores HTTP deployment compatibility after the 3.4.3 Host/Origin guard changed default behavior for existing ASGI, serverless, and reverse-proxy deployments. The guard implementation remains available for deployments that opt in with explicit trusted hosts and origins, while 3.x returns to accepting traffic that worked before the patch. This release also adds Hugging Face OAuth provider support, with docs and examples for public and private apps, PKCE, Dynamic Client Registration, and CIMD.
FastMCP 3.4.3 closes out a month of SSRF and OAuth hardening: NAT64, 6to4, Teredo, and ISATAP transition addresses can no longer smuggle private IPv4 targets past the SSRF allow-list, Streamable HTTP now validates Host and Origin before session handling to block DNS rebinding against localhost-bound servers, and OAuth redirect validation rejects unsafe schemes and unregistered DCR redirect URIs. Alongside the security work, this release also fixes proxy session teardown races, discriminator-tag handling in JSON schema conversion, and several smaller reliability issues.
What's Changed
Enhancements ✨
Dedupe discriminator-required helper across schema converters by @jlowin in #4362
Add real Monty sandbox e2e coverage for CodeMode call_tool by @AlexlaGuardia in #4274
Switch prettier hook to rbubley/mirrors-prettier by @jlowin in #4366
feat(remote): add --verify flag for TLS certificate verification by @jlowin in #4369
Security 🔒
fix(deps): clear Dependabot security alerts via lockfile bumps by @jlowin in #4393
Clarify resource path parameter safety by @jlowin in #4398
FastMCP 3.4.2 restores JWT compatibility for providers that include private, non-critical JWS header parameters. Tokens from providers like Clerk can carry header metadata such as cat without being rejected before signature and claim validation, while unsupported critical headers are still rejected.
FastMCP 3.4.1 floors Starlette at >=1.0.1 so installs can no longer resolve to a version affected by CVE-2026-48710 — previously the dependency was only constrained transitively through mcp, which allowed vulnerable versions. It also makes OAuthProxy log refresh-token cache misses instead of failing silently.
What's Changed
Enhancements ✨
Log refresh-token misses in OAuthProxy instead of failing silently by @jlowin in #4276
Security 🔒
Add explicit starlette>=1.0.1 floor (CVE-2026-48710) by @jlowin in #4286
Docs 📚
Document --notes-start-tag in release instructions by @jlowin in #4275
FastMCP 3.4 is about reaching servers that live somewhere else. The headline is fastmcp-remote, a standalone bridge that connects stdio-only MCP hosts to servers hosted over HTTP. Around it, this release hardens the proxy layer those remote connections depend on — making bridges fail loudly instead of silently, and keeping authenticated sessions alive across the long idle periods that remote clients are prone to.
fastmcp-remote
Some MCP hosts still insist on launching a local stdio command, even when the server you want is already running over HTTP. FastMCP could already proxy a remote URL through fastmcp run, but that pulls in the full server-runner surface. fastmcp-remote is the small, single-purpose version: one URL in, one local stdio proxy out.
OAuth is enabled automatically for HTTPS servers, with support for explicit bearer tokens and custom headers when you need them. The implementation stays on FastMCP primitives — Client, OAuth, create_proxy, and stdio — and credits the original npm mcp-remote project for the command shape.
Bridges That Fail Loudly
Proxies are lazy bridges: they don't touch the upstream server during construction, but they do forward real MCP requests once a client connects. As of 3.4, initialize is part of that forwarded surface — so a proxy only reports a successful handshake after the upstream server initializes too. A missing backend, a wrong URL (the server root instead of /mcp), denied upstream auth, or a non-MCP upstream now fails the downstream initialize instead of producing a "connected" proxy whose capability fetches quietly come back empty. The proxy also forwards ping upstream now.
This is an intentional behavior change from 3.3, and the reason bridge callers like fastmcp-remote surface real upstream failures instead of degrading into empty tool lists.
Auth That Survives Idle Time
Remote sessions sit idle, and short-lived upstream tokens punish that. fastmcp_access_token_expiry_seconds decouples the FastMCP-issued token's lifetime from the upstream expires_in — the FastMCP token is just a reference into proxy storage, re-validated and transparently refreshed on every request, so it can safely outlive a 5-minute upstream token without forcing a full OAuth flow after every idle period. When the upstream issues no refresh token, the lifetime is capped to match.
Alongside it, token_expiry_threshold_seconds treats tokens as expired N seconds early to close refresh races, and WorkOSProvider gains valid_scopes and extra_authorize_params.
Returnable Tool Errors
A tool could previously only signal an error by raising, which flattens to a text-only result and discards structured content. ToolResult now accepts is_error, mapping to CallToolResult.isError so a tool can hand back a rich error the model can see and act on. The proxy uses this to forward upstream tool errors intact instead of collapsing them.
MontySandboxProvider() now applies a conservative baseline when constructed without limits — 30s duration, 100 MB memory — and CodeMode caps tool calls at 50 per execute block. Both remain explicitly opt-out (limits=None, max_tool_calls=None), so the safe configuration is the default instead of something you had to remember to turn on.
Under the Hood
The auth stack migrated its JWT handling to joserfc. The fastmcp dev CLI gains --host and --log-panel/--no-log-panel. Resources created from templates now preserve annotations, meta, title, and icons; resource templates with query params work on proxied servers; OTEL spans cover the sampling step and tool execution; MCP config files are read as UTF-8; and the OAuth server metadata endpoint now answers at the /.well-known/openid-configuration alias.
Correct a race condition that could lead to garbage collection
unintentionally being disabled. See PR 529 <https://github.com/python-greenlet/greenlet/pull/529>_ by Yurii.
Link the C++ runtime statically into the Windows wheels again, as the
Appveyor builds did through 3.3.0. Since 3.3.1 _greenlet.pyd
imported MSVCP140.dll, which no Windows CPython distribution ships,
so importing greenlet failed on machines without the Visual C++
redistributable. See issue 525 <https://github.com/python-greenlet/greenlet/issues/525>_. Issue
and pull request by Daniel Sticker.
.. note::
Binary 3.15 wheels are now built with 3.15.0rc1. This should be
compatible with future 3.15 releases and is believed compatible
with 3.15b4 as well (but not earlier versions).
Fix a crash (segfault) on free-threaded builds of Python 3.14 and
later when the garbage collector runs while a greenlet that was
started from a non-empty C-stack-reference state is active.
See issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.
Thanks to ddorian and Kumar Aditya.
Fix a potential use-after-free on free-threaded builds of Python 3.14
and later when the garbage collector runs while a greenlet is
suspended holding a _PyCStackRef (for example, mid attribute
resolution). See issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.
Thanks to ddorian and Kumar Aditya.
Fix a deadlock on free-threaded builds when a greenlet switch happened
while a PyCriticalSection was held -- for example inside asyncio's Task.__step, which holds one on the running task for the duration of
the step. See PR 519 <https://github.com/python-greenlet/greenlet/pull/519/>.
Thanks to ddorian and Kumar Aditya.
.. note::
Binary 3.15 wheels are now built with Python 3.15b4. These may not
be compatible with earlier or later versions of 3.15. Binary
3.15 wheels of greenlet from previous releases (e.g., 3.5.3)
may not be compatible with Python 3.15b4.
Fix a crash (segfault) on free-threaded builds of Python 3.14 and
later when the garbage collector runs while a greenlet that was
started from a non-empty C-stack-reference state is active.
See issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.
Thanks to ddorian and Kumar Aditya.
Fix a potential use-after-free on free-threaded builds of Python 3.14
and later when the garbage collector runs while a greenlet is
suspended holding a _PyCStackRef (for example, mid attribute
resolution). See issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.
Thanks to ddorian and Kumar Aditya.
Fix a deadlock on free-threaded builds when a greenlet switch happened
while a PyCriticalSection was held -- for example inside asyncio's Task.__step, which holds one on the running task for the duration of
the step. See PR 519 <https://github.com/python-greenlet/greenlet/pull/519/>.
Thanks to ddorian and Kumar Aditya.
.. note::
Binary 3.15 wheels are now built with Python 3.15b4. These may not
be compatible with earlier or later versions of 3.15. Binary
3.15 wheels of greenlet from previous releases (e.g., 3.5.3)
may not be compatible with Python 3.15b4.
The minimum supported version of Python 3.15 is now 3.15b2.
Fix some garbage-collection related crashes on free-threaded Python
3.15. Thanks to Kumar Aditya in PR #​511 <https://github.com/python-greenlet/greenlet/pull/511>_.
Improve garbage collection of greenlets. This mostly applies to
Python 3.15. Thanks to Kumar Aditya in PR #​512 <https://github.com/python-greenlet/greenlet/pull/512>_.
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.
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.
datetime fields now use UTCDateTime, a custom type based on DateTime(timezone=True). It requires aware datetime parameters, normalizes them to UTC, and returns aware UTC values from database reads, including on SQLite and MySQL/MariaDB. Pydantic's AwareDatetime uses the same type, while NaiveDatetime explicitly selects DateTime(timezone=False). Plain datetime validation still accepts both aware and naive values, but naive database parameters now raise an error.
Existing databases are not changed automatically. To retain naive storage, use NaiveDatetime or an explicit Field(sa_type=DateTime(timezone=False)). Explicit SQLAlchemy types retain their existing behavior. PostgreSQL needs a column migration that explicitly specifies the timezone of existing values. SQLite and MySQL/MariaDB keep their column definitions, but existing non-UTC values need a data migration before adopting the new type. Update datetime producers, query parameters, comparisons, and any database defaults to follow the new UTC convention.
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.
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.
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)
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)
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [alembic](https://github.com/sqlalchemy/alembic) ([changelog](https://alembic.sqlalchemy.org/en/latest/changelog.html)) | `1.18.4` → `1.20.0` |  |  |
| [asyncpg](https://github.com/MagicStack/asyncpg) | `0.31.0` → `0.32.0` |  |  |
| [fastapi](https://github.com/fastapi/fastapi) ([changelog](https://fastapi.tiangolo.com/release-notes/)) | `0.136.3` → `0.142.4` |  |  |
| [fastmcp](https://github.com/PrefectHQ/fastmcp) | `3.3.1` → `3.4.8` |  |  |
| [greenlet](https://github.com/python-greenlet/greenlet) ([changelog](https://greenlet.readthedocs.io/en/latest/changes.html)) | `3.5.1` → `3.5.6` |  |  |
| [kurigram](https://github.com/KurimuzonAkuma/pyrogram) | `2.2.23` → `2.2.26` |  |  |
| [pydantic-settings](https://github.com/pydantic/pydantic-settings) ([changelog](https://github.com/pydantic/pydantic-settings/releases)) | `2.14.1` → `2.15.0` |  |  |
| [sqlmodel](https://github.com/fastapi/sqlmodel) ([changelog](https://sqlmodel.tiangolo.com/release-notes/)) | `0.0.38` → `0.0.48` |  |  |
| [uvicorn](https://github.com/Kludex/uvicorn) ([changelog](https://uvicorn.dev/release-notes)) | `0.48.0` → `0.54.0` |  |  |
| [uvloop](https://github.com/MagicStack/uvloop) | `0.22.1` → `0.23.0` |  |  |
---
### Release Notes
<details>
<summary>MagicStack/asyncpg (asyncpg)</summary>
### [`v0.32.0`](https://github.com/MagicStack/asyncpg/releases/tag/v0.32.0)
[Compare Source](https://github.com/MagicStack/asyncpg/compare/v0.31.0...v0.32.0)
#### Improvements
- Support Python 3.15 ([#​1367](https://github.com/MagicStack/asyncpg/issues/1367), [#​1378](https://github.com/MagicStack/asyncpg/issues/1378))
(by [@​elprans](https://github.com/elprans) in [`1b11846`](https://github.com/MagicStack/asyncpg/commit/1b118464) and [`58c0c59`](https://github.com/MagicStack/asyncpg/commit/58c0c595))
- Support PostgreSQL 19 ([#​1379](https://github.com/MagicStack/asyncpg/issues/1379))
(by [@​elprans](https://github.com/elprans) in [`8d2a5ae`](https://github.com/MagicStack/asyncpg/commit/8d2a5aed))
- Make pool `min_size` a maintained connection floor and add `init_size` to
control the number of connections opened at startup ([#​1323](https://github.com/MagicStack/asyncpg/issues/1323)).
Idle connections at or below `min_size` are retained, and closed connections
are replaced in the background. `init_size` defaults to `min_size`.
To preserve the previous behavior, where the pool could drain to zero,
replace `min_size=N` with `init_size=N, min_size=0`.
(by [@​shatilov-diman](https://github.com/shatilov-diman) in [`67a1cbc`](https://github.com/MagicStack/asyncpg/commit/67a1cbc5))
- Use `hashlib.pbkdf2_hmac()` for faster SCRAM password derivation ([#​1359](https://github.com/MagicStack/asyncpg/issues/1359))
(by [@​twelfthlabor](https://github.com/twelfthlabor) in [`00319a9`](https://github.com/MagicStack/asyncpg/commit/00319a9b))
- Use the statement cache for `copy_records_to_table()` introspection ([#​1360](https://github.com/MagicStack/asyncpg/issues/1360))
(by [@​matemax](https://github.com/matemax) in [`dd05865`](https://github.com/MagicStack/asyncpg/commit/dd058652))
#### Fixes
- Clean up connections rejected by `target_session_attrs` immediately so an
unresponsive rejected host cannot delay the selected connection, and cleanup
tasks cannot outlive the event loop. Rejected connections are aborted without
waiting for a graceful disconnect; servers may log "unexpected EOF on client
connection" if the Terminate message is not delivered before the transport
closes.
- Fix a connection pool deadlock when releasing a connection after a protocol
abort ([#​1324](https://github.com/MagicStack/asyncpg/issues/1324))
(by [@​pchaseh](https://github.com/pchaseh) in [`4a83cc2`](https://github.com/MagicStack/asyncpg/commit/4a83cc2f))
- Honor `Connection.close(timeout=...)` while waiting for a pending
cancellation ([#​1361](https://github.com/MagicStack/asyncpg/issues/1361))
(by [@​gyanu2507](https://github.com/gyanu2507) in [`c06bcb4`](https://github.com/MagicStack/asyncpg/commit/c06bcb4d))
- Prevent stuck cancellation from blocking connection teardown or pool release
by bounding cancellation with the command or release timeout ([#​1370](https://github.com/MagicStack/asyncpg/issues/1370))
(by [@​elprans](https://github.com/elprans) in [`4cf0220`](https://github.com/MagicStack/asyncpg/commit/4cf02203))
- Preserve the server error when the connection closes mid-operation ([#​1369](https://github.com/MagicStack/asyncpg/issues/1369))
(by [@​RitiGrover](https://github.com/RitiGrover) in [`6c8f1a7`](https://github.com/MagicStack/asyncpg/commit/6c8f1a7a))
- Fix COPY cleanup when a records generator raises, preserving the original
exception and avoiding protocol desynchronization and stalled rollback ([#​1358](https://github.com/MagicStack/asyncpg/issues/1358))
(by [@​CodingCossack](https://github.com/CodingCossack) in [`fdc6bc8`](https://github.com/MagicStack/asyncpg/commit/fdc6bc8f))
- Reparse unnamed statements before cursor binding when the statement cache
is disabled ([#​1364](https://github.com/MagicStack/asyncpg/issues/1364))
(by [@​elprans](https://github.com/elprans) in [`302ba49`](https://github.com/MagicStack/asyncpg/commit/302ba496))
- Allow cursors in transactions started outside `Connection.transaction()`,
such as with an explicit `BEGIN` ([#​1350](https://github.com/MagicStack/asyncpg/issues/1350))
(by [@​aryansk](https://github.com/aryansk) in [`25aaaf5`](https://github.com/MagicStack/asyncpg/commit/25aaaf54))
- Remove the query logger when the `query_logger()` block raises ([#​1373](https://github.com/MagicStack/asyncpg/issues/1373))
(by [@​kratos0718](https://github.com/kratos0718) in [`6a7fbd3`](https://github.com/MagicStack/asyncpg/commit/6a7fbd3e))
- Fix a segfault in `Record.get()` with an invalid number of positional
arguments ([#​1333](https://github.com/MagicStack/asyncpg/issues/1333))
(by [@​apoorvdarshan](https://github.com/apoorvdarshan) in [`40a3832`](https://github.com/MagicStack/asyncpg/commit/40a38320))
- Align SSL startup retries with libpq and improve SSL rejection diagnostics
([#​1366](https://github.com/MagicStack/asyncpg/issues/1366)). Retry alternative transports only before authentication succeeds.
Direct TLS now requires `sslmode=require`, `verify-ca`, or `verify-full`,
or an explicit `SSLContext`.
(by [@​elprans](https://github.com/elprans) in [`78752c9`](https://github.com/MagicStack/asyncpg/commit/78752c9c))
- Preserve password errors during SSL fallback when the fallback fails with
a less specific authorization error ([#​1331](https://github.com/MagicStack/asyncpg/issues/1331))
(by [@​Mauricio0129](https://github.com/Mauricio0129) in [`2d97947`](https://github.com/MagicStack/asyncpg/commit/2d979472))
- Handle cleartext password authentication when no password is supplied
without raising an `AttributeError` ([#​1351](https://github.com/MagicStack/asyncpg/issues/1351))
(by [@​aryansk](https://github.com/aryansk) in [`6be5915`](https://github.com/MagicStack/asyncpg/commit/6be59154))
- Set the `postgresql` ALPN protocol on SSL contexts created by asyncpg so
direct TLS connections work with PostgreSQL 17 and later ([#​1372](https://github.com/MagicStack/asyncpg/issues/1372)).
User-provided contexts must set this protocol for direct TLS connections.
(by [@​DurandA](https://github.com/DurandA) in [`b21325d`](https://github.com/MagicStack/asyncpg/commit/b21325d2))
- Link explicitly against `libm` on non-Windows platforms to fix undefined
math symbol errors when loading the extensions ([#​1305](https://github.com/MagicStack/asyncpg/issues/1305))
(by [@​veeceey](https://github.com/veeceey) in [`db8ecc2`](https://github.com/MagicStack/asyncpg/commit/db8ecc2a))
- Fix builds on FreeBSD 15 by linking against `libstdthreads` ([#​1368](https://github.com/MagicStack/asyncpg/issues/1368))
(by [@​elprans](https://github.com/elprans) in [`87bcaf9`](https://github.com/MagicStack/asyncpg/commit/87bcaf97))
#### Other
- Replace `pkg_resources` with `packaging` in `setup.py` ([#​1362](https://github.com/MagicStack/asyncpg/issues/1362))
(by [@​elprans](https://github.com/elprans) in [`6695db7`](https://github.com/MagicStack/asyncpg/commit/6695db76))
- Build Linux and macOS ARM64 wheels on native runners and add Windows ARM64
wheel builds ([#​1308](https://github.com/MagicStack/asyncpg/issues/1308))
(by [@​ddelange](https://github.com/ddelange) in [`1e8cc1c`](https://github.com/MagicStack/asyncpg/commit/1e8cc1c4))
- Add manual and PR-label-triggered dry runs to the release workflow ([#​1374](https://github.com/MagicStack/asyncpg/issues/1374))
(by [@​elprans](https://github.com/elprans) in [`1bd643e`](https://github.com/MagicStack/asyncpg/commit/1bd643e1))
- Clarify how `execute()` uses prepared statements and how to confirm an
`INSERT` in the documentation ([#​1336](https://github.com/MagicStack/asyncpg/issues/1336))
(by [@​pctablet505](https://github.com/pctablet505) in [`cdf816c`](https://github.com/MagicStack/asyncpg/commit/cdf816c4))
- Fix typos in comments and docstrings ([#​1332](https://github.com/MagicStack/asyncpg/issues/1332))
(by [@​maxtaran2010](https://github.com/maxtaran2010) in [`bc3e246`](https://github.com/MagicStack/asyncpg/commit/bc3e2462))
</details>
<details>
<summary>fastapi/fastapi (fastapi)</summary>
### [`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 [#​16470](https://github.com/fastapi/fastapi/pull/16470) by [@​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 [#​16468](https://github.com/fastapi/fastapi/pull/16468) by [@​tiangolo](https://github.com/tiangolo).
##### Docs
- 📝 Remove HTML title from newsletter to avoid the tooltip. PR [#​16461](https://github.com/fastapi/fastapi/pull/16461) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Embed the FastAPI and friends newsletter signup form. PR [#​16459](https://github.com/fastapi/fastapi/pull/16459) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update skill, use Asyncer for blocking code in threads. PR [#​16420](https://github.com/fastapi/fastapi/pull/16420) by [@​tiangolo](https://github.com/tiangolo).
##### Translations
- 🌐 Update translations for fr (add-missing). PR [#​16436](https://github.com/fastapi/fastapi/pull/16436) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for hi (add-missing). PR [#​16435](https://github.com/fastapi/fastapi/pull/16435) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for tr (add-missing). PR [#​16434](https://github.com/fastapi/fastapi/pull/16434) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for zh (add-missing). PR [#​16433](https://github.com/fastapi/fastapi/pull/16433) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for zh-hant (add-missing). PR [#​16432](https://github.com/fastapi/fastapi/pull/16432) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for pt (add-missing). PR [#​16431](https://github.com/fastapi/fastapi/pull/16431) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for de (add-missing). PR [#​16430](https://github.com/fastapi/fastapi/pull/16430) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for uk (add-missing). PR [#​16429](https://github.com/fastapi/fastapi/pull/16429) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for ja (add-missing). PR [#​16428](https://github.com/fastapi/fastapi/pull/16428) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for ko (add-missing). PR [#​16425](https://github.com/fastapi/fastapi/pull/16425) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for es (add-missing). PR [#​16426](https://github.com/fastapi/fastapi/pull/16426) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for ru (add-missing). PR [#​16427](https://github.com/fastapi/fastapi/pull/16427) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update Russian LLM-prompt. PR [#​16449](https://github.com/fastapi/fastapi/pull/16449) by [@​YuriiMotov](https://github.com/YuriiMotov).
##### Internal
- 👷 Fix deprecated command in `bump-pre-commit-hooks` workflow. PR [#​16463](https://github.com/fastapi/fastapi/pull/16463) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 🔧 Update sponsors: remove Render. PR [#​16457](https://github.com/fastapi/fastapi/pull/16457) by [@​tiangolo](https://github.com/tiangolo).
- 🔨 Use `gpt-6-astra` model for translations. PR [#​16453](https://github.com/fastapi/fastapi/pull/16453) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆ Bump the python-packages group across 1 directory with 14 updates. PR [#​16447](https://github.com/fastapi/fastapi/pull/16447) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump starlette from 1.6.0 to 1.7.0. PR [#​16440](https://github.com/fastapi/fastapi/pull/16440) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR [#​16423](https://github.com/fastapi/fastapi/pull/16423) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump gitpython from 3.1.60 to 3.1.62. PR [#​16444](https://github.com/fastapi/fastapi/pull/16444) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👥 Update FastAPI GitHub topic repositories. PR [#​16443](https://github.com/fastapi/fastapi/pull/16443) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 👥 Update FastAPI People - Sponsors. PR [#​16437](https://github.com/fastapi/fastapi/pull/16437) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- ⬆ Bump pre-commit hooks. PR [#​16442](https://github.com/fastapi/fastapi/pull/16442) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- ⬆ Bump urllib3 from 2.7.0 to 2.8.0. PR [#​16445](https://github.com/fastapi/fastapi/pull/16445) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 3 updates. PR [#​16438](https://github.com/fastapi/fastapi/pull/16438) by [@​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 [#​16418](https://github.com/fastapi/fastapi/pull/16418) by [@​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 [#​16414](https://github.com/fastapi/fastapi/pull/16414) by [@​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 [#​16403](https://github.com/fastapi/fastapi/pull/16403) by [@​tiangolo](https://github.com/tiangolo).
##### Refactors
- 📱 Improve mobile responsiveness of conference rail. PR [#​16196](https://github.com/fastapi/fastapi/pull/16196) by [@​alejsdev](https://github.com/alejsdev).
- ♻️ Remove conf section and add event banner. PR [#​16193](https://github.com/fastapi/fastapi/pull/16193) by [@​alejsdev](https://github.com/alejsdev).
##### Docs
- 🔥 Remove unused image. PR [#​16195](https://github.com/fastapi/fastapi/pull/16195) by [@​alejsdev](https://github.com/alejsdev).
- 🐛 Use buttons for Termynal controls. PR [#​16132](https://github.com/fastapi/fastapi/pull/16132) by [@​tiangolo](https://github.com/tiangolo).
##### Translations
- 🌐 Update translations for hi (update-outdated). PR [#​16212](https://github.com/fastapi/fastapi/pull/16212) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for ru (update-outdated). PR [#​16210](https://github.com/fastapi/fastapi/pull/16210) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for zh-hant (update-outdated). PR [#​16211](https://github.com/fastapi/fastapi/pull/16211) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for uk (update-outdated). PR [#​16208](https://github.com/fastapi/fastapi/pull/16208) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for de (update-outdated). PR [#​16209](https://github.com/fastapi/fastapi/pull/16209) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for tr (update-outdated). PR [#​16207](https://github.com/fastapi/fastapi/pull/16207) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for ja (update-outdated). PR [#​16206](https://github.com/fastapi/fastapi/pull/16206) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for fr (update-outdated). PR [#​16205](https://github.com/fastapi/fastapi/pull/16205) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for zh (update-outdated). PR [#​16204](https://github.com/fastapi/fastapi/pull/16204) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for es (update-outdated). PR [#​16203](https://github.com/fastapi/fastapi/pull/16203) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for pt (update-outdated). PR [#​16202](https://github.com/fastapi/fastapi/pull/16202) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for ko (update-outdated). PR [#​16201](https://github.com/fastapi/fastapi/pull/16201) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🌐 Update translations for ko (update-outdated). PR [#​16171](https://github.com/fastapi/fastapi/pull/16171) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
##### Internal
- ✅ Fix frontend test timeout with Starlette Git. PR [#​16408](https://github.com/fastapi/fastapi/pull/16408) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 🔧 Update sponsors: remove Permit.io. PR [#​16406](https://github.com/fastapi/fastapi/pull/16406) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump anyio from 4.12.1 to 4.14.2. PR [#​16375](https://github.com/fastapi/fastapi/pull/16375) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the python-packages group across 1 directory with 15 updates. PR [#​16285](https://github.com/fastapi/fastapi/pull/16285) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump starlette from 1.3.1 to 1.6.0. PR [#​16289](https://github.com/fastapi/fastapi/pull/16289) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump annotated-doc from 0.0.4 to 0.0.5. PR [#​16288](https://github.com/fastapi/fastapi/pull/16288) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump typing-inspection from 0.4.2 to 0.4.4. PR [#​16286](https://github.com/fastapi/fastapi/pull/16286) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump fastar from 0.11.0 to 0.12.0. PR [#​16287](https://github.com/fastapi/fastapi/pull/16287) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 5 updates. PR [#​16284](https://github.com/fastapi/fastapi/pull/16284) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pre-commit hooks. PR [#​16290](https://github.com/fastapi/fastapi/pull/16290) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 👥 Update FastAPI GitHub topic repositories. PR [#​16291](https://github.com/fastapi/fastapi/pull/16291) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 👥 Update FastAPI People - Sponsors. PR [#​16282](https://github.com/fastapi/fastapi/pull/16282) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- ⬆️ Bump Typer min version to 0.26.1. PR [#​16252](https://github.com/fastapi/fastapi/pull/16252) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆️ Bump `setup-uv` action to `10.0.1`. PR [#​16249](https://github.com/fastapi/fastapi/pull/16249) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 👷 Update translation PR branches with PR Push. PR [#​16224](https://github.com/fastapi/fastapi/pull/16224) by [@​tiangolo](https://github.com/tiangolo).
- ⏪️ Restore `commit_in_place` input in `translate.yml`. PR [#​16216](https://github.com/fastapi/fastapi/pull/16216) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 👷 Migrate automatic labels to Latest Changes. PR [#​16185](https://github.com/fastapi/fastapi/pull/16185) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Fix branch name in `zizmor.yml` workflow (`main` -> `master`). PR [#​16178](https://github.com/fastapi/fastapi/pull/16178) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 👷 Remove legacy label check. PR [#​16180](https://github.com/fastapi/fastapi/pull/16180) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR [#​16162](https://github.com/fastapi/fastapi/pull/16162) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump gitpython from 3.1.57 to 3.1.58. PR [#​16157](https://github.com/fastapi/fastapi/pull/16157) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👥 Update FastAPI People - Sponsors. PR [#​16175](https://github.com/fastapi/fastapi/pull/16175) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🐛 Fix Sponsors Git authentication. PR [#​16174](https://github.com/fastapi/fastapi/pull/16174) by [@​tiangolo](https://github.com/tiangolo).
- 👥 Update FastAPI GitHub topic repositories. PR [#​16173](https://github.com/fastapi/fastapi/pull/16173) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
- 🔐 Use PR Submit for automated updates. PR [#​16172](https://github.com/fastapi/fastapi/pull/16172) by [@​tiangolo](https://github.com/tiangolo).
- 🔐 Use PR Submit for translations. PR [#​16168](https://github.com/fastapi/fastapi/pull/16168) by [@​tiangolo](https://github.com/tiangolo).
- ⬆️ Raise pytest-xdist minimum. PR [#​16170](https://github.com/fastapi/fastapi/pull/16170) by [@​tiangolo](https://github.com/tiangolo).
- 🔐 Use PR Submit for pull requests. PR [#​16167](https://github.com/fastapi/fastapi/pull/16167) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Use GitHub CLI for Git authentication. PR [#​16166](https://github.com/fastapi/fastapi/pull/16166) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Use PR Push commit identity. PR [#​16164](https://github.com/fastapi/fastapi/pull/16164) by [@​tiangolo](https://github.com/tiangolo).
- 🔒 Replace pre-commit PAT with PR Push. PR [#​16161](https://github.com/fastapi/fastapi/pull/16161) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Disable saving Zensical's `.cache` in `build-docs.yml`. PR [#​16156](https://github.com/fastapi/fastapi/pull/16156) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 🔥 Remove the old Latest Changes workflow. PR [#​16148](https://github.com/fastapi/fastapi/pull/16148) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group with 12 updates. PR [#​16121](https://github.com/fastapi/fastapi/pull/16121) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump cryptography from 48.0.1 to 50.0.0. PR [#​16142](https://github.com/fastapi/fastapi/pull/16142) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump gitpython from 3.1.54 to 3.1.57. PR [#​16141](https://github.com/fastapi/fastapi/pull/16141) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 6 updates. PR [#​16120](https://github.com/fastapi/fastapi/pull/16120) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👥 Update FastAPI GitHub topic repositories. PR [#​16122](https://github.com/fastapi/fastapi/pull/16122) by [@​tiangolo](https://github.com/tiangolo).
- 👥 Update FastAPI People - Sponsors. PR [#​16119](https://github.com/fastapi/fastapi/pull/16119) by [@​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 [#​16105](https://github.com/fastapi/fastapi/pull/16105) by [@​tiangolo](https://github.com/tiangolo).
##### Docs
- 📝 Document `FASTAPI_ENV` in FastAPI CLI guide. PR [#​16104](https://github.com/fastapi/fastapi/pull/16104) by [@​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 [#​16102](https://github.com/fastapi/fastapi/pull/16102) by [@​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 [#​15937](https://github.com/fastapi/fastapi/pull/15937) by [@​SAURABHSALVE](https://github.com/SAURABHSALVE).
##### Docs
- 📝 Fix `format_sse_event` docstring rendering of `\n\n` terminator. PR [#​15613](https://github.com/fastapi/fastapi/pull/15613) by [@​AshNicolus](https://github.com/AshNicolus).
- 📝 Add API reference page for fastapi.sse. PR [#​15930](https://github.com/fastapi/fastapi/pull/15930) by [@​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 [#​15515](https://github.com/fastapi/fastapi/pull/15515) by [@​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 [#​15093](https://github.com/fastapi/fastapi/pull/15093) by [@​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 [#​14874](https://github.com/fastapi/fastapi/pull/14874) by [@​YuriiMotov](https://github.com/YuriiMotov).
##### Internal
- 🐛 Accept any base test failure as regression. PR [#​16092](https://github.com/fastapi/fastapi/pull/16092) by [@​tiangolo](https://github.com/tiangolo).
- 🐛 Preserve pytest exit code in regression check. PR [#​16091](https://github.com/fastapi/fastapi/pull/16091) by [@​tiangolo](https://github.com/tiangolo).
- ✅ Test PR regressions against base code. PR [#​16090](https://github.com/fastapi/fastapi/pull/16090) by [@​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 [#​16043](https://github.com/fastapi/fastapi/pull/16043) by [@​MBGrao](https://github.com/MBGrao).
##### Internal
- ⬆ Bump gitpython from 3.1.50 to 3.1.54. PR [#​16047](https://github.com/fastapi/fastapi/pull/16047) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pymdown-extensions from 10.21.3 to 11.0. PR [#​16048](https://github.com/fastapi/fastapi/pull/16048) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pyasn1 from 0.6.3 to 0.6.4. PR [#​16045](https://github.com/fastapi/fastapi/pull/16045) by [@​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 [#​15077](https://github.com/fastapi/fastapi/pull/15077) by [@​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 [#​16076](https://github.com/fastapi/fastapi/pull/16076) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- ⬆️ Upgrade latest-changes to 0.7.1. PR [#​16077](https://github.com/fastapi/fastapi/pull/16077) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Add OpenAPI dependency benchmarks. PR [#​16075](https://github.com/fastapi/fastapi/pull/16075) by [@​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 [#​16073](https://github.com/fastapi/fastapi/pull/16073) by [@​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 [#​16071](https://github.com/fastapi/fastapi/pull/16071) by [@​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 [#​16069](https://github.com/fastapi/fastapi/pull/16069) by [@​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 [#​16067](https://github.com/fastapi/fastapi/pull/16067) by [@​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 [#​16065](https://github.com/fastapi/fastapi/pull/16065) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- 👷 Add new memory benchmark. PR [#​16064](https://github.com/fastapi/fastapi/pull/16064) by [@​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 [#​16062](https://github.com/fastapi/fastapi/pull/16062) by [@​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 [#​16049](https://github.com/fastapi/fastapi/pull/16049) by [@​tiangolo](https://github.com/tiangolo).
##### Docs
- 📝 Fix links in docs. PR [#​15967](https://github.com/fastapi/fastapi/pull/15967) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 📝 Add Library Skills documentation. PR [#​16041](https://github.com/fastapi/fastapi/pull/16041) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update docs to use uv projects by default. PR [#​16032](https://github.com/fastapi/fastapi/pull/16032) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Restructure FastAPI People and related pages. PR [#​16015](https://github.com/fastapi/fastapi/pull/16015) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- 👷 Add CI memory benchmark. PR [#​16046](https://github.com/fastapi/fastapi/pull/16046) by [@​tiangolo](https://github.com/tiangolo).
- 👥 Update FastAPI People - Sponsors. PR [#​16027](https://github.com/fastapi/fastapi/pull/16027) by [@​tiangolo](https://github.com/tiangolo).
- 🔥 Remove now-obsolete scripts to generate data for FastAPI People. PR [#​16016](https://github.com/fastapi/fastapi/pull/16016) by [@​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 [#​16013](https://github.com/fastapi/fastapi/pull/16013) by [@​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 [#​16011](https://github.com/fastapi/fastapi/pull/16011) by [@​tiangolo](https://github.com/tiangolo).
##### Docs
- 📝 Fix topic repository list not being displayed and `skip_users` not being applied. PR [#​15995](https://github.com/fastapi/fastapi/pull/15995) by [@​YuriiMotov](https://github.com/YuriiMotov).
##### Translations
- 🌐 Update translations for tr (update-outdated). PR [#​16005](https://github.com/fastapi/fastapi/pull/16005) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh-hant (update-outdated). PR [#​15996](https://github.com/fastapi/fastapi/pull/15996) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for fr (update-outdated). PR [#​16006](https://github.com/fastapi/fastapi/pull/16006) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for de (update-outdated). PR [#​15999](https://github.com/fastapi/fastapi/pull/15999) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ko (update-outdated). PR [#​16004](https://github.com/fastapi/fastapi/pull/16004) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh (update-outdated). PR [#​16001](https://github.com/fastapi/fastapi/pull/16001) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for uk (update-outdated). PR [#​16003](https://github.com/fastapi/fastapi/pull/16003) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ja (update-outdated). PR [#​15998](https://github.com/fastapi/fastapi/pull/15998) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for pt (update-outdated). PR [#​16000](https://github.com/fastapi/fastapi/pull/16000) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for es (update-outdated). PR [#​15997](https://github.com/fastapi/fastapi/pull/15997) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ru (update-outdated). PR [#​16002](https://github.com/fastapi/fastapi/pull/16002) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for hi (add-missing). PR [#​15990](https://github.com/fastapi/fastapi/pull/15990) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for hi (add-missing). PR [#​15925](https://github.com/fastapi/fastapi/pull/15925) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for hi (add-missing). PR [#​15797](https://github.com/fastapi/fastapi/pull/15797) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update `llm-prompt.md` for Hindi. PR [#​15810](https://github.com/fastapi/fastapi/pull/15810) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 🌐 Fix language-specific translation prompt for Russian language. PR [#​15924](https://github.com/fastapi/fastapi/pull/15924) by [@​YuriiMotov](https://github.com/YuriiMotov).
##### Internal
- ⬆ Bump the python-packages group across 1 directory with 6 updates. PR [#​15981](https://github.com/fastapi/fastapi/pull/15981) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR [#​15982](https://github.com/fastapi/fastapi/pull/15982) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group across 1 directory with 4 updates. PR [#​15983](https://github.com/fastapi/fastapi/pull/15983) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pre-commit hooks. PR [#​15985](https://github.com/fastapi/fastapi/pull/15985) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Use `FASTAPI_LATEST_CHANGES` token in `bump-pre-commit-hooks` workflow. PR [#​15984](https://github.com/fastapi/fastapi/pull/15984) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 👷 Add GH workflow to bump pre-commit hook versions. PR [#​15873](https://github.com/fastapi/fastapi/pull/15873) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 🔧 Set Dependabot schedule interval to "monthly". PR [#​15874](https://github.com/fastapi/fastapi/pull/15874) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR [#​15950](https://github.com/fastapi/fastapi/pull/15950) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the python-packages group with 8 updates. PR [#​15952](https://github.com/fastapi/fastapi/pull/15952) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 🔧 Update sponsors: add TutorCruncher. PR [#​15947](https://github.com/fastapi/fastapi/pull/15947) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Fix notify translations checkout target. PR [#​15933](https://github.com/fastapi/fastapi/pull/15933) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Fix latest-changes checkout target. PR [#​15932](https://github.com/fastapi/fastapi/pull/15932) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Update sponsors: remove RapidProxy. PR [#​15929](https://github.com/fastapi/fastapi/pull/15929) by [@​tiangolo](https://github.com/tiangolo).
- ⬆️ Update issue-manager to 0.8.1. PR [#​15928](https://github.com/fastapi/fastapi/pull/15928) by [@​tiangolo](https://github.com/tiangolo).
- ⬆️ Update latest-changes to 0.6.1. PR [#​15926](https://github.com/fastapi/fastapi/pull/15926) by [@​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 [#​15908](https://github.com/fastapi/fastapi/pull/15908) by [@​tiangolo](https://github.com/tiangolo).
##### Translations
- 🌐 Update translations for fr (update-outdated). PR [#​15897](https://github.com/fastapi/fastapi/pull/15897) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ja (update-outdated). PR [#​15895](https://github.com/fastapi/fastapi/pull/15895) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh-hant (update-outdated). PR [#​15896](https://github.com/fastapi/fastapi/pull/15896) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for de (update-outdated). PR [#​15899](https://github.com/fastapi/fastapi/pull/15899) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for es (update-outdated). PR [#​15892](https://github.com/fastapi/fastapi/pull/15892) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for tr (update-outdated). PR [#​15891](https://github.com/fastapi/fastapi/pull/15891) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for pt (update-outdated). PR [#​15893](https://github.com/fastapi/fastapi/pull/15893) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh (update-outdated). PR [#​15898](https://github.com/fastapi/fastapi/pull/15898) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for uk (update-outdated). PR [#​15900](https://github.com/fastapi/fastapi/pull/15900) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ko (update-outdated). PR [#​15890](https://github.com/fastapi/fastapi/pull/15890) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ru (update-outdated). PR [#​15894](https://github.com/fastapi/fastapi/pull/15894) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ko (add-missing). PR [#​15888](https://github.com/fastapi/fastapi/pull/15888) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for es (add-missing). PR [#​15880](https://github.com/fastapi/fastapi/pull/15880) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh-hant (add-missing). PR [#​15889](https://github.com/fastapi/fastapi/pull/15889) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for pt (add-missing). PR [#​15883](https://github.com/fastapi/fastapi/pull/15883) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh (add-missing). PR [#​15885](https://github.com/fastapi/fastapi/pull/15885) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ja (add-missing). PR [#​15882](https://github.com/fastapi/fastapi/pull/15882) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for tr (add-missing). PR [#​15887](https://github.com/fastapi/fastapi/pull/15887) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for uk (add-missing). PR [#​15886](https://github.com/fastapi/fastapi/pull/15886) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for fr (add-missing). PR [#​15881](https://github.com/fastapi/fastapi/pull/15881) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for de (add-missing). PR [#​15884](https://github.com/fastapi/fastapi/pull/15884) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ru (add-missing). PR [#​15879](https://github.com/fastapi/fastapi/pull/15879) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- 👥 Update FastAPI People - Experts. PR [#​15909](https://github.com/fastapi/fastapi/pull/15909) by [@​tiangolo](https://github.com/tiangolo).
- 👥 Update FastAPI GitHub topic repositories. PR [#​15906](https://github.com/fastapi/fastapi/pull/15906) by [@​tiangolo](https://github.com/tiangolo).
- 👥 Update FastAPI People - Contributors and Translators. PR [#​15878](https://github.com/fastapi/fastapi/pull/15878) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Remove not needed `allow-unsafe-pr-checkout: true`. PR [#​15876](https://github.com/fastapi/fastapi/pull/15876) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆ Bump the github-actions group with 5 updates. PR [#​15872](https://github.com/fastapi/fastapi/pull/15872) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the python-packages group across 1 directory with 10 updates. PR [#​15870](https://github.com/fastapi/fastapi/pull/15870) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump CodSpeedHQ/action from 4.17.0 to 4.17.5 in the github-actions group. PR [#​15826](https://github.com/fastapi/fastapi/pull/15826) by [@​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 [#​15863](https://github.com/fastapi/fastapi/pull/15863) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- 🔧 Update sponsors: remove Stainless. PR [#​15862](https://github.com/fastapi/fastapi/pull/15862) by [@​tiangolo](https://github.com/tiangolo).
- ♻️ Refactor how sponsors data is handled for banners. PR [#​15852](https://github.com/fastapi/fastapi/pull/15852) by [@​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 [#​15841](https://github.com/fastapi/fastapi/pull/15841) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- 👷 Simplify pull request workflow triggers. PR [#​15836](https://github.com/fastapi/fastapi/pull/15836) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Update issue-manager to 0.7.1. PR [#​15833](https://github.com/fastapi/fastapi/pull/15833) by [@​tiangolo](https://github.com/tiangolo).
- ⬆️ Update issue-manager to 0.7.0. PR [#​15831](https://github.com/fastapi/fastapi/pull/15831) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Update sponsors: Add TestMu again. PR [#​15830](https://github.com/fastapi/fastapi/pull/15830) by [@​tiangolo](https://github.com/tiangolo).
- 🔒️ Update zizmor workflow security checks. PR [#​15820](https://github.com/fastapi/fastapi/pull/15820) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump pydantic-settings from 2.14.1 to 2.14.2. PR [#​15799](https://github.com/fastapi/fastapi/pull/15799) by [@​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 [#​15800](https://github.com/fastapi/fastapi/pull/15800) by [@​tiangolo](https://github.com/tiangolo).
- Read the docs: [Frontend](https://fastapi.tiangolo.com/tutorial/frontend/).
##### Docs
- 📝 Fix typo in release notes. PR [#​15807](https://github.com/fastapi/fastapi/pull/15807) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Add `app.frontend()` instructions to Agent Library Skill. PR [#​15805](https://github.com/fastapi/fastapi/pull/15805) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update release notes link. PR [#​15802](https://github.com/fastapi/fastapi/pull/15802) by [@​tiangolo](https://github.com/tiangolo).
- ✏️ Update white space characters in bigger apps. PR [#​15801](https://github.com/fastapi/fastapi/pull/15801) by [@​tiangolo](https://github.com/tiangolo).
- ✏️ Fix grammar, typos, and broken links in docs. PR [#​15694](https://github.com/fastapi/fastapi/pull/15694) by [@​YuriiMotov](https://github.com/YuriiMotov).
##### Translations
- 🌐 Enable Hindi docs translations. PR [#​15554](https://github.com/fastapi/fastapi/pull/15554) by [@​YuriiMotov](https://github.com/YuriiMotov).
##### Internal
- 🐛 Fix failing test, update format for raised errors. PR [#​15804](https://github.com/fastapi/fastapi/pull/15804) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Fix test-alls-green. PR [#​15803](https://github.com/fastapi/fastapi/pull/15803) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Enable checking `release-notes.md` for typos. PR [#​15796](https://github.com/fastapi/fastapi/pull/15796) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 📝 Tweak wording about deploying to FastAPI Cloud. PR [#​15793](https://github.com/fastapi/fastapi/pull/15793) by [@​tiangolo](https://github.com/tiangolo).
- 🔨 Use `gpt-5.5` model in `translate.py`, specify `-chat` to avoid warnings. PR [#​15792](https://github.com/fastapi/fastapi/pull/15792) by [@​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 [#​15785](https://github.com/fastapi/fastapi/pull/15785) by [@​tiangolo](https://github.com/tiangolo).
##### Translations
- 🌐 Fix broken Markdown in Korean custom response docs. PR [#​15774](https://github.com/fastapi/fastapi/pull/15774) by [@​kooqooo](https://github.com/kooqooo).
- 🌐 Update translations for fr (update-outdated). PR [#​15761](https://github.com/fastapi/fastapi/pull/15761) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh-hant (update-outdated). PR [#​15760](https://github.com/fastapi/fastapi/pull/15760) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for de (update-outdated). PR [#​15759](https://github.com/fastapi/fastapi/pull/15759) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ko (update-outdated). PR [#​15757](https://github.com/fastapi/fastapi/pull/15757) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for uk (update-outdated). PR [#​15756](https://github.com/fastapi/fastapi/pull/15756) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh (update-outdated). PR [#​15755](https://github.com/fastapi/fastapi/pull/15755) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for tr (update-outdated). PR [#​15754](https://github.com/fastapi/fastapi/pull/15754) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for pt (update-outdated). PR [#​15753](https://github.com/fastapi/fastapi/pull/15753) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for es (update-outdated). PR [#​15752](https://github.com/fastapi/fastapi/pull/15752) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ja (update-outdated). PR [#​15751](https://github.com/fastapi/fastapi/pull/15751) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ru (update-outdated). PR [#​15758](https://github.com/fastapi/fastapi/pull/15758) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- 🔧 Update sponsors: add BairesDev. PR [#​15787](https://github.com/fastapi/fastapi/pull/15787) by [@​tiangolo](https://github.com/tiangolo).
- 🔨 Update sponsors script to simplify previews. PR [#​15786](https://github.com/fastapi/fastapi/pull/15786) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group across 1 directory with 7 updates. PR [#​15777](https://github.com/fastapi/fastapi/pull/15777) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump cryptography from 46.0.7 to 48.0.1. PR [#​15779](https://github.com/fastapi/fastapi/pull/15779) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump aiohttp from 3.14.0 to 3.14.1. PR [#​15781](https://github.com/fastapi/fastapi/pull/15781) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump starlette from 1.2.1 to 1.3.1. PR [#​15780](https://github.com/fastapi/fastapi/pull/15780) by [@​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 [#​15776](https://github.com/fastapi/fastapi/pull/15776) by [@​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 [#​15775](https://github.com/fastapi/fastapi/pull/15775) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump python-multipart from 0.0.30 to 0.0.32. PR [#​15778](https://github.com/fastapi/fastapi/pull/15778) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⏪️ Revert removing scripts, only remove `coverage.sh`. PR [#​15772](https://github.com/fastapi/fastapi/pull/15772) by [@​tiangolo](https://github.com/tiangolo).
- 🔥 Remove unused scripts. PR [#​15771](https://github.com/fastapi/fastapi/pull/15771) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Add ty configs to check docs sources. PR [#​15770](https://github.com/fastapi/fastapi/pull/15770) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Add ty configs to check docs sources. PR [#​15769](https://github.com/fastapi/fastapi/pull/15769) by [@​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 [#​15765](https://github.com/fastapi/fastapi/pull/15765) by [@​tiangolo](https://github.com/tiangolo).
- 🐛 Fix bug, allow empty path in path operation in prefixless router. PR [#​15763](https://github.com/fastapi/fastapi/pull/15763) by [@​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 [#​15745](https://github.com/fastapi/fastapi/pull/15745) by [@​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 [#​15747](https://github.com/fastapi/fastapi/pull/15747) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update FastAPI Cloud deployment instructions. PR [#​15724](https://github.com/fastapi/fastapi/pull/15724) by [@​alejsdev](https://github.com/alejsdev).
- ✏️ Use `Annotated` in inline example in `docs/en/docs/tutorial/body-multiple-params.md`. PR [#​15591](https://github.com/fastapi/fastapi/pull/15591) by [@​TheArchons](https://github.com/TheArchons).
- 📝 Remove "NGINX Unit" from the list of ASGI-servers in docs. PR [#​15475](https://github.com/fastapi/fastapi/pull/15475) by [@​angryfoxx](https://github.com/angryfoxx).
- 📝 Update `docs/en/docs/tutorial/security/oauth2-jwt.md`. PR [#​14781](https://github.com/fastapi/fastapi/pull/14781) by [@​zadevhub](https://github.com/zadevhub).
##### Translations
- 🌐 Update translations for zh-hant (update-outdated). PR [#​15671](https://github.com/fastapi/fastapi/pull/15671) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for es (update-outdated). PR [#​15670](https://github.com/fastapi/fastapi/pull/15670) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for fr (update-outdated). PR [#​15669](https://github.com/fastapi/fastapi/pull/15669) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ja (update-outdated). PR [#​15668](https://github.com/fastapi/fastapi/pull/15668) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for pt (update-outdated). PR [#​15667](https://github.com/fastapi/fastapi/pull/15667) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for tr (update-outdated). PR [#​15666](https://github.com/fastapi/fastapi/pull/15666) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for zh (update-outdated). PR [#​15665](https://github.com/fastapi/fastapi/pull/15665) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ko (update-outdated). PR [#​15664](https://github.com/fastapi/fastapi/pull/15664) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for de (update-outdated). PR [#​15673](https://github.com/fastapi/fastapi/pull/15673) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for uk (update-outdated). PR [#​15672](https://github.com/fastapi/fastapi/pull/15672) by [@​tiangolo](https://github.com/tiangolo).
- 🌐 Update translations for ru (update-outdated). PR [#​15674](https://github.com/fastapi/fastapi/pull/15674) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- 🔧 Update sponsors: remove TalorData. PR [#​15744](https://github.com/fastapi/fastapi/pull/15744) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Update sponsors: remove ExoFlare. PR [#​15736](https://github.com/fastapi/fastapi/pull/15736) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Update sponsors: remove InterviewPal. PR [#​15735](https://github.com/fastapi/fastapi/pull/15735) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Update sponsors: remove Liblab. PR [#​15731](https://github.com/fastapi/fastapi/pull/15731) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Update sponsors: remove Scalar. PR [#​15730](https://github.com/fastapi/fastapi/pull/15730) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group across 1 directory with 6 updates. PR [#​15721](https://github.com/fastapi/fastapi/pull/15721) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump python-multipart from 0.0.29 to 0.0.30. PR [#​15723](https://github.com/fastapi/fastapi/pull/15723) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 3 updates. PR [#​15720](https://github.com/fastapi/fastapi/pull/15720) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump starlette from 1.1.0 to 1.2.1. PR [#​15722](https://github.com/fastapi/fastapi/pull/15722) by [@​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 [#​15719](https://github.com/fastapi/fastapi/pull/15719) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 🔧 Update sponsors, add Rapidproxy. PR [#​15689](https://github.com/fastapi/fastapi/pull/15689) by [@​tiangolo](https://github.com/tiangolo).
- 🔧 Update sponsors: Remove TestMu. PR [#​15688](https://github.com/fastapi/fastapi/pull/15688) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group across 1 directory with 11 updates. PR [#​15683](https://github.com/fastapi/fastapi/pull/15683) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump aiohttp from 3.13.4 to 3.14.0. PR [#​15681](https://github.com/fastapi/fastapi/pull/15681) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 2 updates. PR [#​15682](https://github.com/fastapi/fastapi/pull/15682) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump starlette from 1.0.0 to 1.1.0. PR [#​15684](https://github.com/fastapi/fastapi/pull/15684) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👥 Update FastAPI People - Experts. PR [#​15677](https://github.com/fastapi/fastapi/pull/15677) by [@​tiangolo](https://github.com/tiangolo).
- 👥 Update FastAPI GitHub topic repositories. PR [#​15675](https://github.com/fastapi/fastapi/pull/15675) by [@​tiangolo](https://github.com/tiangolo).
- 👥 Update FastAPI People - Contributors and Translators. PR [#​15662](https://github.com/fastapi/fastapi/pull/15662) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Automate release preparation. PR [#​15661](https://github.com/fastapi/fastapi/pull/15661) by [@​tiangolo](https://github.com/tiangolo).
- 🔥 Remove slim package stub, deprecated for a while. PR [#​15649](https://github.com/fastapi/fastapi/pull/15649) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump authlib from 1.6.11 to 1.7.2. PR [#​15512](https://github.com/fastapi/fastapi/pull/15512) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pymdown-extensions from 10.21.2 to 10.21.3. PR [#​15569](https://github.com/fastapi/fastapi/pull/15569) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump CodSpeedHQ/action from 4.14.0 to 4.15.1. PR [#​15513](https://github.com/fastapi/fastapi/pull/15513) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump python-multipart from 0.0.26 to 0.0.29. PR [#​15595](https://github.com/fastapi/fastapi/pull/15595) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 🔒️ Improve GitHub actions security. PR [#​15607](https://github.com/fastapi/fastapi/pull/15607) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⚰️ Remove ruff and coverage ignores for non-existing files. PR [#​15610](https://github.com/fastapi/fastapi/pull/15610) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ✅ Use custom `changing_dir` instead of `CLIRunner.isolated_filesystem` to set working dir. PR [#​15616](https://github.com/fastapi/fastapi/pull/15616) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ✅ Add `httpx2` test dependency to avoid deprecation warning. PR [#​15603](https://github.com/fastapi/fastapi/pull/15603) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆ Bump the python-packages group with 15 updates. PR [#​15594](https://github.com/fastapi/fastapi/pull/15594) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Configure Dependabot to group updates and update weekly. PR [#​15560](https://github.com/fastapi/fastapi/pull/15560) by [@​YuriiMotov](https://github.com/YuriiMotov).
</details>
<details>
<summary>PrefectHQ/fastmcp (fastmcp)</summary>
### [`v3.4.8`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.8): : Long Arm of the Patch
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.7...v3.4.8)
This release contains important security and bug fixes. All users are encouraged to upgrade. Thanks to our 2 contributors.
<!-- Release notes generated using configuration in .github/release.yml at release/3.x -->
#### What's Changed
##### Security 🔒
- \[3.x] Apply Host/Origin protection settings to the SSE transport by [@​jlowin](https://github.com/jlowin) in [#​5428](https://github.com/PrefectHQ/fastmcp/pull/5428)
- \[3.x] Exclude Cookie from forwarded HTTP headers by [@​jlowin](https://github.com/jlowin) in [#​5429](https://github.com/PrefectHQ/fastmcp/pull/5429)
- \[3.x] Pass client CLI arguments literally to Windows .cmd wrappers by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5420](https://github.com/PrefectHQ/fastmcp/pull/5420)
- \[3.x] Use the server's auth provider for component manager routes by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5426](https://github.com/PrefectHQ/fastmcp/pull/5426)
- \[3.x] Bound CIMD cache growth by [@​jlowin](https://github.com/jlowin) in [#​5430](https://github.com/PrefectHQ/fastmcp/pull/5430)
- \[3.x] Include resource metadata in component manager auth challenges by [@​jlowin](https://github.com/jlowin) in [#​5435](https://github.com/PrefectHQ/fastmcp/pull/5435)
- \[3.x] Apply transforms, enabled state, and auth to hashed tool lookups by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5416](https://github.com/PrefectHQ/fastmcp/pull/5416)
- \[3.x] Build client schema types with create_model and bounded caches by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5414](https://github.com/PrefectHQ/fastmcp/pull/5414)
- \[3.x] Keep $ref pointers when inlining would produce an oversized schema by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5422](https://github.com/PrefectHQ/fastmcp/pull/5422)
- \[3.x] Resolve injected tools through the server's tool lookup by [@​jlowin](https://github.com/jlowin) in [#​5432](https://github.com/PrefectHQ/fastmcp/pull/5432)
- \[3.x] Require a startup-URL session for the fastmcp dev apps preview by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5418](https://github.com/PrefectHQ/fastmcp/pull/5418)
- \[3.x] Inline schemas whose pointers pass through alias definitions by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5439](https://github.com/PrefectHQ/fastmcp/pull/5439)
- \[3.x] OpenAPI components send only declared arguments and keep configured headers by [@​jlowin](https://github.com/jlowin) and [@​strawgate](https://github.com/strawgate) in [#​5424](https://github.com/PrefectHQ/fastmcp/pull/5424)
##### Docs 📚
- docs: add v3.4.8 changelog entries by [@​jlowin](https://github.com/jlowin) in [#​5445](https://github.com/PrefectHQ/fastmcp/pull/5445)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.7...v3.4.8>
### [`v3.4.7`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.7): : Know Your Audience
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.6...v3.4.7)
FastMCP 3.4.7 restores CIMD `private_key_jwt` authentication for OAuthProxy deployments at a bare origin. Client assertions are now validated against the exact token endpoint advertised in authorization server metadata, eliminating the doubled-slash audience mismatch.
<!-- Release notes generated using configuration in .github/release.yml at release/3.x -->
#### What's Changed
##### Security 🔒
- Backport CIMD assertion audience fix to v3 by [@​jlowin](https://github.com/jlowin) in [#​4799](https://github.com/PrefectHQ/fastmcp/pull/4799)
##### Docs 📚
- Docs: add v3.4.7 changelog entries by [@​jlowin](https://github.com/jlowin) in [#​4810](https://github.com/PrefectHQ/fastmcp/pull/4810)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.6...v3.4.7>
### [`v3.4.6`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.6): : Trust, but Proxy
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.5...v3.4.6)
FastMCP 3.4.6 backports trusted-proxy support for SSRF-protected OAuth metadata and JWKS fetches. Deployments can now route these requests through a mandated corporate proxy while preserving custom CA certificates; FastMCP refuses the fetch when no proxy is configured instead of risking an unprotected direct request.
<!-- Release notes generated using configuration in .github/release.yml at release/3.x -->
#### What's Changed
##### Fixes 🐞
- Backport [#​4412](https://github.com/PrefectHQ/fastmcp/issues/4412) to 3.x: support trusted SSRF proxies by [@​jlowin](https://github.com/jlowin) in [#​4755](https://github.com/PrefectHQ/fastmcp/pull/4755)
##### Docs 📚
- Docs: add v3.4.6 changelog entries by [@​jlowin](https://github.com/jlowin) in [#​4761](https://github.com/PrefectHQ/fastmcp/pull/4761)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.5...v3.4.6>
### [`v3.4.5`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.5): : Key Change
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.4...v3.4.5)
FastMCP 3.4.5 collects five fixes for the 3.x line. The one that prompted it: a single [`Ed25519`](https://github.com/PrefectHQ/fastmcp/commit/Ed25519) key in a JWKS — which Rauthy, Ory Hydra, and some Keycloak configurations publish by default — made `JWTVerifier` reject every token, including ones correctly signed by supported keys in the same set.
<!-- Release notes generated using configuration in .github/release.yml at release/3.x -->
#### What's Changed
##### Fixes 🐞
- Backport [#​4517](https://github.com/PrefectHQ/fastmcp/issues/4517) to release/3.x: skip unsupported JWKS keys ([#​4515](https://github.com/PrefectHQ/fastmcp/issues/4515)) by [@​kakiii](https://github.com/kakiii) in [#​4631](https://github.com/PrefectHQ/fastmcp/pull/4631)
- Backport [#​4469](https://github.com/PrefectHQ/fastmcp/issues/4469) to release/3.x: fix Azure scope fallback by [@​jlowin](https://github.com/jlowin) in [#​4662](https://github.com/PrefectHQ/fastmcp/pull/4662)
- Backport [#​4523](https://github.com/PrefectHQ/fastmcp/issues/4523) to release/3.x: serialize deep object query parameters by [@​jlowin](https://github.com/jlowin) in [#​4664](https://github.com/PrefectHQ/fastmcp/pull/4664)
- Backport [#​4564](https://github.com/PrefectHQ/fastmcp/issues/4564) to release/3.x: make transformed tool required order deterministic by [@​jlowin](https://github.com/jlowin) in [#​4665](https://github.com/PrefectHQ/fastmcp/pull/4665)
- Backport [#​4492](https://github.com/PrefectHQ/fastmcp/issues/4492) to release/3.x: don't mutate the caller's schema in compress_schema by [@​jlowin](https://github.com/jlowin) in [#​4663](https://github.com/PrefectHQ/fastmcp/pull/4663)
##### Docs 📚
- Docs: add v3.4.5 changelog entries by [@​jlowin](https://github.com/jlowin) in [#​4673](https://github.com/PrefectHQ/fastmcp/pull/4673)
#### New Contributors
- [@​kakiii](https://github.com/kakiii) made their first contribution in [#​4631](https://github.com/PrefectHQ/fastmcp/pull/4631)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.4...v3.4.5>
### [`v3.4.4`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.4): : Host in Translation
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.3...v3.4.4)
FastMCP 3.4.4 restores HTTP deployment compatibility after the 3.4.3 Host/Origin guard changed default behavior for existing ASGI, serverless, and reverse-proxy deployments. The guard implementation remains available for deployments that opt in with explicit trusted hosts and origins, while 3.x returns to accepting traffic that worked before the patch. This release also adds Hugging Face OAuth provider support, with docs and examples for public and private apps, PKCE, Dynamic Client Registration, and CIMD.
<!-- Release notes generated using configuration in .github/release.yml at release/3.x -->
#### What's Changed
##### Enhancements ✨
- Hugging Face Auth Integration by [@​evalstate](https://github.com/evalstate) in [#​4385](https://github.com/PrefectHQ/fastmcp/pull/4385)
##### Fixes 🐞
- Relax host origin guard defaults by [@​jlowin](https://github.com/jlowin) in [#​4439](https://github.com/PrefectHQ/fastmcp/pull/4439)
- Restore HTTP host guard compatibility by [@​jlowin](https://github.com/jlowin) in [#​4472](https://github.com/PrefectHQ/fastmcp/pull/4472)
##### Docs 📚
- Docs: add v3.4.4 changelog entries by [@​jlowin](https://github.com/jlowin) in [#​4473](https://github.com/PrefectHQ/fastmcp/pull/4473)
#### New Contributors
- [@​evalstate](https://github.com/evalstate) made their first contribution in [#​4385](https://github.com/PrefectHQ/fastmcp/pull/4385)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.3...v3.4.4>
### [`v3.4.3`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.3): : The Fast and the Secure-ious
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.2...v3.4.3)
FastMCP 3.4.3 closes out a month of SSRF and OAuth hardening: NAT64, 6to4, Teredo, and ISATAP transition addresses can no longer smuggle private IPv4 targets past the SSRF allow-list, Streamable HTTP now validates Host and Origin before session handling to block DNS rebinding against localhost-bound servers, and OAuth redirect validation rejects unsafe schemes and unregistered DCR redirect URIs. Alongside the security work, this release also fixes proxy session teardown races, discriminator-tag handling in JSON schema conversion, and several smaller reliability issues.
<!-- Release notes generated using configuration in .github/release.yml at main -->
#### What's Changed
##### Enhancements ✨
- Dedupe discriminator-required helper across schema converters by [@​jlowin](https://github.com/jlowin) in [#​4362](https://github.com/PrefectHQ/fastmcp/pull/4362)
- Add real Monty sandbox e2e coverage for CodeMode call_tool by [@​AlexlaGuardia](https://github.com/AlexlaGuardia) in [#​4274](https://github.com/PrefectHQ/fastmcp/pull/4274)
- Switch prettier hook to rbubley/mirrors-prettier by [@​jlowin](https://github.com/jlowin) in [#​4366](https://github.com/PrefectHQ/fastmcp/pull/4366)
- feat(remote): add --verify flag for TLS certificate verification by [@​jlowin](https://github.com/jlowin) in [#​4369](https://github.com/PrefectHQ/fastmcp/pull/4369)
##### Security 🔒
- fix(deps): clear Dependabot security alerts via lockfile bumps by [@​jlowin](https://github.com/jlowin) in [#​4393](https://github.com/PrefectHQ/fastmcp/pull/4393)
- Clarify resource path parameter safety by [@​jlowin](https://github.com/jlowin) in [#​4398](https://github.com/PrefectHQ/fastmcp/pull/4398)
- Fix dev apps launch escaping by [@​jlowin](https://github.com/jlowin) in [#​4399](https://github.com/PrefectHQ/fastmcp/pull/4399)
- Block NAT64 SSRF bypass by [@​jlowin](https://github.com/jlowin) in [#​4400](https://github.com/PrefectHQ/fastmcp/pull/4400)
- \[codex] Fix event store replay isolation by [@​jlowin](https://github.com/jlowin) in [#​4402](https://github.com/PrefectHQ/fastmcp/pull/4402)
- Fix DCR redirect URI validation by [@​jlowin](https://github.com/jlowin) in [#​4408](https://github.com/PrefectHQ/fastmcp/pull/4408)
- Protect streamable HTTP from DNS rebinding by [@​jlowin](https://github.com/jlowin) in [#​4405](https://github.com/PrefectHQ/fastmcp/pull/4405)
- Block unsafe OAuth redirect schemes by [@​jlowin](https://github.com/jlowin) in [#​4419](https://github.com/PrefectHQ/fastmcp/pull/4419)
- Block IPv6 transition SSRF bypasses by [@​jlowin](https://github.com/jlowin) in [#​4426](https://github.com/PrefectHQ/fastmcp/pull/4426)
##### Fixes 🐞
- fix: caching middleware TypeError on cache miss due to mismatched call_next parameter by [@​gmenziesint](https://github.com/gmenziesint) in [#​4301](https://github.com/PrefectHQ/fastmcp/pull/4301)
- Fix: async rate limiting middleware get_client_id callbacks by [@​Chotom](https://github.com/Chotom) in [#​4319](https://github.com/PrefectHQ/fastmcp/pull/4319)
- Recognize all GitHub issue-link forms in require-issue-link workflow by [@​jlowin](https://github.com/jlowin) in [#​4359](https://github.com/PrefectHQ/fastmcp/pull/4359)
- fix: preserve required discriminator tags by [@​he-yufeng](https://github.com/he-yufeng) in [#​4297](https://github.com/PrefectHQ/fastmcp/pull/4297)
- fix(proxy): shield stateful proxy disconnect during session teardown by [@​jlowin](https://github.com/jlowin) in [#​4363](https://github.com/PrefectHQ/fastmcp/pull/4363)
- fix(fs): isolate same-named package imports across providers by [@​jlowin](https://github.com/jlowin) in [#​4361](https://github.com/PrefectHQ/fastmcp/pull/4361)
- fix: StatefulProxyClient.clear() no longer causes KeyError on session teardown by [@​tcconnally](https://github.com/tcconnally) in [#​4328](https://github.com/PrefectHQ/fastmcp/pull/4328)
- fix: guard recursive refs in json_schema_to_type by [@​Epochex](https://github.com/Epochex) in [#​4312](https://github.com/PrefectHQ/fastmcp/pull/4312)
- Forward IdP auth errors to MCP client instead of showing HTML error page by [@​bobbyjames839](https://github.com/bobbyjames839) in [#​4293](https://github.com/PrefectHQ/fastmcp/pull/4293)
- fix(resources): round-trip path values with reserved characters in URI templates by [@​jlowin](https://github.com/jlowin) in [#​4368](https://github.com/PrefectHQ/fastmcp/pull/4368)
- fix: bracket IPv6 hosts in server startup log URL by [@​jlowin](https://github.com/jlowin) in [#​4372](https://github.com/PrefectHQ/fastmcp/pull/4372)
- fix: bound default OIDC discovery timeout and expose it on provider wrappers by [@​jlowin](https://github.com/jlowin) in [#​4374](https://github.com/PrefectHQ/fastmcp/pull/4374)
- fix: validate task tool arguments against declared types by [@​jlowin](https://github.com/jlowin) in [#​4373](https://github.com/PrefectHQ/fastmcp/pull/4373)
- fix(tools): honor serialize_by_alias in tool result serialization by [@​jlowin](https://github.com/jlowin) in [#​4391](https://github.com/PrefectHQ/fastmcp/pull/4391)
- Fix/cimd flow issue by [@​twjackysu](https://github.com/twjackysu) in [#​4206](https://github.com/PrefectHQ/fastmcp/pull/4206)
- Reject empty env var keys by [@​CodingFeng101](https://github.com/CodingFeng101) in [#​4410](https://github.com/PrefectHQ/fastmcp/pull/4410)
- fix: correct replace_type docstring parameter descriptions by [@​hiSandog](https://github.com/hiSandog) in [#​4375](https://github.com/PrefectHQ/fastmcp/pull/4375)
- Fix ty 0.0.55 diagnostics and prefab-ui protocol version drift by [@​jlowin](https://github.com/jlowin) in [#​4428](https://github.com/PrefectHQ/fastmcp/pull/4428)
- \[codex] Fix OpenAPI resource template requests by [@​jlowin](https://github.com/jlowin) in [#​4407](https://github.com/PrefectHQ/fastmcp/pull/4407)
##### Docs 📚
- fix: RST docstrings in fastmcp.types render raw on gofastmcp.com by [@​jlowin](https://github.com/jlowin) in [#​4367](https://github.com/PrefectHQ/fastmcp/pull/4367)
- docs: fix 5 broken internal links (auth & providers pages) by [@​Michael-WhiteCapData](https://github.com/Michael-WhiteCapData) in [#​4344](https://github.com/PrefectHQ/fastmcp/pull/4344)
- docs: add audit/event-record recipe for tool-call middleware by [@​AlexlaGuardia](https://github.com/AlexlaGuardia) in [#​4345](https://github.com/PrefectHQ/fastmcp/pull/4345)
##### Dependencies 📦
- chore(deps): bump actions/checkout from 6 to 7 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​4343](https://github.com/PrefectHQ/fastmcp/pull/4343)
- chore(deps): bump joserfc from 1.6.5 to 1.6.7 in the uv group across 1 directory by [@​dependabot](https://github.com/dependabot)\[bot] in [#​4394](https://github.com/PrefectHQ/fastmcp/pull/4394)
- chore(deps): bump joserfc from 1.6.7 to 1.6.8 in the uv group across 1 directory by [@​dependabot](https://github.com/dependabot)\[bot] in [#​4429](https://github.com/PrefectHQ/fastmcp/pull/4429)
##### Other Changes 🦾
- Raise fastmcp.ValidationError for invalid tool arguments by [@​jlowin](https://github.com/jlowin) in [#​4392](https://github.com/PrefectHQ/fastmcp/pull/4392)
- Fix versioned auth middleware checks by [@​jlowin](https://github.com/jlowin) in [#​4401](https://github.com/PrefectHQ/fastmcp/pull/4401)
- Docs: add v3.4.2 and v3.4.3 changelog entries by [@​jlowin](https://github.com/jlowin) in [#​4430](https://github.com/PrefectHQ/fastmcp/pull/4430)
#### New Contributors
- [@​gmenziesint](https://github.com/gmenziesint) made their first contribution in [#​4301](https://github.com/PrefectHQ/fastmcp/pull/4301)
- [@​Chotom](https://github.com/Chotom) made their first contribution in [#​4319](https://github.com/PrefectHQ/fastmcp/pull/4319)
- [@​he-yufeng](https://github.com/he-yufeng) made their first contribution in [#​4297](https://github.com/PrefectHQ/fastmcp/pull/4297)
- [@​AlexlaGuardia](https://github.com/AlexlaGuardia) made their first contribution in [#​4274](https://github.com/PrefectHQ/fastmcp/pull/4274)
- [@​tcconnally](https://github.com/tcconnally) made their first contribution in [#​4328](https://github.com/PrefectHQ/fastmcp/pull/4328)
- [@​Epochex](https://github.com/Epochex) made their first contribution in [#​4312](https://github.com/PrefectHQ/fastmcp/pull/4312)
- [@​Michael-WhiteCapData](https://github.com/Michael-WhiteCapData) made their first contribution in [#​4344](https://github.com/PrefectHQ/fastmcp/pull/4344)
- [@​bobbyjames839](https://github.com/bobbyjames839) made their first contribution in [#​4293](https://github.com/PrefectHQ/fastmcp/pull/4293)
- [@​twjackysu](https://github.com/twjackysu) made their first contribution in [#​4206](https://github.com/PrefectHQ/fastmcp/pull/4206)
- [@​CodingFeng101](https://github.com/CodingFeng101) made their first contribution in [#​4410](https://github.com/PrefectHQ/fastmcp/pull/4410)
- [@​hiSandog](https://github.com/hiSandog) made their first contribution in [#​4375](https://github.com/PrefectHQ/fastmcp/pull/4375)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.2...v3.4.3>
### [`v3.4.2`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.2): : Heads Up
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.1...v3.4.2)
FastMCP 3.4.2 restores JWT compatibility for providers that include private, non-critical JWS header parameters. Tokens from providers like Clerk can carry header metadata such as `cat` without being rejected before signature and claim validation, while unsupported critical headers are still rejected.
<!-- Release notes generated using configuration in .github/release.yml at main -->
#### What's Changed
##### Fixes 🐞
- Allow private JWT headers by [@​jlowin](https://github.com/jlowin) in [#​4290](https://github.com/PrefectHQ/fastmcp/pull/4290)
##### Docs 📚
- Docs: add v3.4.1 changelog entries by [@​jlowin](https://github.com/jlowin) in [#​4289](https://github.com/PrefectHQ/fastmcp/pull/4289)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.1...v3.4.2>
### [`v3.4.1`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.1): : Floor It
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.4.0...v3.4.1)
FastMCP 3.4.1 floors Starlette at `>=1.0.1` so installs can no longer resolve to a version affected by CVE-2026-48710 — previously the dependency was only constrained transitively through `mcp`, which allowed vulnerable versions. It also makes OAuthProxy log refresh-token cache misses instead of failing silently.
<!-- Release notes generated using configuration in .github/release.yml at main -->
#### What's Changed
##### Enhancements ✨
- Log refresh-token misses in OAuthProxy instead of failing silently by [@​jlowin](https://github.com/jlowin) in [#​4276](https://github.com/PrefectHQ/fastmcp/pull/4276)
##### Security 🔒
- Add explicit starlette>=1.0.1 floor (CVE-2026-48710) by [@​jlowin](https://github.com/jlowin) in [#​4286](https://github.com/PrefectHQ/fastmcp/pull/4286)
##### Docs 📚
- Document --notes-start-tag in release instructions by [@​jlowin](https://github.com/jlowin) in [#​4275](https://github.com/PrefectHQ/fastmcp/pull/4275)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.4.0...v3.4.1>
### [`v3.4.0`](https://github.com/PrefectHQ/fastmcp/releases/tag/v3.4.0): : Remote Control
[Compare Source](https://github.com/PrefectHQ/fastmcp/compare/v3.3.1...v3.4.0)
FastMCP 3.4 is about reaching servers that live somewhere else. The headline is `fastmcp-remote`, a standalone bridge that connects stdio-only MCP hosts to servers hosted over HTTP. Around it, this release hardens the proxy layer those remote connections depend on — making bridges fail loudly instead of silently, and keeping authenticated sessions alive across the long idle periods that remote clients are prone to.
#### fastmcp-remote
Some MCP hosts still insist on launching a local stdio command, even when the server you want is already running over HTTP. FastMCP could already proxy a remote URL through `fastmcp run`, but that pulls in the full server-runner surface. `fastmcp-remote` is the small, single-purpose version: one URL in, one local stdio proxy out.
```json
{
"mcpServers": {
"linear": {
"command": "uvx",
"args": ["fastmcp-remote", "https://mcp.linear.app/mcp"]
}
}
}
```
OAuth is enabled automatically for HTTPS servers, with support for explicit bearer tokens and custom headers when you need them. The implementation stays on FastMCP primitives — `Client`, OAuth, `create_proxy`, and stdio — and credits the original npm `mcp-remote` project for the command shape.
#### Bridges That Fail Loudly
Proxies are lazy bridges: they don't touch the upstream server during construction, but they do forward real MCP requests once a client connects. As of 3.4, `initialize` is part of that forwarded surface — so a proxy only reports a successful handshake after the upstream server initializes too. A missing backend, a wrong URL (the server root instead of `/mcp`), denied upstream auth, or a non-MCP upstream now fails the downstream `initialize` instead of producing a "connected" proxy whose capability fetches quietly come back empty. The proxy also forwards `ping` upstream now.
This is an intentional behavior change from 3.3, and the reason bridge callers like `fastmcp-remote` surface real upstream failures instead of degrading into empty tool lists.
#### Auth That Survives Idle Time
Remote sessions sit idle, and short-lived upstream tokens punish that. `fastmcp_access_token_expiry_seconds` decouples the FastMCP-issued token's lifetime from the upstream `expires_in` — the FastMCP token is just a reference into proxy storage, re-validated and transparently refreshed on every request, so it can safely outlive a 5-minute upstream token without forcing a full OAuth flow after every idle period. When the upstream issues no refresh token, the lifetime is capped to match.
```python
from fastmcp.server.auth.providers.github import GitHubProvider
auth = GitHubProvider(
client_id="...",
client_secret="...",
base_url="https://your-server.com",
fastmcp_access_token_expiry_seconds=60 * 60 * 24, # 24h client-facing token
)
```
Alongside it, `token_expiry_threshold_seconds` treats tokens as expired N seconds early to close refresh races, and `WorkOSProvider` gains `valid_scopes` and `extra_authorize_params`.
#### Returnable Tool Errors
A tool could previously only signal an error by raising, which flattens to a text-only result and discards structured content. `ToolResult` now accepts `is_error`, mapping to `CallToolResult.isError` so a tool can hand back a rich error the model can see and act on. The proxy uses this to forward upstream tool errors intact instead of collapsing them.
```python
@mcp.tool
def lookup(id: str) -> ToolResult:
if not found(id):
return ToolResult(
content="not found",
structured_content={"code": 404, "id": id},
is_error=True,
)
...
```
#### Code Mode: Safe by Default
`MontySandboxProvider()` now applies a conservative baseline when constructed without limits — 30s duration, 100 MB memory — and `CodeMode` caps tool calls at 50 per `execute` block. Both remain explicitly opt-out (`limits=None`, `max_tool_calls=None`), so the safe configuration is the default instead of something you had to remember to turn on.
#### Under the Hood
The auth stack migrated its JWT handling to `joserfc`. The `fastmcp` dev CLI gains `--host` and `--log-panel`/`--no-log-panel`. Resources created from templates now preserve annotations, meta, title, and icons; resource templates with query params work on proxied servers; OTEL spans cover the sampling step and tool execution; MCP config files are read as UTF-8; and the OAuth server metadata endpoint now answers at the `/.well-known/openid-configuration` alias.
8 new contributors this release.
<!-- Release notes generated using configuration in .github/release.yml at main -->
#### What's Changed
##### New Features 🎉
- Add fastmcp-remote bridge package by [@​jlowin](https://github.com/jlowin) in [#​4208](https://github.com/PrefectHQ/fastmcp/pull/4208)
##### Breaking Changes ⚠️
- Forward proxy initialize as bridge behavior by [@​jlowin](https://github.com/jlowin) in [#​4228](https://github.com/PrefectHQ/fastmcp/pull/4228)
##### Enhancements ✨
- ci: require external PRs to link a tracked issue by [@​strawgate](https://github.com/strawgate) in [#​4173](https://github.com/PrefectHQ/fastmcp/pull/4173)
- feat: new options --host and --no-log-panel | --log-panel to cli dev apps by [@​itaru2622](https://github.com/itaru2622) in [#​4123](https://github.com/PrefectHQ/fastmcp/pull/4123)
- Add valid_scopes and extra_authorize_params to WorkOSProvider by [@​tiagoskaneta](https://github.com/tiagoskaneta) in [#​4135](https://github.com/PrefectHQ/fastmcp/pull/4135)
- Add token_expiry_threshold_seconds for proactive token refresh by [@​mohankumarelec](https://github.com/mohankumarelec) in [#​4142](https://github.com/PrefectHQ/fastmcp/pull/4142)
- Add review-issue skill for triaging gated external contributions by [@​jlowin](https://github.com/jlowin) in [#​4212](https://github.com/PrefectHQ/fastmcp/pull/4212)
- Add contract gate to review-issue skill by [@​jlowin](https://github.com/jlowin) in [#​4214](https://github.com/PrefectHQ/fastmcp/pull/4214)
- Let ToolResult return an error result via is_error by [@​jlowin](https://github.com/jlowin) in [#​4217](https://github.com/PrefectHQ/fastmcp/pull/4217)
- Update published docs after PyPI release by [@​jlowin](https://github.com/jlowin) in [#​4211](https://github.com/PrefectHQ/fastmcp/pull/4211)
- Allow pre-bound HTTP sockets by [@​jlowin](https://github.com/jlowin) in [#​4222](https://github.com/PrefectHQ/fastmcp/pull/4222)
- Add targeted coverage tests by [@​strawgate](https://github.com/strawgate) in [#​4230](https://github.com/PrefectHQ/fastmcp/pull/4230)
- Upgrade ty to 0.0.39 by [@​jlowin](https://github.com/jlowin) in [#​4225](https://github.com/PrefectHQ/fastmcp/pull/4225)
- Decouple FastMCP access token lifetime from upstream expires_in by [@​jlowin](https://github.com/jlowin) in [#​4254](https://github.com/PrefectHQ/fastmcp/pull/4254)
##### Security 🔒
- feat(code-mode): default sandbox limits and per-execution tool-call cap by [@​strawgate](https://github.com/strawgate) in [#​4170](https://github.com/PrefectHQ/fastmcp/pull/4170)
- Security: Fix 3 findings in GitHub Actions workflows by [@​jpr5](https://github.com/jpr5) in [#​4183](https://github.com/PrefectHQ/fastmcp/pull/4183)
- Add outbound comment guardrails by [@​jlowin](https://github.com/jlowin) in [#​4196](https://github.com/PrefectHQ/fastmcp/pull/4196)
- Add uv dependency cooldown by [@​jlowin](https://github.com/jlowin) in [#​4213](https://github.com/PrefectHQ/fastmcp/pull/4213)
##### Fixes 🐞
- fix: VersionSpec eq matching normalizes versions and selects deterministically by [@​strawgate](https://github.com/strawgate) in [#​4058](https://github.com/PrefectHQ/fastmcp/pull/4058)
- fix(tests): hoist azure-identity import out of the OBO test timeout window by [@​strawgate](https://github.com/strawgate) in [#​4176](https://github.com/PrefectHQ/fastmcp/pull/4176)
- fix(auth): disambiguate auth-denied vs missing component messages by [@​strawgate](https://github.com/strawgate) in [#​4165](https://github.com/PrefectHQ/fastmcp/pull/4165)
- fix: preserve annotations, meta, title, icons when creating resources from templates by [@​strawgate](https://github.com/strawgate) in [#​4061](https://github.com/PrefectHQ/fastmcp/pull/4061)
- fix: add OTEL spans to sampling step and tool execution by [@​strawgate](https://github.com/strawgate) in [#​4059](https://github.com/PrefectHQ/fastmcp/pull/4059)
- fix(config): read MCP config files as UTF-8 by [@​pragnyanramtha](https://github.com/pragnyanramtha) in [#​4164](https://github.com/PrefectHQ/fastmcp/pull/4164)
- fix(schema): preserve root metadata on fallback by [@​yuyua9](https://github.com/yuyua9) in [#​4178](https://github.com/PrefectHQ/fastmcp/pull/4178)
- fix(proxy): restore \_current_server in \_restore_request_context by [@​strawgate](https://github.com/strawgate) in [#​4168](https://github.com/PrefectHQ/fastmcp/pull/4168)
- fix(auth): add /.well-known/openid-configuration alias for OAuth server metadata by [@​shigechika](https://github.com/shigechika) in [#​4167](https://github.com/PrefectHQ/fastmcp/pull/4167)
- fix(code-mode): cancel Monty sandbox future on task cancellation by [@​strawgate](https://github.com/strawgate) in [#​4169](https://github.com/PrefectHQ/fastmcp/pull/4169)
- fix(auth): unprefix Azure scopes echoed back to MCP clients by [@​rgillinlz](https://github.com/rgillinlz) in [#​4130](https://github.com/PrefectHQ/fastmcp/pull/4130)
- fix(cli): forward stateless flag in uv run path by [@​yuyua9](https://github.com/yuyua9) in [#​4177](https://github.com/PrefectHQ/fastmcp/pull/4177)
- fix(ci): scope minimize-reviews concurrency by event name by [@​strawgate](https://github.com/strawgate) in [#​4174](https://github.com/PrefectHQ/fastmcp/pull/4174)
- Fix docs app demo iframe assets by [@​jlowin](https://github.com/jlowin) in [#​4194](https://github.com/PrefectHQ/fastmcp/pull/4194)
- Guard require-issue-link check job to pull_request_target events by [@​jlowin](https://github.com/jlowin) in [#​4209](https://github.com/PrefectHQ/fastmcp/pull/4209)
- Migrate auth JWTs to joserfc by [@​jlowin](https://github.com/jlowin) in [#​4221](https://github.com/PrefectHQ/fastmcp/pull/4221)
- Skip published docs update for prereleases by [@​jlowin](https://github.com/jlowin) in [#​4224](https://github.com/PrefectHQ/fastmcp/pull/4224)
- Surface proxy upstream failures by [@​jlowin](https://github.com/jlowin) in [#​4227](https://github.com/PrefectHQ/fastmcp/pull/4227)
- Close upstream OAuth clients by [@​jlowin](https://github.com/jlowin) in [#​4248](https://github.com/PrefectHQ/fastmcp/pull/4248)
- Fix GitHub MCP resource integration test by [@​jlowin](https://github.com/jlowin) in [#​4253](https://github.com/PrefectHQ/fastmcp/pull/4253)
- Fix resource templates with query params on proxied servers by [@​rene84](https://github.com/rene84) in [#​4251](https://github.com/PrefectHQ/fastmcp/pull/4251)
- Fix MDX syntax error in changelog by [@​jlowin](https://github.com/jlowin) in [#​4270](https://github.com/PrefectHQ/fastmcp/pull/4270)
##### Docs 📚
- Document pip upgrade recovery for the fastmcp-slim package split by [@​jlowin](https://github.com/jlowin) in [#​4215](https://github.com/PrefectHQ/fastmcp/pull/4215)
- Move pip upgrade recovery into a Troubleshooting section by [@​jlowin](https://github.com/jlowin) in [#​4219](https://github.com/PrefectHQ/fastmcp/pull/4219)
- Restore Horizon docs banner by [@​jlowin](https://github.com/jlowin) in [#​4240](https://github.com/PrefectHQ/fastmcp/pull/4240)
- fix: Trendshift link and badge in README.md by [@​bhantos](https://github.com/bhantos) in [#​4236](https://github.com/PrefectHQ/fastmcp/pull/4236)
- docs: add tool fingerprinting recipe by [@​dgenio](https://github.com/dgenio) in [#​4233](https://github.com/PrefectHQ/fastmcp/pull/4233)
- Backfill changelog and updates through v3.4.0 by [@​jlowin](https://github.com/jlowin) in [#​4269](https://github.com/PrefectHQ/fastmcp/pull/4269)
##### Dependencies 📦
- chore(deps): bump the uv group across 2 directories with 1 update by [@​dependabot](https://github.com/dependabot)\[bot] in [#​4113](https://github.com/PrefectHQ/fastmcp/pull/4113)
- chore(deps-dev): bump pydantic-monty from 0.0.16 to 0.0.17 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​4023](https://github.com/PrefectHQ/fastmcp/pull/4023)
##### Other Changes 🦾
- Exempt maintainers from MRE auto-close by [@​jlowin](https://github.com/jlowin) in [#​4220](https://github.com/PrefectHQ/fastmcp/pull/4220)
#### New Contributors
- [@​pragnyanramtha](https://github.com/pragnyanramtha) made their first contribution in [#​4164](https://github.com/PrefectHQ/fastmcp/pull/4164)
- [@​yuyua9](https://github.com/yuyua9) made their first contribution in [#​4178](https://github.com/PrefectHQ/fastmcp/pull/4178)
- [@​tiagoskaneta](https://github.com/tiagoskaneta) made their first contribution in [#​4135](https://github.com/PrefectHQ/fastmcp/pull/4135)
- [@​mohankumarelec](https://github.com/mohankumarelec) made their first contribution in [#​4142](https://github.com/PrefectHQ/fastmcp/pull/4142)
- [@​rgillinlz](https://github.com/rgillinlz) made their first contribution in [#​4130](https://github.com/PrefectHQ/fastmcp/pull/4130)
- [@​jpr5](https://github.com/jpr5) made their first contribution in [#​4183](https://github.com/PrefectHQ/fastmcp/pull/4183)
- [@​bhantos](https://github.com/bhantos) made their first contribution in [#​4236](https://github.com/PrefectHQ/fastmcp/pull/4236)
- [@​rene84](https://github.com/rene84) made their first contribution in [#​4251](https://github.com/PrefectHQ/fastmcp/pull/4251)
**Full Changelog**: <https://github.com/PrefectHQ/fastmcp/compare/v3.3.1...v3.4.0>
</details>
<details>
<summary>python-greenlet/greenlet (greenlet)</summary>
### [`v3.5.6`](https://github.com/python-greenlet/greenlet/blob/HEAD/CHANGES.rst#356-2026-09-14)
[Compare Source](https://github.com/python-greenlet/greenlet/compare/3.5.5...3.5.6)
\==================
- Correct a race condition that could lead to garbage collection
unintentionally being disabled. See `PR 529 <https://github.com/python-greenlet/greenlet/pull/529>`\_ by Yurii.
### [`v3.5.5`](https://github.com/python-greenlet/greenlet/blob/HEAD/CHANGES.rst#355-2026-08-10)
[Compare Source](https://github.com/python-greenlet/greenlet/compare/3.5.4...3.5.5)
\==================
- Link the C++ runtime statically into the Windows wheels again, as the
Appveyor builds did through 3.3.0. Since 3.3.1 `_greenlet.pyd`
imported `MSVCP140.dll`, which no Windows CPython distribution ships,
so importing greenlet failed on machines without the Visual C++
redistributable. See `issue 525 <https://github.com/python-greenlet/greenlet/issues/525>`\_. Issue
and pull request by Daniel Sticker.
.. note::
Binary 3.15 wheels are now built with 3.15.0rc1. This should be
compatible with future 3.15 releases and is believed compatible
with 3.15b4 as well (but not earlier versions).
### [`v3.5.4`](https://github.com/python-greenlet/greenlet/blob/HEAD/CHANGES.rst#354-2026-07-22)
[Compare Source](https://github.com/python-greenlet/greenlet/compare/3.5.3...3.5.4)
\==================
- Fix a crash (segfault) on free-threaded builds of Python 3.14 and
later when the garbage collector runs while a greenlet that was
started from a non-empty C-stack-reference state is active.
See `issue 515 <https://github.com/python-greenlet/greenlet/issues/515>`\_.
Thanks to ddorian and Kumar Aditya.
- Fix a potential use-after-free on free-threaded builds of Python 3.14
and later when the garbage collector runs while a greenlet is
suspended holding a `_PyCStackRef` (for example, mid attribute
resolution). See
`issue 515 <https://github.com/python-greenlet/greenlet/issues/515>`\_.
Thanks to ddorian and Kumar Aditya.
- Fix a deadlock on free-threaded builds when a greenlet switch happened
while a `PyCriticalSection` was held -- for example inside asyncio's
`Task.__step`, which holds one on the running task for the duration of
the step. See `PR 519 <https://github.com/python-greenlet/greenlet/pull/519/>`.
Thanks to ddorian and Kumar Aditya.
.. note::
Binary 3.15 wheels are now built with Python 3.15b4. These may not
be compatible with earlier or later versions of 3.15. Binary
3.15 wheels of greenlet from previous releases (e.g., 3.5.3)
may not be compatible with Python 3.15b4.
### [`v3.5.3`](https://github.com/python-greenlet/greenlet/blob/HEAD/CHANGES.rst#354-2026-07-22)
[Compare Source](https://github.com/python-greenlet/greenlet/compare/3.5.2...3.5.3)
\==================
- Fix a crash (segfault) on free-threaded builds of Python 3.14 and
later when the garbage collector runs while a greenlet that was
started from a non-empty C-stack-reference state is active.
See `issue 515 <https://github.com/python-greenlet/greenlet/issues/515>`\_.
Thanks to ddorian and Kumar Aditya.
- Fix a potential use-after-free on free-threaded builds of Python 3.14
and later when the garbage collector runs while a greenlet is
suspended holding a `_PyCStackRef` (for example, mid attribute
resolution). See
`issue 515 <https://github.com/python-greenlet/greenlet/issues/515>`\_.
Thanks to ddorian and Kumar Aditya.
- Fix a deadlock on free-threaded builds when a greenlet switch happened
while a `PyCriticalSection` was held -- for example inside asyncio's
`Task.__step`, which holds one on the running task for the duration of
the step. See `PR 519 <https://github.com/python-greenlet/greenlet/pull/519/>`.
Thanks to ddorian and Kumar Aditya.
.. note::
Binary 3.15 wheels are now built with Python 3.15b4. These may not
be compatible with earlier or later versions of 3.15. Binary
3.15 wheels of greenlet from previous releases (e.g., 3.5.3)
may not be compatible with Python 3.15b4.
### [`v3.5.2`](https://github.com/python-greenlet/greenlet/blob/HEAD/CHANGES.rst#352-2026-06-17)
[Compare Source](https://github.com/python-greenlet/greenlet/compare/3.5.1...3.5.2)
\==================
- The minimum supported version of Python 3.15 is now 3.15b2.
- Fix some garbage-collection related crashes on free-threaded Python
3.15. Thanks to Kumar Aditya in `PR #​511 <https://github.com/python-greenlet/greenlet/pull/511>`\_.
- Improve garbage collection of greenlets. This mostly applies to
Python 3.15. Thanks to Kumar Aditya in `PR #​512 <https://github.com/python-greenlet/greenlet/pull/512>`\_.
</details>
<details>
<summary>KurimuzonAkuma/pyrogram (kurigram)</summary>
### [`v2.2.26`](https://github.com/kurigram-org/kurigram/releases/tag/v2.2.26)
[Compare Source](https://github.com/KurimuzonAkuma/pyrogram/compare/v2.2.25...v2.2.26)
#### What's Changed
- fix: docstrings for send_paid_media and send_web_page by [@​penggrin12](https://github.com/penggrin12) in [kurigram-org/kurigram#329](https://github.com/kurigram-org/kurigram/pull/329)
- refactor: plugin loading handler existence checks by [@​itisFarzin](https://github.com/itisFarzin) in [kurigram-org/kurigram#135](https://github.com/kurigram-org/kurigram/pull/135)
- feat(proxy): add WEB proxy support with `WINDOW` flow control and per-kind proxy types by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#364](https://github.com/kurigram-org/kurigram/pull/364)
- feat(proxy): add classic MTProxy support with fake-TLS (`ee`) secrets by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#365](https://github.com/kurigram-org/kurigram/pull/365)
- chore(lint): add a `ruff` check, run from `make lint` in CI and `pre-commit` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#366](https://github.com/kurigram-org/kurigram/pull/366)
- ci(build): run the unit suite in CI and fix its failures below 3.12 by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#371](https://github.com/kurigram-org/kurigram/pull/371)
- refactor(tests): put every test under `tests/unit` or `tests/integrations` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#372](https://github.com/kurigram-org/kurigram/pull/372)
- fix(typing): accept a built `JsonValue` in `init_connection_params` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#367](https://github.com/kurigram-org/kurigram/pull/367)
- fix(typing): `Message.topic` also holds a `DirectMessagesTopic` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#368](https://github.com/kurigram-org/kurigram/pull/368)
- fix(typing): drop `Optional` from two `_parse()` helpers that always return an object by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#369](https://github.com/kurigram-org/kurigram/pull/369)
- fix(typing): reword the comment `mypy` reads as a `# type:` comment by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#370](https://github.com/kurigram-org/kurigram/pull/370)
- fix(filters): let the chat filters see `MessageGenerationStopped` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#374](https://github.com/kurigram-org/kurigram/pull/374)
- fix(upload): raise the failure that `save_file()` used to log and hide by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#373](https://github.com/kurigram-org/kurigram/pull/373)
- fix(typing): keep the callback signature that the handler decorators erased by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#376](https://github.com/kurigram-org/kurigram/pull/376)
- fix(users): give `None` back from `get_users()` when the id belongs to no user by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#378](https://github.com/kurigram-org/kurigram/pull/378)
- fix(invite_links): stop `get_chat_admins_with_invite_links()` handing `types.List` an async generator by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#379](https://github.com/kurigram-org/kurigram/pull/379)
- fix(typing): annotate the return of the 45 public methods that document one by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#377](https://github.com/kurigram-org/kurigram/pull/377)
- chore(comments): drop the `NOTE:` prefix and the dashes standing in for punctuation by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#380](https://github.com/kurigram-org/kurigram/pull/380)
- fix(docs): point the dead Sphinx cross-references at names that exist by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#383](https://github.com/kurigram-org/kurigram/pull/383)
- fix(filters): read the sender and sender chat the remaining update types already carry by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#381](https://github.com/kurigram-org/kurigram/pull/381)
- feat: update message bound methods params by [@​asadofc](https://github.com/asadofc) in [kurigram-org/kurigram#385](https://github.com/kurigram-org/kurigram/pull/385)
- fix(typing): default `effect_id` and `is_enabled` to `None`, not to the `NoneType` class by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#390](https://github.com/kurigram-org/kurigram/pull/390)
- feat(message): accept the target's remaining parameters in the `reply_*`/`answer_*` shortcuts by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#391](https://github.com/kurigram-org/kurigram/pull/391)
- fix(typing): stream_media return type annotation to AsyncGenerator by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#387](https://github.com/kurigram-org/kurigram/pull/387)
- fix(typing): annotate the async generators as `AsyncGenerator[T, None]`, not `AsyncIterator[T]` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#392](https://github.com/kurigram-org/kurigram/pull/392)
- fix: dispatcher TypeError when user typing update parser returns None by [@​AnonymousX1025](https://github.com/AnonymousX1025) in [kurigram-org/kurigram#384](https://github.com/kurigram-org/kurigram/pull/384)
- test(docs): fail when a cross-reference label is not a suffix of its target by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#395](https://github.com/kurigram-org/kurigram/pull/395)
- fix(keyboards): send `KeyboardInlineButtonRow` in `ReplyInlineMarkup` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#396](https://github.com/kurigram-org/kurigram/pull/396)
- fix(plugins): read `handlers` only when it is a list of handler pairs by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#397](https://github.com/kurigram-org/kurigram/pull/397)
- fix(session): await the tasks `stop()` spawned instead of orphaning them by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#398](https://github.com/kurigram-org/kurigram/pull/398)
- fix(session): keep a queued `restart()` from reconnecting a stopped session by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#399](https://github.com/kurigram-org/kurigram/pull/399)
- fix(types): make `repr()` of a `List` work for items that are not `Object`s by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#401](https://github.com/kurigram-org/kurigram/pull/401)
- fix(typing): declare what `save_file()` and `InputChatPhoto.write()` actually return by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#403](https://github.com/kurigram-org/kurigram/pull/403)
- fix(decorators): register the plugin handlers an unbound `@Client.on_*()` call declares by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#402](https://github.com/kurigram-org/kurigram/pull/402)
- fix(typing): name the types the seven dead annotations were meant to name by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#404](https://github.com/kurigram-org/kurigram/pull/404)
- fix(types): make the three update types that reach a handler `Update`s by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#405](https://github.com/kurigram-org/kurigram/pull/405)
- fix(upload): annotate `self` on the `save_file()` overloads as the implementation does by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#410](https://github.com/kurigram-org/kurigram/pull/410)
- chore(typing): introduce ty static type checking, fix diagnostics incrementally by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#394](https://github.com/kurigram-org/kurigram/pull/394)
- feat(deps): declare optional qrcode extra by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#408](https://github.com/kurigram-org/kurigram/pull/408)
- fix(typing): drop `Optional` where the default rules out `None` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#412](https://github.com/kurigram-org/kurigram/pull/412)
- docs(contributing): add setup, workflow, and review-derived conventions by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#406](https://github.com/kurigram-org/kurigram/pull/406)
- refactor(tests): give the whole-tree sweeps their own `tests/guards` layer by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#413](https://github.com/kurigram-org/kurigram/pull/413)
- refactor(tests): name every client double `FakeClient` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#414](https://github.com/kurigram-org/kurigram/pull/414)
- chore(build): move the toolchain onto `uv`, dropping the hand-built `venv` and `hatch` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#415](https://github.com/kurigram-org/kurigram/pull/415)
- chore(deps): replace every `<=` ceiling with a tested `>=` floor by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#419](https://github.com/kurigram-org/kurigram/pull/419)
- ci(deps): run the suite at both ends of every dependency range by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#420](https://github.com/kurigram-org/kurigram/pull/420)
- chore(python): raise the floor to `3.10`, dropping `3.8` and `3.9` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#421](https://github.com/kurigram-org/kurigram/pull/421)
- chore(metadata): list a second maintainer by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#422](https://github.com/kurigram-org/kurigram/pull/422)
- refactor(typing): adopt the builtin generics and defer every annotation by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#424](https://github.com/kurigram-org/kurigram/pull/424)
- test(guards): sweep the suite and the compilers for the future import, not only the package by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#425](https://github.com/kurigram-org/kurigram/pull/425)
- chore(ruff): format the whole tree at 100 columns and gate the formatter by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#426](https://github.com/kurigram-org/kurigram/pull/426)
- chore(lint): enable the rule families the tree already passes by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#427](https://github.com/kurigram-org/kurigram/pull/427)
- test(guards): fail on a long dash or a `--` used as punctuation in a comment by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#439](https://github.com/kurigram-org/kurigram/pull/439)
- fix(lint): drop dead imports, unused locals and wildcard imports by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#428](https://github.com/kurigram-org/kurigram/pull/428)
- docs(contributing): state the `__all__` rule the public exports guard enforces by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#440](https://github.com/kurigram-org/kurigram/pull/440)
- chore(lint): group pyupgrade rules under UP, fix remaining UP032 by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#429](https://github.com/kurigram-org/kurigram/pull/429)
- chore(lint): enable PYI, convert namedtuple, widen **eq** annotation by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#430](https://github.com/kurigram-org/kurigram/pull/430)
- chore(lint): enable C4, drop unnecessary comprehension and map() by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#431](https://github.com/kurigram-org/kurigram/pull/431)
- chore(lint): enable PLC, fix dict-items and split-maxsplit findings by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#432](https://github.com/kurigram-org/kurigram/pull/432)
- fix(client): name the `kurigram[qrcode]` extra when QR login cannot import it by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#442](https://github.com/kurigram-org/kurigram/pull/442)
- chore(lint): enable PLW, drop dead loop-else and self-assignment by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#433](https://github.com/kurigram-org/kurigram/pull/433)
- chore(lint): enable ISC, join two explicitly-concatenated strings by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#434](https://github.com/kurigram-org/kurigram/pull/434)
- chore(lint): enable SLOT, add **slots** to the str subclasses by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#435](https://github.com/kurigram-org/kurigram/pull/435)
- chore(lint): enable PIE, drop redundant range() start argument by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#436](https://github.com/kurigram-org/kurigram/pull/436)
- chore(lint): enable INP, add missing **init**.py under tests/unit by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#437](https://github.com/kurigram-org/kurigram/pull/437)
- feat: Bot API 10.2 (3/3 - Rich Messages) by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#443](https://github.com/kurigram-org/kurigram/pull/443)
- chore(lint): enable flake8-bugbear (B), fix its findings, ignore B009 by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#441](https://github.com/kurigram-org/kurigram/pull/441)
- docs: mark get_stickers as usable by bots as well by [@​asadofc](https://github.com/asadofc) in [kurigram-org/kurigram#416](https://github.com/kurigram-org/kurigram/pull/416)
- test(errors): count the expected rows off the table instead of hardcoding 936 by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#445](https://github.com/kurigram-org/kurigram/pull/445)
- test(bots): guard the `restore` mapping in `edit_user_star_subscription()` by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#444](https://github.com/kurigram-org/kurigram/pull/444)
- build(sdist): list what the archive holds instead of excluding what it must not by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#446](https://github.com/kurigram-org/kurigram/pull/446)
- fix(filters): escape the command name before matching it by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#447](https://github.com/kurigram-org/kurigram/pull/447)
- fix(messages): catch `StopIteration` when `click()` looks a button up by label by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#448](https://github.com/kurigram-org/kurigram/pull/448)
- feat(rich-blocks): add `is_compact` parameter in InputRichBlockTable and RichBlockTable by [@​deblomperrr](https://github.com/deblomperrr) in [kurigram-org/kurigram#409](https://github.com/kurigram-org/kurigram/pull/409)
- feat(uploads): accept pathlib.Path across every local-file upload parameter by [@​KrimsN](https://github.com/KrimsN) in [kurigram-org/kurigram#449](https://github.com/kurigram-org/kurigram/pull/449)
- refactor(types): replace repeated `str | Path` upload hints with a `PathType` alias by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#452](https://github.com/kurigram-org/kurigram/pull/452)
- feat: Bot API 10.3 (4/4 - Rich Messages) by [@​KurimuzonAkuma](https://github.com/KurimuzonAkuma) in [kurigram-org/kurigram#451](https://github.com/kurigram-org/kurigram/pull/451)
- fix(keyboards): read `InlineKeyboardButton` fields off the objects that hold them by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#453](https://github.com/kurigram-org/kurigram/pull/453)
- fix(keyboards): annotate `LoginUrl.request_write_access` as the `bool` the schema declares by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#454](https://github.com/kurigram-org/kurigram/pull/454)
- fix(types): thread the page media mappings into list blocks and guard a missing document by [@​Danipulok](https://github.com/Danipulok) in [kurigram-org/kurigram#455](https://github.com/kurigram-org/kurigram/pull/455)
#### New Contributors
- [@​itisFarzin](https://github.com/itisFarzin) made their first contribution in [kurigram-org/kurigram#135](https://github.com/kurigram-org/kurigram/pull/135)
- [@​KrimsN](https://github.com/KrimsN) made their first contribution in [kurigram-org/kurigram#387](https://github.com/kurigram-org/kurigram/pull/387)
- [@​AnonymousX1025](https://github.com/AnonymousX1025) made their first contribution in [kurigram-org/kurigram#384](https://github.com/kurigram-org/kurigram/pull/384)
- [@​deblomperrr](https://github.com/deblomperrr) made their first contribution in [kurigram-org/kurigram#409](https://github.com/kurigram-org/kurigram/pull/409)
**Full Changelog**: <https://github.com/kurigram-org/kurigram/compare/v2.2.25...v2.2.26>
### [`v2.2.25`](https://github.com/kurigram-org/kurigram/releases/tag/v2.2.25)
[Compare Source](https://github.com/KurimuzonAkuma/pyrogram/compare/v2.2.24...v2.2.25)
#### What's Changed
- feat: add TCPIntermediatePadded transport by [@​UserN0tAdmin](https://github.com/UserN0tAdmin) in [KurimuzonAkuma/kurigram#330](https://github.com/KurimuzonAkuma/kurigram/pull/330)
- feat: add rich_message in CallbackQuery.edit_message_text bound method by [@​Kanha-XD](https://github.com/Kanha-XD) in [KurimuzonAkuma/kurigram#334](https://github.com/KurimuzonAkuma/kurigram/pull/334)
- fix(download): resolve relative download paths against `workdir` by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#339](https://github.com/KurimuzonAkuma/kurigram/pull/339)
- fix(typing): annotate every parameter that defaults to `None` as `Optional` by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#343](https://github.com/KurimuzonAkuma/kurigram/pull/343)
- fix: require the parameters that cannot default to None by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#345](https://github.com/KurimuzonAkuma/kurigram/pull/345)
- fix(message): guard the optional `saved_peer_id` in a direct-messages chat by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#350](https://github.com/KurimuzonAkuma/kurigram/pull/350)
- fix(compiler): stop writing an empty `flags.N?Vector` the flags call absent by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#352](https://github.com/KurimuzonAkuma/kurigram/pull/352)
- fix(file-id): decode photo file ids minted from minor 32 onwards by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#348](https://github.com/KurimuzonAkuma/kurigram/pull/348)
- fix(filters): read the sender and the chat from any update, not only `Message` by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#346](https://github.com/KurimuzonAkuma/kurigram/pull/346)
- fix(typing): overload the shape-dependent methods and stop hiding the `None`s by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#341](https://github.com/KurimuzonAkuma/kurigram/pull/341)
- fix(filters): let `business`, `linked_channel` and `topic` read the message an update is about by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#354](https://github.com/KurimuzonAkuma/kurigram/pull/354)
- fix(errors): raise the verification errors instead of a bare `Forbidden`, and annotate `RPCError` by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#353](https://github.com/KurimuzonAkuma/kurigram/pull/353)
- feat(errors): name the value each parameterised error carries by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#356](https://github.com/KurimuzonAkuma/kurigram/pull/356)
- refactor(messages): cache the `messages.GetSplitRanges` result by [@​ZeN220](https://github.com/ZeN220) in [KurimuzonAkuma/kurigram#358](https://github.com/KurimuzonAkuma/kurigram/pull/358)
- fix(errors): stop errors that share a class name from shadowing each other by [@​Danipulok](https://github.com/Danipulok) in [KurimuzonAkuma/kurigram#357](https://github.com/KurimuzonAkuma/kurigram/pull/357)
- feat: add return type hints to Update propagation methods by [@​zrekryu](https://github.com/zrekryu) in [KurimuzonAkuma/kurigram#288](https://github.com/KurimuzonAkuma/kurigram/pull/288)
- feat: add MessageIdsEmpty exception by [@​shhimmery](https://github.com/shhimmery) in [KurimuzonAkuma/kurigram#294](https://github.com/KurimuzonAkuma/kurigram/pull/294)
#### New Contributors
- [@​UserN0tAdmin](https://github.com/UserN0tAdmin) made their first contribution in [KurimuzonAkuma/kurigram#330](https://github.com/KurimuzonAkuma/kurigram/pull/330)
**Full Changelog**: <https://github.com/KurimuzonAkuma/kurigram/compare/v2.2.24...v2.2.25>
### [`v2.2.24`](https://github.com/kurigram-org/kurigram/releases/tag/v2.2.24)
[Compare Source](https://github.com/KurimuzonAkuma/pyrogram/compare/v2.2.23...v2.2.24)
#### What's Changed
- feat: add waveform parameter in send_voice method by [@​MarsBatya](https://github.com/MarsBatya) in [KurimuzonAkuma/kurigram#321](https://github.com/KurimuzonAkuma/kurigram/pull/321)
**Full Changelog**: <https://github.com/KurimuzonAkuma/kurigram/compare/v2.2.23...v2.2.24>
</details>
<details>
<summary>pydantic/pydantic-settings (pydantic-settings)</summary>
### [`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** ([#​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** ([#​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`** ([#​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` ([#​860](https://github.com/pydantic/pydantic-settings/pull/860)), so generated `--help` output doubles as configuration documentation.
- **`PYDANTIC_SETTINGS_DEBUG` for debugging settings resolution** ([#​906](https://github.com/pydantic/pydantic-settings/pull/906), [#​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** ([#​882](https://github.com/pydantic/pydantic-settings/pull/882), [#​886](https://github.com/pydantic/pydantic-settings/pull/886), [#​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** ([#​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** ([#​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` ([#​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 ([#​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 ([#​898](https://github.com/pydantic/pydantic-settings/pull/898)).
- Fix case-insensitive matching for **optional** nested models ([#​905](https://github.com/pydantic/pydantic-settings/pull/905)).
- Fix dotenv extras being wrongly claimed by a complex field sharing a name prefix ([#​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 ([#​876](https://github.com/pydantic/pydantic-settings/pull/876)).
- Fix `Secret` subclasses crashing when loaded from the environment ([#​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` ([#​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'` ([#​914](https://github.com/pydantic/pydantic-settings/pull/914)).
- `NestedSecretsSettingsSource` no longer follows symlinks pointing outside `secrets_dir` ([#​889](https://github.com/pydantic/pydantic-settings/pull/889)).
- GCP: skip the `list_secrets` call when `case_sensitive=True` ([#​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 ([#​880](https://github.com/pydantic/pydantic-settings/pull/880)).
##### Documentation
- Document JSON parsing of complex env values, plus a comma-separated-values recipe ([#​919](https://github.com/pydantic/pydantic-settings/pull/919)).
- Recommend an async settings loading pattern ([#​908](https://github.com/pydantic/pydantic-settings/pull/908)).
- Clarify behavior when an unprefixed value is present in a dotenv file ([#​895](https://github.com/pydantic/pydantic-settings/pull/895)).
- Clarify environment variable helper descriptions ([#​867](https://github.com/pydantic/pydantic-settings/pull/867)) and fix assorted typos ([#​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 @​hramezani in https://github.com/pydantic/pydantic-settings/pull/863
* Bump the python-packages group with 4 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/865
* docs: clarify environment variable helper descriptions by @​vip892766gma in https://github.com/pydantic/pydantic-settings/pull/867
* Bump the python-packages group with 4 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/870
* Bump the python-packages group with 4 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/875
* Skip list_secrets call when case_sensitive=True by @​ecerulm in https://github.com/pydantic/pydantic-settings/pull/862
* GoogleSecretManagerSettingsSource: read project_id from previous sources by @​ecerulm in https://github.com/pydantic/pydantic-settings/pull/878
* Bump the python-packages group with 3 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/883
* fix: move SecretsManagerClient type import under TYPE_CHECKING by @​gavin913-lss in https://github.com/pydantic/pydantic-settings/pull/880
* Skip partial update merging for discriminated union fields by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/876
* Support using a table header as root when reading a TOML file by @​whyscream in https://github.com/pydantic/pydantic-settings/pull/882
* Bump the python-packages group with 4 updates by @​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 @​whyscream in https://github.com/pydantic/pydantic-settings/pull/886
* Address issues in toml table header implementation by @​whyscream in https://github.com/pydantic/pydantic-settings/pull/887
* Bump the python-packages group with 2 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/888
* Prevent NestedSecretsSettingsSource from following symlinks outside secrets_dir by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/889
* Add 'Part of the Pydantic Stack' footer to README by @​strawgate in https://github.com/pydantic/pydantic-settings/pull/891
* Bump the python-packages group with 3 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/893
* Add support for showing environment variable names in CLI help text by @​brad-alexander in https://github.com/pydantic/pydantic-settings/pull/860
* Fix loading env vars on Windows with case_sensitive=True by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/894
* Bump the github-actions group with 3 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/896
* Bump the python-packages group with 3 updates by @​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 @​martinky24 in https://github.com/pydantic/pydantic-settings/pull/895
* Fix AliasPath on nested model fields not decoding env values (#​670) by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/898
* Support case_sensitive in InitSettingsSource and config file sources by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/900
* Warn when using fields not fully resolved at instantiation by @​Viicos in https://github.com/pydantic/pydantic-settings/pull/901
* Support Traversable for json/toml/yaml config file sources (#​299) by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/902
* docs: fix typos in docs and source comments by @​maxtaran2010 in https://github.com/pydantic/pydantic-settings/pull/904
* Apply case-insensitive field matching to optional nested models (#​903) by @​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 @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/907
* Add PYDANTIC_SETTINGS_DEBUG for debugging settings sources (#​538) by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/906
* docs: recommend async settings loading pattern by @​w3lld1 in https://github.com/pydantic/pydantic-settings/pull/908
* fix: parse enum names through nested annotations by @​Sanjays2402 in https://github.com/pydantic/pydantic-settings/pull/910
* Fix dotenv extras being claimed by complex fields sharing a name prefix by @​ritsth in https://github.com/pydantic/pydantic-settings/pull/912
* Add debug logging for env_file and secret file resolution by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/913
* docs: document JSON parsing of complex env values + comma-separated recipe by @​hrithvikakb in https://github.com/pydantic/pydantic-settings/pull/919
* fix: coerce empty yaml_config_section to an empty mapping instead of crashing by @​chuenchen309 in https://github.com/pydantic/pydantic-settings/pull/914
* Bump the python-packages group with 3 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/915
* fix: read secret files as UTF-8 instead of the locale encoding by @​dchaudhari7177 in https://github.com/pydantic/pydantic-settings/pull/917
* Bump the python-packages group with 4 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/921
* Bump the github-actions group with 4 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/925
* Bump the python-packages group with 4 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/924
* fix: treat Secret subclasses as non-complex fields (#​716) by @​Rony-ZenAlden in https://github.com/pydantic/pydantic-settings/pull/920
* fix: raise ValidationError for non-JSON env values on strict fields by @​shuvamk in https://github.com/pydantic/pydantic-settings/pull/926
* test: move function-local imports to the top of test modules by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/927
* Bump the python-packages group with 4 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/929
* Prepare release 2.15.0 by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/930
#### New Contributors
* @​vip892766gma made their first contribution in https://github.com/pydantic/pydantic-settings/pull/867
* @​ecerulm made their first contribution in https://github.com/pydantic/pydantic-settings/pull/862
* @​gavin913-lss made their first contribution in https://github.com/pydantic/pydantic-settings/pull/880
* @​whyscream made their first contribution in https://github.com/pydantic/pydantic-settings/pull/882
* @​strawgate made their first contribution in https://github.com/pydantic/pydantic-settings/pull/891
* @​brad-alexander made their first contribution in https://github.com/pydantic/pydantic-settings/pull/860
* @​martinky24 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/895
* @​maxtaran2010 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/904
* @​w3lld1 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/908
* @​Sanjays2402 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/910
* @​ritsth made their first contribution in https://github.com/pydantic/pydantic-settings/pull/912
* @​hrithvikakb made their first contribution in https://github.com/pydantic/pydantic-settings/pull/919
* @​chuenchen309 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/914
* @​dchaudhari7177 made their first contribution in https://github.com/pydantic/pydantic-settings/pull/917
* @​Rony-ZenAlden made their first contribution in https://github.com/pydantic/pydantic-settings/pull/920
* @​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 [@​hramezani](https://github.com/hramezani) in [#​889](https://github.com/pydantic/pydantic-settings/pull/889)
- Prepare release 2.14.2 by [@​hramezani](https://github.com/hramezani) in [#​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>
</details>
<details>
<summary>fastapi/sqlmodel (sqlmodel)</summary>
### [`v0.0.48`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.48)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.47...0.0.48)
##### Features
- ✨ Add support for SQLAlchemy 2.1. PR [#​2112](https://github.com/fastapi/sqlmodel/pull/2112) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- ⬆ Bump the python-packages group across 1 directory with 8 updates. PR [#​2110](https://github.com/fastapi/sqlmodel/pull/2110) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 3 updates. PR [#​2109](https://github.com/fastapi/sqlmodel/pull/2109) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pre-commit hooks. PR [#​2108](https://github.com/fastapi/sqlmodel/pull/2108) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
### [`v0.0.47`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.47)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.46...0.0.47)
##### Features
- ✨ Add direct support for PostgreSQL, MySQL, and MariaDB, include in CI tests. PR [#​2103](https://github.com/fastapi/sqlmodel/pull/2103) by [@​tiangolo](https://github.com/tiangolo).
### [`v0.0.46`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.46)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.45...0.0.46)
##### Fixes
- 🐛 Fix timedelta arithmetic with UTC datetime fields. PR [#​2101](https://github.com/fastapi/sqlmodel/pull/2101) by [@​tiangolo](https://github.com/tiangolo).
### [`v0.0.45`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.45)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.44...0.0.45)
##### Breaking Changes
- ✨ Use UTC datetimes by default. PR [#​2099](https://github.com/fastapi/sqlmodel/pull/2099) by [@​tiangolo](https://github.com/tiangolo).
`datetime` fields now use `UTCDateTime`, a custom type based on `DateTime(timezone=True)`. It requires aware datetime parameters, normalizes them to UTC, and returns aware UTC values from database reads, including on SQLite and MySQL/MariaDB. Pydantic's `AwareDatetime` uses the same type, while `NaiveDatetime` explicitly selects `DateTime(timezone=False)`. Plain `datetime` validation still accepts both aware and naive values, but naive database parameters now raise an error.
Existing databases are not changed automatically. To retain naive storage, use `NaiveDatetime` or an explicit `Field(sa_type=DateTime(timezone=False))`. Explicit SQLAlchemy types retain their existing behavior. PostgreSQL needs a column migration that explicitly specifies the timezone of existing values. SQLite and MySQL/MariaDB keep their column definitions, but existing non-UTC values need a data migration before adopting the new type. Update datetime producers, query parameters, comparisons, and any database defaults to follow the new UTC convention.
Read [Datetimes and Timezones: Upgrade Existing Applications](https://sqlmodel.tiangolo.com/advanced/datetime/#upgrade-existing-applications) before upgrading.
### [`v0.0.44`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.44)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.43...0.0.44)
##### Refactors
- ♻️ Replace the dataclass_transform shim with typing_extensions. PR [#​2097](https://github.com/fastapi/sqlmodel/pull/2097) by [@​tiangolo](https://github.com/tiangolo).
### [`v0.0.43`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.43)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.42...0.0.43)
##### Fixes
- 🐛 Fix SQLAlchemy type handling in `Field`. PR [#​2095](https://github.com/fastapi/sqlmodel/pull/2095) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- ⬆ Bump sqlalchemy from 2.0.51 to 2.0.52. PR [#​2086](https://github.com/fastapi/sqlmodel/pull/2086) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the python-packages group with 9 updates. PR [#​2085](https://github.com/fastapi/sqlmodel/pull/2085) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 4 updates. PR [#​2084](https://github.com/fastapi/sqlmodel/pull/2084) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pre-commit hooks. PR [#​2083](https://github.com/fastapi/sqlmodel/pull/2083) by [@​pr-submit\[bot\]](https://github.com/apps/pr-submit).
### [`v0.0.42`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.42)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.41...0.0.42)
##### Features
- 🏷️ Allow `Discriminator` type for `discriminator` parameter in `Field`. PR [#​1729](https://github.com/fastapi/sqlmodel/pull/1729) by [@​YuriiMotov](https://github.com/YuriiMotov).
### [`v0.0.41`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.41)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.40...0.0.41)
##### Refactors
- 🗑️ Deprecate `min_items` and `max_items` parameters of `Field`. PR [#​1731](https://github.com/fastapi/sqlmodel/pull/1731) by [@​YuriiMotov](https://github.com/YuriiMotov).
### [`v0.0.40`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.40)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.39...0.0.40)
##### Docs
- ✏️ Fix grammar and typos in docs. PR [#​2058](https://github.com/fastapi/sqlmodel/pull/2058) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 📝 Fix "Decimals in SQLModel" to reference `Field()` instead of `condecimal()`. PR [#​2035](https://github.com/fastapi/sqlmodel/pull/2035) by [@​anxkhn](https://github.com/anxkhn).
- 🐛 Use buttons for Termynal controls. PR [#​2063](https://github.com/fastapi/sqlmodel/pull/2063) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Add Library Skills documentation. PR [#​2052](https://github.com/fastapi/sqlmodel/pull/2052) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Recommend uv projects by default in docs. PR [#​2050](https://github.com/fastapi/sqlmodel/pull/2050) by [@​tiangolo](https://github.com/tiangolo).
- 🐛 Prevent Termynal controls from scrolling. PR [#​2051](https://github.com/fastapi/sqlmodel/pull/2051) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update help docs. PR [#​2049](https://github.com/fastapi/sqlmodel/pull/2049) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- ⬆️ Bump Typer min version to `0.26.1`. PR [#​2078](https://github.com/fastapi/sqlmodel/pull/2078) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆️ Bump `setup-uv` action to `10.0.1`. PR [#​2077](https://github.com/fastapi/sqlmodel/pull/2077) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 👷 Migrate automatic labels to Latest Changes. PR [#​2074](https://github.com/fastapi/sqlmodel/pull/2074) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Remove legacy label check. PR [#​2072](https://github.com/fastapi/sqlmodel/pull/2072) by [@​tiangolo](https://github.com/tiangolo).
- 🔐 Use PR Submit for pull requests. PR [#​2071](https://github.com/fastapi/sqlmodel/pull/2071) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Use GitHub CLI for Git authentication. PR [#​2070](https://github.com/fastapi/sqlmodel/pull/2070) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Use PR Push commit identity. PR [#​2069](https://github.com/fastapi/sqlmodel/pull/2069) by [@​tiangolo](https://github.com/tiangolo).
- 🔒 Replace pre-commit PAT with PR Push. PR [#​2067](https://github.com/fastapi/sqlmodel/pull/2067) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Remove Zensical docs cache. PR [#​2065](https://github.com/fastapi/sqlmodel/pull/2065) by [@​tiangolo](https://github.com/tiangolo).
- 🔥 Remove the old Latest Changes workflow. PR [#​2064](https://github.com/fastapi/sqlmodel/pull/2064) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group with 7 updates. PR [#​2060](https://github.com/fastapi/sqlmodel/pull/2060) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 5 updates. PR [#​2059](https://github.com/fastapi/sqlmodel/pull/2059) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆️ Upgrade latest-changes to 0.7.1. PR [#​2054](https://github.com/fastapi/sqlmodel/pull/2054) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group across 1 directory with 6 updates. PR [#​2042](https://github.com/fastapi/sqlmodel/pull/2042) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group across 1 directory with 4 updates. PR [#​2045](https://github.com/fastapi/sqlmodel/pull/2045) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Add GH workflow to bump pre-commit hook versions. PR [#​2026](https://github.com/fastapi/sqlmodel/pull/2026) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 🔧 Set Dependabot schedule interval to "monthly". PR [#​2025](https://github.com/fastapi/sqlmodel/pull/2025) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆ Bump the python-packages group with 4 updates. PR [#​2039](https://github.com/fastapi/sqlmodel/pull/2039) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump <https://github.com/crate-ci/typos> from v1.47.2 to 1.48.0 in the pre-commit group. PR [#​2038](https://github.com/fastapi/sqlmodel/pull/2038) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Fix latest-changes checkout target. PR [#​2031](https://github.com/fastapi/sqlmodel/pull/2031) by [@​tiangolo](https://github.com/tiangolo).
- ⬆️ Update issue-manager to 0.8.1. PR [#​2030](https://github.com/fastapi/sqlmodel/pull/2030) by [@​tiangolo](https://github.com/tiangolo).
- ⬆️ Update latest-changes to 0.6.1. PR [#​2029](https://github.com/fastapi/sqlmodel/pull/2029) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group across 1 directory with 8 updates. PR [#​2028](https://github.com/fastapi/sqlmodel/pull/2028) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 4 updates. PR [#​2027](https://github.com/fastapi/sqlmodel/pull/2027) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump sqlalchemy from 2.0.50 to 2.0.51. PR [#​2013](https://github.com/fastapi/sqlmodel/pull/2013) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Update release workflows, fix gitmoji emoji used. PR [#​2019](https://github.com/fastapi/sqlmodel/pull/2019) by [@​tiangolo](https://github.com/tiangolo).
### [`v0.0.39`](https://github.com/fastapi/sqlmodel/releases/tag/0.0.39)
[Compare Source](https://github.com/fastapi/sqlmodel/compare/0.0.38...0.0.39)
##### Features
- ✨ Add SQLModel Agent Library Skill, install with `uvx library-skills`. PR [#​2017](https://github.com/fastapi/sqlmodel/pull/2017) by [@​tiangolo](https://github.com/tiangolo).
##### Fixes
- 🐛 Fix type of `__sqlmodel_relationships__`. PR [#​1996](https://github.com/fastapi/sqlmodel/pull/1996) by [@​svlandeg](https://github.com/svlandeg).
##### Docs
- 📝 Update docs badges: remove Publish badge, it doesn't give extra information. PR [#​2009](https://github.com/fastapi/sqlmodel/pull/2009) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update and simplify docs about help and management. PR [#​1978](https://github.com/fastapi/sqlmodel/pull/1978) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update docs about contributing, reference central docs. PR [#​1975](https://github.com/fastapi/sqlmodel/pull/1975) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update security policy. PR [#​1973](https://github.com/fastapi/sqlmodel/pull/1973) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update link syntax to minimal Markdown. PR [#​1800](https://github.com/fastapi/sqlmodel/pull/1800) by [@​tiangolo](https://github.com/tiangolo).
- 📝 Update admonitions, simplify and use defaults. PR [#​1915](https://github.com/fastapi/sqlmodel/pull/1915) by [@​tiangolo](https://github.com/tiangolo).
- 🔒️ Only allow team members to modify dependencies. PR [#​1914](https://github.com/fastapi/sqlmodel/pull/1914) by [@​svlandeg](https://github.com/svlandeg).
##### Internal
- 👷 Simplify pull request workflow triggers. PR [#​2016](https://github.com/fastapi/sqlmodel/pull/2016) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Update issue-manager to 0.7.1. PR [#​2015](https://github.com/fastapi/sqlmodel/pull/2015) by [@​tiangolo](https://github.com/tiangolo).
- ⬆️ Update issue-manager to 0.7.0. PR [#​2014](https://github.com/fastapi/sqlmodel/pull/2014) by [@​tiangolo](https://github.com/tiangolo).
- 🔒️ Update zizmor workflow security checks. PR [#​2010](https://github.com/fastapi/sqlmodel/pull/2010) by [@​tiangolo](https://github.com/tiangolo).
- 👷 Fix alls-green test dependency. PR [#​2008](https://github.com/fastapi/sqlmodel/pull/2008) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the python-packages group with 5 updates. PR [#​2006](https://github.com/fastapi/sqlmodel/pull/2006) by [@​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 [#​2005](https://github.com/fastapi/sqlmodel/pull/2005) by [@​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 [#​2004](https://github.com/fastapi/sqlmodel/pull/2004) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the python-packages group with 3 updates. PR [#​2000](https://github.com/fastapi/sqlmodel/pull/2000) by [@​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 [#​1999](https://github.com/fastapi/sqlmodel/pull/1999) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the github-actions group with 2 updates. PR [#​1998](https://github.com/fastapi/sqlmodel/pull/1998) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump sqlalchemy from 2.0.49 to 2.0.50. PR [#​1992](https://github.com/fastapi/sqlmodel/pull/1992) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump the python-packages group across 1 directory with 9 updates. PR [#​1995](https://github.com/fastapi/sqlmodel/pull/1995) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump eps1lon/actions-label-merge-conflict from 3.0.3 to 3.1.0 in the github-actions group. PR [#​1993](https://github.com/fastapi/sqlmodel/pull/1993) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆️ Bump Pydantic to 2.13.4. PR [#​1985](https://github.com/fastapi/sqlmodel/pull/1985) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 👷 Automate release preparation. PR [#​1988](https://github.com/fastapi/sqlmodel/pull/1988) by [@​tiangolo](https://github.com/tiangolo).
- 🔥 Remove old package stub slim, not used nor needed. PR [#​1987](https://github.com/fastapi/sqlmodel/pull/1987) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump the github-actions group with 2 updates. PR [#​1983](https://github.com/fastapi/sqlmodel/pull/1983) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Configure Dependabot to group updates and update weekly. PR [#​1972](https://github.com/fastapi/sqlmodel/pull/1972) by [@​YuriiMotov](https://github.com/YuriiMotov).
- 🔥 Remove config files now in central GitHub repo. PR [#​1979](https://github.com/fastapi/sqlmodel/pull/1979) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump zizmorcore/zizmor-action from 0.5.3 to 0.5.5. PR [#​1974](https://github.com/fastapi/sqlmodel/pull/1974) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Fix branch name in `guard-dependencies.yml`. PR [#​1916](https://github.com/fastapi/sqlmodel/pull/1916) by [@​svlandeg](https://github.com/svlandeg).
- ♻️ Migrate docs to Zensical. PR [#​1913](https://github.com/fastapi/sqlmodel/pull/1913) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump ruff from 0.15.12 to 0.15.13. PR [#​1910](https://github.com/fastapi/sqlmodel/pull/1910) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 🔒️ Add zizmor and fix audit findings. PR [#​1871](https://github.com/fastapi/sqlmodel/pull/1871) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆ Bump ty from 0.0.34 to 0.0.35. PR [#​1904](https://github.com/fastapi/sqlmodel/pull/1904) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump actions/add-to-project from 1.0.2 to 2.0.0. PR [#​1900](https://github.com/fastapi/sqlmodel/pull/1900) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump actions/labeler from 6.0.1 to 6.1.0. PR [#​1902](https://github.com/fastapi/sqlmodel/pull/1902) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pydantic-settings from 2.14.0 to 2.14.1. PR [#​1903](https://github.com/fastapi/sqlmodel/pull/1903) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump prek from 0.3.11 to 0.3.13. PR [#​1901](https://github.com/fastapi/sqlmodel/pull/1901) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Add pre-commit for typos. PR [#​1899](https://github.com/fastapi/sqlmodel/pull/1899) by [@​tiangolo](https://github.com/tiangolo).
- ⬆ Bump ty from 0.0.32 to 0.0.34. PR [#​1898](https://github.com/fastapi/sqlmodel/pull/1898) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump typer from 0.25.0 to 0.25.1. PR [#​1896](https://github.com/fastapi/sqlmodel/pull/1896) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump prek from 0.3.10 to 0.3.11. PR [#​1892](https://github.com/fastapi/sqlmodel/pull/1892) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump typer from 0.24.2 to 0.25.0. PR [#​1893](https://github.com/fastapi/sqlmodel/pull/1893) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump ruff from 0.15.11 to 0.15.12. PR [#​1888](https://github.com/fastapi/sqlmodel/pull/1888) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump fastapi from 0.136.0 to 0.136.1. PR [#​1887](https://github.com/fastapi/sqlmodel/pull/1887) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump typer from 0.24.1 to 0.24.2. PR [#​1883](https://github.com/fastapi/sqlmodel/pull/1883) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump prek from 0.3.9 to 0.3.10. PR [#​1881](https://github.com/fastapi/sqlmodel/pull/1881) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump ty from 0.0.31 to 0.0.32. PR [#​1876](https://github.com/fastapi/sqlmodel/pull/1876) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pydantic-settings from 2.13.1 to 2.14.0. PR [#​1878](https://github.com/fastapi/sqlmodel/pull/1878) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR [#​1868](https://github.com/fastapi/sqlmodel/pull/1868) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump ty from 0.0.30 to 0.0.31. PR [#​1862](https://github.com/fastapi/sqlmodel/pull/1862) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR [#​1865](https://github.com/fastapi/sqlmodel/pull/1865) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR [#​1867](https://github.com/fastapi/sqlmodel/pull/1867) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump astral-sh/setup-uv from 7.6.0 to 8.1.0. PR [#​1866](https://github.com/fastapi/sqlmodel/pull/1866) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump fastapi from 0.135.3 to 0.136.0. PR [#​1869](https://github.com/fastapi/sqlmodel/pull/1869) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump ruff from 0.15.10 to 0.15.11. PR [#​1870](https://github.com/fastapi/sqlmodel/pull/1870) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 🔒 Pin GitHub actions by commit SHA. PR [#​1840](https://github.com/fastapi/sqlmodel/pull/1840) by [@​YuriiMotov](https://github.com/YuriiMotov).
- ⬆ Bump ty from 0.0.29 to 0.0.30. PR [#​1861](https://github.com/fastapi/sqlmodel/pull/1861) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump prek from 0.3.8 to 0.3.9. PR [#​1859](https://github.com/fastapi/sqlmodel/pull/1859) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump ruff from 0.15.9 to 0.15.10. PR [#​1856](https://github.com/fastapi/sqlmodel/pull/1856) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump pytest from 9.0.2 to 9.0.3. PR [#​1855](https://github.com/fastapi/sqlmodel/pull/1855) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump ty from 0.0.28 to 0.0.29. PR [#​1854](https://github.com/fastapi/sqlmodel/pull/1854) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 🔥 Remove outdated `needs_py310` marker from tests. PR [#​1852](https://github.com/fastapi/sqlmodel/pull/1852) by [@​stickm4n](https://github.com/stickm4n).
- ⬆ Bump sqlalchemy from 2.0.48 to 2.0.49. PR [#​1850](https://github.com/fastapi/sqlmodel/pull/1850) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump ty from 0.0.26 to 0.0.28. PR [#​1849](https://github.com/fastapi/sqlmodel/pull/1849) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- 👷 Replace `mypy` with `ty` in precommit. PR [#​1806](https://github.com/fastapi/sqlmodel/pull/1806) by [@​svlandeg](https://github.com/svlandeg).
- ⬆ Bump ruff from 0.15.7 to 0.15.9. PR [#​1847](https://github.com/fastapi/sqlmodel/pull/1847) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
- ⬆ Bump mypy from 1.19.1 to 1.20.0. PR [#​1843](https://github.com/fastapi/sqlmodel/pull/1843) by [@​dependabot\[bot\]](https://github.com/apps/dependabot).
</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** ([#​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** ([#​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`** ([#​2982](https://github.com/Kludex/uvicorn/pull/2982), [#​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`** ([#​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** ([#​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** ([#​3119](https://github.com/Kludex/uvicorn/pull/3119)). The default `FORWARDED_ALLOW_IPS` value now includes `::1`.
- **Keep upgraded WebSockets alive** ([#​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` ([#​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 ([#​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 ([#​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 ([#​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 ([#​3048](https://github.com/Kludex/uvicorn/issues/3048))
- Handle connection loss while a WebSocket write is waiting on backpressure ([#​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 ([#​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` ([#​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 ([#​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 [@​Kludex](https://github.com/Kludex) in [#​3025](https://github.com/Kludex/uvicorn/pull/3025)
- Remove colorama from the standard extra by [@​Kludex](https://github.com/Kludex) in [#​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 [@​Kludex](https://github.com/Kludex) in [#​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 [@​Aayush7352](https://github.com/Aayush7352) in [#​3019](https://github.com/Kludex/uvicorn/pull/3019)
#### New Contributors
- [@​Aayush7352](https://github.com/Aayush7352) made their first contribution in [#​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 [@​Kludex](https://github.com/Kludex) in [#​2970](https://github.com/Kludex/uvicorn/pull/2970)
- Cache the `asgi` scope sub-dict per connection by [@​Kludex](https://github.com/Kludex) in [#​2976](https://github.com/Kludex/uvicorn/pull/2976)
- Build a fresh `asgi` scope dict per request by [@​Kludex](https://github.com/Kludex) in [#​2977](https://github.com/Kludex/uvicorn/pull/2977)
- Replace click.style with an internal ANSI style helper by [@​Kludex](https://github.com/Kludex) in [#​2981](https://github.com/Kludex/uvicorn/pull/2981)
- Avoid copying single-frame WebSocket payloads in websockets-sansio by [@​Kludex](https://github.com/Kludex) in [#​2983](https://github.com/Kludex/uvicorn/pull/2983)
- Deprecate the legacy websockets implementation and default `auto` to websockets-sansio by [@​Kludex](https://github.com/Kludex) in [#​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 [@​Kludex](https://github.com/Kludex) in [#​3001](https://github.com/Kludex/uvicorn/pull/3001)
- Skip the eager app import in the parent when spawning workers by [@​Kludex](https://github.com/Kludex) in [#​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 [@​Kludex](https://github.com/Kludex) in [#​2962](https://github.com/Kludex/uvicorn/pull/2962)
- Consume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by [@​Kludex](https://github.com/Kludex) in [#​2971](https://github.com/Kludex/uvicorn/pull/2971)
**Full Changelog**: <https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0>
</details>
<details>
<summary>MagicStack/uvloop (uvloop)</summary>
### [`v0.23.0`](https://github.com/MagicStack/uvloop/releases/tag/v0.23.0)
[Compare Source](https://github.com/MagicStack/uvloop/compare/v0.22.1...v0.23.0)
# Changes
- Add Python 3.15 and 3.15t wheel builds and CI coverage ([#​758](https://github.com/MagicStack/uvloop/issues/758))
(by [@​honglei](https://github.com/honglei) [@​fantix](https://github.com/fantix) in [`f7c0547`](https://github.com/MagicStack/uvloop/commit/f7c05473))
- Add support for the `eager_start` keyword argument in create_task() ([#​748](https://github.com/MagicStack/uvloop/issues/748))
(by [@​samypr100](https://github.com/samypr100) in [`3cbb095`](https://github.com/MagicStack/uvloop/commit/3cbb0956) for [#​746](https://github.com/MagicStack/uvloop/issues/746) [#​718](https://github.com/MagicStack/uvloop/issues/718))
- Add thread name prefix to the default thread pool executor ([#​636](https://github.com/MagicStack/uvloop/issues/636))
(by [@​inikolaev](https://github.com/inikolaev) [@​fantix](https://github.com/fantix) in [`0582f94`](https://github.com/MagicStack/uvloop/commit/0582f946) for [#​562](https://github.com/MagicStack/uvloop/issues/562))
- Add support for special hostname `<broadcast>` ([#​592](https://github.com/MagicStack/uvloop/issues/592))
(by [@​jpbede](https://github.com/jpbede) in [`3060ceb`](https://github.com/MagicStack/uvloop/commit/3060cebc) for [#​540](https://github.com/MagicStack/uvloop/issues/540))
- Upgrade libuv to v1.52.1 ([#​753](https://github.com/MagicStack/uvloop/issues/753))
(by [@​fantix](https://github.com/fantix) in [`e8efea4`](https://github.com/MagicStack/uvloop/commit/e8efea40) for [#​752](https://github.com/MagicStack/uvloop/issues/752))
- Improve performance by using Python C API to enter/exit context ([#​627](https://github.com/MagicStack/uvloop/issues/627))
(by [@​tarasko](https://github.com/tarasko) in [`837ef22`](https://github.com/MagicStack/uvloop/commit/837ef22c))
- Improve performance/latency of Transport.write ([#​619](https://github.com/MagicStack/uvloop/issues/619))
(by [@​tarasko](https://github.com/tarasko) in [`1d9b6e0`](https://github.com/MagicStack/uvloop/commit/1d9b6e0d))
- Replace some SSL vectorcall with direct methods ([#​626](https://github.com/MagicStack/uvloop/issues/626))
(by [@​tarasko](https://github.com/tarasko) in [`6a27cbe`](https://github.com/MagicStack/uvloop/commit/6a27cbe2))
- Optimize SSL buffered reads using C values ([#​629](https://github.com/MagicStack/uvloop/issues/629))
(by [@​tarasko](https://github.com/tarasko) in [`a308f75`](https://github.com/MagicStack/uvloop/commit/a308f75f))
# Fixes
- Detach socket on create_connection cancellation to prevent fd double-close ([#​740](https://github.com/MagicStack/uvloop/issues/740))
(by [@​junjzhang](https://github.com/junjzhang) [@​fantix](https://github.com/fantix) in [`dc680eb`](https://github.com/MagicStack/uvloop/commit/dc680eb2) for [#​645](https://github.com/MagicStack/uvloop/issues/645) [#​738](https://github.com/MagicStack/uvloop/issues/738))
- Remove `loop._ready_len` in favor of `len(loop._ready)` ([#​721](https://github.com/MagicStack/uvloop/issues/721))
(by [@​x42005e1f](https://github.com/x42005e1f) in [`5910a18`](https://github.com/MagicStack/uvloop/commit/5910a183) for [#​720](https://github.com/MagicStack/uvloop/issues/720))
- Prefer inspect.iscoroutinefunction ([#​705](https://github.com/MagicStack/uvloop/issues/705))
(by [@​MatthieuDartiailh](https://github.com/MatthieuDartiailh) in [`fd65027`](https://github.com/MagicStack/uvloop/commit/fd650276) for [#​703](https://github.com/MagicStack/uvloop/issues/703))
- Fix context tests by explicitly yielding after run_in_executor ([#​743](https://github.com/MagicStack/uvloop/issues/743))
(by [@​samypr100](https://github.com/samypr100) in [`6cd24cb`](https://github.com/MagicStack/uvloop/commit/6cd24cbb))
- Fix test_create_connection_open_con_addr with Python 3.13.9+ ([#​713](https://github.com/MagicStack/uvloop/issues/713))
(by [@​shadchin](https://github.com/shadchin) in [`b93141a`](https://github.com/MagicStack/uvloop/commit/b93141a5) for [#​701](https://github.com/MagicStack/uvloop/issues/701))
- Skip flaky test_cancel_post_init on asyncio 3.13+ ([#​714](https://github.com/MagicStack/uvloop/issues/714))
(by [@​fantix](https://github.com/fantix) in [`3ea5c85`](https://github.com/MagicStack/uvloop/commit/3ea5c856) for [#​709](https://github.com/MagicStack/uvloop/issues/709))
- Fix flaky test_fs_event ([#​717](https://github.com/MagicStack/uvloop/issues/717))
(by [@​fantix](https://github.com/fantix) in [`8da4547`](https://github.com/MagicStack/uvloop/commit/8da4547a))
- Use C \_\_atomic builtins for debug counters ([#​719](https://github.com/MagicStack/uvloop/issues/719))
(by [@​fantix](https://github.com/fantix) in [`836e3b2`](https://github.com/MagicStack/uvloop/commit/836e3b2e))
- Update the example to work with Python 3.14 ([#​710](https://github.com/MagicStack/uvloop/issues/710))
(by [@​Jamie-Chang](https://github.com/Jamie-Chang) in [`b74c2f1`](https://github.com/MagicStack/uvloop/commit/b74c2f1c))
# Build
- Replace pkg_resources with packaging and use Cython 3.1 ([#​742](https://github.com/MagicStack/uvloop/issues/742))
(by [@​samypr100](https://github.com/samypr100) in [`b377b7c`](https://github.com/MagicStack/uvloop/commit/b377b7c6) for [#​729](https://github.com/MagicStack/uvloop/issues/729))
- Remove wheel as a build dependency ([#​696](https://github.com/MagicStack/uvloop/issues/696))
(by [@​DimitriPapadopoulos](https://github.com/DimitriPapadopoulos) in [`173e88c`](https://github.com/MagicStack/uvloop/commit/173e88cf))
- Support any number of flags in UVLOOP_OPT_CFLAGS ([#​630](https://github.com/MagicStack/uvloop/issues/630))
(by [@​mgorny](https://github.com/mgorny) in [`963a5f3`](https://github.com/MagicStack/uvloop/commit/963a5f3e))
</details>
---
### Configuration
📅 **Schedule**: (in timezone Europe/Warsaw)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNDUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjE0NS4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcHMtY29kZSIsInJlbm92YXRlIl19-->
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: backend/pyproject.toml
Artifact update for fastapi resolved to version 0.143.0, which is a pending version that has not yet passed the Minimum Release Age threshold.
Renovate was attempting to update to 0.142.4
This is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them.
Until Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with `rangeStrategy=pin` for apps, or `rangeStrategy=widen` for libraries)
See also: https://docs.renovatebot.com/dependency-pinning/
### ⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
- any of the package files in this branch needs updating, or
- the branch becomes conflicted, or
- you click the rebase/retry checkbox if found above, or
- you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
##### File name: backend/pyproject.toml
```
Artifact update for fastapi resolved to version 0.143.0, which is a pending version that has not yet passed the Minimum Release Age threshold.
Renovate was attempting to update to 0.142.4
This is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them.
Until Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with `rangeStrategy=pin` for apps, or `rangeStrategy=widen` for libraries)
See also: https://docs.renovatebot.com/dependency-pinning/
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
1.18.4→1.20.00.31.0→0.32.00.136.3→0.142.43.3.1→3.4.83.5.1→3.5.62.2.23→2.2.262.14.1→2.15.00.0.38→0.0.480.48.0→0.54.00.22.1→0.23.0Release Notes
MagicStack/asyncpg (asyncpg)
v0.32.0Compare Source
Improvements
Support Python 3.15 (#1367, #1378)
(by @elprans in
1b11846and58c0c59)Support PostgreSQL 19 (#1379)
(by @elprans in
8d2a5ae)Make pool
min_sizea maintained connection floor and addinit_sizetocontrol the number of connections opened at startup (#1323).
Idle connections at or below
min_sizeare retained, and closed connectionsare replaced in the background.
init_sizedefaults tomin_size.To preserve the previous behavior, where the pool could drain to zero,
replace
min_size=Nwithinit_size=N, min_size=0.(by @shatilov-diman in
67a1cbc)Use
hashlib.pbkdf2_hmac()for faster SCRAM password derivation (#1359)(by @twelfthlabor in
00319a9)Use the statement cache for
copy_records_to_table()introspection (#1360)(by @matemax in
dd05865)Fixes
Clean up connections rejected by
target_session_attrsimmediately so anunresponsive rejected host cannot delay the selected connection, and cleanup
tasks cannot outlive the event loop. Rejected connections are aborted without
waiting for a graceful disconnect; servers may log "unexpected EOF on client
connection" if the Terminate message is not delivered before the transport
closes.
Fix a connection pool deadlock when releasing a connection after a protocol
abort (#1324)
(by @pchaseh in
4a83cc2)Honor
Connection.close(timeout=...)while waiting for a pendingcancellation (#1361)
(by @gyanu2507 in
c06bcb4)Prevent stuck cancellation from blocking connection teardown or pool release
by bounding cancellation with the command or release timeout (#1370)
(by @elprans in
4cf0220)Preserve the server error when the connection closes mid-operation (#1369)
(by @RitiGrover in
6c8f1a7)Fix COPY cleanup when a records generator raises, preserving the original
exception and avoiding protocol desynchronization and stalled rollback (#1358)
(by @CodingCossack in
fdc6bc8)Reparse unnamed statements before cursor binding when the statement cache
is disabled (#1364)
(by @elprans in
302ba49)Allow cursors in transactions started outside
Connection.transaction(),such as with an explicit
BEGIN(#1350)(by @aryansk in
25aaaf5)Remove the query logger when the
query_logger()block raises (#1373)(by @kratos0718 in
6a7fbd3)Fix a segfault in
Record.get()with an invalid number of positionalarguments (#1333)
(by @apoorvdarshan in
40a3832)Align SSL startup retries with libpq and improve SSL rejection diagnostics
(#1366). Retry alternative transports only before authentication succeeds.
Direct TLS now requires
sslmode=require,verify-ca, orverify-full,or an explicit
SSLContext.(by @elprans in
78752c9)Preserve password errors during SSL fallback when the fallback fails with
a less specific authorization error (#1331)
(by @Mauricio0129 in
2d97947)Handle cleartext password authentication when no password is supplied
without raising an
AttributeError(#1351)(by @aryansk in
6be5915)Set the
postgresqlALPN protocol on SSL contexts created by asyncpg sodirect TLS connections work with PostgreSQL 17 and later (#1372).
User-provided contexts must set this protocol for direct TLS connections.
(by @DurandA in
b21325d)Link explicitly against
libmon non-Windows platforms to fix undefinedmath symbol errors when loading the extensions (#1305)
(by @veeceey in
db8ecc2)Fix builds on FreeBSD 15 by linking against
libstdthreads(#1368)(by @elprans in
87bcaf9)Other
Replace
pkg_resourceswithpackaginginsetup.py(#1362)(by @elprans in
6695db7)Build Linux and macOS ARM64 wheels on native runners and add Windows ARM64
wheel builds (#1308)
(by @ddelange in
1e8cc1c)Add manual and PR-label-triggered dry runs to the release workflow (#1374)
(by @elprans in
1bd643e)Clarify how
execute()uses prepared statements and how to confirm anINSERTin the documentation (#1336)(by @pctablet505 in
cdf816c)Fix typos in comments and docstrings (#1332)
(by @maxtaran2010 in
bc3e246)fastapi/fastapi (fastapi)
v0.142.4Compare Source
Fixes
v0.142.3Compare Source
Fixes
Docs
Translations
Internal
bump-pre-commit-hooksworkflow. PR #16463 by @YuriiMotov.gpt-6-astramodel for translations. PR #16453 by @YuriiMotov.v0.142.2Compare Source
Fixes
v0.142.1Compare Source
Fixes
v0.142.0Compare Source
Features
Refactors
Docs
Translations
Internal
setup-uvaction to10.0.1. PR #16249 by @YuriiMotov.commit_in_placeinput intranslate.yml. PR #16216 by @YuriiMotov.zizmor.ymlworkflow (main->master). PR #16178 by @YuriiMotov..cacheinbuild-docs.yml. PR #16156 by @YuriiMotov.v0.141.1Compare Source
Fixes
app.frontend(). PR #16105 by @tiangolo.Docs
FASTAPI_ENVin FastAPI CLI guide. PR #16104 by @tiangolo.v0.141.0Compare Source
Features
app.frontend(check_dir="auto"), to make local development more convenient withfastapi dev. PR #16102 by @tiangolo.v0.140.13Compare Source
Fixes
status_codebeing ignored for SSE and JSONL streaming endpoints. PR #15937 by @SAURABHSALVE.Docs
format_sse_eventdocstring rendering of\n\nterminator. PR #15613 by @AshNicolus.v0.140.12Compare Source
Fixes
format_sse_eventto comply with SSE spec. PR #15515 by @Zawwarsami16.v0.140.11Compare Source
Fixes
response_model_*params ignored for non-generator endpoints withIterable[..]return type. PR #15093 by @YuriiMotov.v0.140.10Compare Source
Fixes
Internal
v0.140.9Compare Source
Fixes
exclude_defaultsnot propagated to dict keys and values injsonable_encoder. PR #16043 by @MBGrao.Internal
v0.140.8Compare Source
Fixes
include_router(). PR #15077 by @alex-raw.v0.140.7Compare Source
Refactors
Internal
v0.140.6Compare Source
Refactors
v0.140.5Compare Source
Refactors
v0.140.4Compare Source
Refactors
v0.140.3Compare Source
Refactors
v0.140.2Compare Source
Refactors
Internal
v0.140.1Compare Source
Refactors
v0.140.0Compare Source
Refactors
Docs
Internal
v0.139.2Compare Source
Fixes
v0.139.1Compare Source
Fixes
/users/john.doe. PR #16011 by @tiangolo.Docs
skip_usersnot being applied. PR #15995 by @YuriiMotov.Translations
llm-prompt.mdfor Hindi. PR #15810 by @YuriiMotov.Internal
FASTAPI_LATEST_CHANGEStoken inbump-pre-commit-hooksworkflow. PR #15984 by @YuriiMotov.v0.139.0Compare Source
Features
app.frontend(), e.g. for automatic cookie authentication for the frontend. PR #15908 by @tiangolo.Translations
Internal
allow-unsafe-pr-checkout: true. PR #15876 by @YuriiMotov.v0.138.2Compare Source
Refactors
app.frontend()return 404 for methods other thanGETorHEADwith no static file matches. PR #15863 by @tiangolo.Internal
v0.138.1Compare Source
Refactors
Internal
v0.138.0Compare Source
Features
app.frontend("/", directory="dist")androuter.frontend("/", directory="dist"). PR #15800 by @tiangolo.Docs
app.frontend()instructions to Agent Library Skill. PR #15805 by @tiangolo.Translations
Internal
release-notes.mdfor typos. PR #15796 by @YuriiMotov.gpt-5.5model intranslate.py, specify-chatto avoid warnings. PR #15792 by @YuriiMotov.v0.137.2Compare Source
Features
iter_route_contexts()for advanced use cases that used to userouter.routes(e.g. Jupyverse). PR #15785 by @tiangolo.Translations
Internal
coverage.sh. PR #15772 by @tiangolo.v0.137.1Compare Source
Fixes
v0.137.0Compare Source
Breaking Changes
APIRouterandAPIRouteinstances. PR #15745 by @tiangolo.Unblocks ✨ SO MANY THINGS ✨
Before this,
router.include_router(other_router)would take each path operation fromother_routerand "clone" it, or recreate it from scratch.This would mean that in the end there was only one top level router, part of the app.
The way it is structured here is that there are a few additional classes to handle intermediate metadata for router and route inclusion. That way the information of "router X includes Y and Y includes Z" is stored somewhere, without affecting (recreating / clonning) the final route.
Non Objectives
Dependencies for 404: previously I intended to support dependencies that would be executed even for 404, but that would conflict with the fact that a router could not find a match, but the next router did find a match. Executing dependencies in the router that did not find a match would not make sense, they could consume the request, body, etc. This original idea was discarded.
Specific Breaking Changes
Now
router.routesis no longer a plain list ofAPIRouteobjects, it can contain these intermediate objects that can contain additional routers, forming a tree.Any logic that depended on iterating on the
router.routesdirectly would be affected, that logic cannot expect to be able to extract data from a plain list of routes, as it's no longer a plain list but a tree.Additionally, any logic that iterated on
router.routesto modify them would now also see these new objects, and would not see all the routes in the app.router.routesshould be considered an internal implementation detail, only passed around to the FastAPI functions that need it.Features
subrouterinmainroutercan be done before adding routes (path operations) tosubrouter, because now the the entire object is stored instead of copying the routes.Alpha Features
This is not documented yet, so it's not officially supported yet and could change in the future.
But, as
APIRouteandAPIRouterinstances are now preserved, they could be customized.APIRouterhas two new methods,.matches()and.handle(), counterpart to the existing ones inAPIRoute. With this a router could customize how it matches and handles requests. For example, it could match only requests that include some specific header, for example for handling versions in headers.Still, for now, consider this very experimental and potentially changing and breaking in the future.
Future Features Enabled
APIRoutesubclasses (undocumented, but alraedy works as desccribed above)APIRoutersubclasses (undocumented, but already works as described above)Docs
Annotatedin inline example indocs/en/docs/tutorial/body-multiple-params.md. PR #15591 by @TheArchons.docs/en/docs/tutorial/security/oauth2-jwt.md. PR #14781 by @zadevhub.Translations
Internal
changing_dirinstead ofCLIRunner.isolated_filesystemto set working dir. PR #15616 by @YuriiMotov.httpx2test dependency to avoid deprecation warning. PR #15603 by @YuriiMotov.PrefectHQ/fastmcp (fastmcp)
v3.4.8: : Long Arm of the PatchCompare Source
This release contains important security and bug fixes. All users are encouraged to upgrade. Thanks to our 2 contributors.
What's Changed
Security 🔒
Docs 📚
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.7...v3.4.8
v3.4.7: : Know Your AudienceCompare Source
FastMCP 3.4.7 restores CIMD
private_key_jwtauthentication for OAuthProxy deployments at a bare origin. Client assertions are now validated against the exact token endpoint advertised in authorization server metadata, eliminating the doubled-slash audience mismatch.What's Changed
Security 🔒
Docs 📚
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.6...v3.4.7
v3.4.6: : Trust, but ProxyCompare Source
FastMCP 3.4.6 backports trusted-proxy support for SSRF-protected OAuth metadata and JWKS fetches. Deployments can now route these requests through a mandated corporate proxy while preserving custom CA certificates; FastMCP refuses the fetch when no proxy is configured instead of risking an unprotected direct request.
What's Changed
Fixes 🐞
Docs 📚
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.5...v3.4.6
v3.4.5: : Key ChangeCompare Source
FastMCP 3.4.5 collects five fixes for the 3.x line. The one that prompted it: a single
Ed25519key in a JWKS — which Rauthy, Ory Hydra, and some Keycloak configurations publish by default — madeJWTVerifierreject every token, including ones correctly signed by supported keys in the same set.What's Changed
Fixes 🐞
Docs 📚
New Contributors
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.4...v3.4.5
v3.4.4: : Host in TranslationCompare Source
FastMCP 3.4.4 restores HTTP deployment compatibility after the 3.4.3 Host/Origin guard changed default behavior for existing ASGI, serverless, and reverse-proxy deployments. The guard implementation remains available for deployments that opt in with explicit trusted hosts and origins, while 3.x returns to accepting traffic that worked before the patch. This release also adds Hugging Face OAuth provider support, with docs and examples for public and private apps, PKCE, Dynamic Client Registration, and CIMD.
What's Changed
Enhancements ✨
Fixes 🐞
Docs 📚
New Contributors
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.3...v3.4.4
v3.4.3: : The Fast and the Secure-iousCompare Source
FastMCP 3.4.3 closes out a month of SSRF and OAuth hardening: NAT64, 6to4, Teredo, and ISATAP transition addresses can no longer smuggle private IPv4 targets past the SSRF allow-list, Streamable HTTP now validates Host and Origin before session handling to block DNS rebinding against localhost-bound servers, and OAuth redirect validation rejects unsafe schemes and unregistered DCR redirect URIs. Alongside the security work, this release also fixes proxy session teardown races, discriminator-tag handling in JSON schema conversion, and several smaller reliability issues.
What's Changed
Enhancements ✨
Security 🔒
Fixes 🐞
Docs 📚
Dependencies 📦
Other Changes 🦾
New Contributors
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.2...v3.4.3
v3.4.2: : Heads UpCompare Source
FastMCP 3.4.2 restores JWT compatibility for providers that include private, non-critical JWS header parameters. Tokens from providers like Clerk can carry header metadata such as
catwithout being rejected before signature and claim validation, while unsupported critical headers are still rejected.What's Changed
Fixes 🐞
Docs 📚
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.1...v3.4.2
v3.4.1: : Floor ItCompare Source
FastMCP 3.4.1 floors Starlette at
>=1.0.1so installs can no longer resolve to a version affected by CVE-2026-48710 — previously the dependency was only constrained transitively throughmcp, which allowed vulnerable versions. It also makes OAuthProxy log refresh-token cache misses instead of failing silently.What's Changed
Enhancements ✨
Security 🔒
Docs 📚
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.4.0...v3.4.1
v3.4.0: : Remote ControlCompare Source
FastMCP 3.4 is about reaching servers that live somewhere else. The headline is
fastmcp-remote, a standalone bridge that connects stdio-only MCP hosts to servers hosted over HTTP. Around it, this release hardens the proxy layer those remote connections depend on — making bridges fail loudly instead of silently, and keeping authenticated sessions alive across the long idle periods that remote clients are prone to.fastmcp-remote
Some MCP hosts still insist on launching a local stdio command, even when the server you want is already running over HTTP. FastMCP could already proxy a remote URL through
fastmcp run, but that pulls in the full server-runner surface.fastmcp-remoteis the small, single-purpose version: one URL in, one local stdio proxy out.OAuth is enabled automatically for HTTPS servers, with support for explicit bearer tokens and custom headers when you need them. The implementation stays on FastMCP primitives —
Client, OAuth,create_proxy, and stdio — and credits the original npmmcp-remoteproject for the command shape.Bridges That Fail Loudly
Proxies are lazy bridges: they don't touch the upstream server during construction, but they do forward real MCP requests once a client connects. As of 3.4,
initializeis part of that forwarded surface — so a proxy only reports a successful handshake after the upstream server initializes too. A missing backend, a wrong URL (the server root instead of/mcp), denied upstream auth, or a non-MCP upstream now fails the downstreaminitializeinstead of producing a "connected" proxy whose capability fetches quietly come back empty. The proxy also forwardspingupstream now.This is an intentional behavior change from 3.3, and the reason bridge callers like
fastmcp-remotesurface real upstream failures instead of degrading into empty tool lists.Auth That Survives Idle Time
Remote sessions sit idle, and short-lived upstream tokens punish that.
fastmcp_access_token_expiry_secondsdecouples the FastMCP-issued token's lifetime from the upstreamexpires_in— the FastMCP token is just a reference into proxy storage, re-validated and transparently refreshed on every request, so it can safely outlive a 5-minute upstream token without forcing a full OAuth flow after every idle period. When the upstream issues no refresh token, the lifetime is capped to match.Alongside it,
token_expiry_threshold_secondstreats tokens as expired N seconds early to close refresh races, andWorkOSProvidergainsvalid_scopesandextra_authorize_params.Returnable Tool Errors
A tool could previously only signal an error by raising, which flattens to a text-only result and discards structured content.
ToolResultnow acceptsis_error, mapping toCallToolResult.isErrorso a tool can hand back a rich error the model can see and act on. The proxy uses this to forward upstream tool errors intact instead of collapsing them.Code Mode: Safe by Default
MontySandboxProvider()now applies a conservative baseline when constructed without limits — 30s duration, 100 MB memory — andCodeModecaps tool calls at 50 perexecuteblock. Both remain explicitly opt-out (limits=None,max_tool_calls=None), so the safe configuration is the default instead of something you had to remember to turn on.Under the Hood
The auth stack migrated its JWT handling to
joserfc. Thefastmcpdev CLI gains--hostand--log-panel/--no-log-panel. Resources created from templates now preserve annotations, meta, title, and icons; resource templates with query params work on proxied servers; OTEL spans cover the sampling step and tool execution; MCP config files are read as UTF-8; and the OAuth server metadata endpoint now answers at the/.well-known/openid-configurationalias.8 new contributors this release.
What's Changed
New Features 🎉
Breaking Changes ⚠️
Enhancements ✨
Security 🔒
Fixes 🐞
Docs 📚
Dependencies 📦
Other Changes 🦾
New Contributors
Full Changelog: https://github.com/PrefectHQ/fastmcp/compare/v3.3.1...v3.4.0
python-greenlet/greenlet (greenlet)
v3.5.6Compare Source
==================
unintentionally being disabled. See
PR 529 <https://github.com/python-greenlet/greenlet/pull/529>_ by Yurii.v3.5.5Compare Source
==================
Appveyor builds did through 3.3.0. Since 3.3.1
_greenlet.pydimported
MSVCP140.dll, which no Windows CPython distribution ships,so importing greenlet failed on machines without the Visual C++
redistributable. See
issue 525 <https://github.com/python-greenlet/greenlet/issues/525>_. Issueand pull request by Daniel Sticker.
.. note::
Binary 3.15 wheels are now built with 3.15.0rc1. This should be
compatible with future 3.15 releases and is believed compatible
with 3.15b4 as well (but not earlier versions).
v3.5.4Compare Source
==================
Fix a crash (segfault) on free-threaded builds of Python 3.14 and
later when the garbage collector runs while a greenlet that was
started from a non-empty C-stack-reference state is active.
See
issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.Thanks to ddorian and Kumar Aditya.
Fix a potential use-after-free on free-threaded builds of Python 3.14
and later when the garbage collector runs while a greenlet is
suspended holding a
_PyCStackRef(for example, mid attributeresolution). See
issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.Thanks to ddorian and Kumar Aditya.
Fix a deadlock on free-threaded builds when a greenlet switch happened
while a
PyCriticalSectionwas held -- for example inside asyncio'sTask.__step, which holds one on the running task for the duration ofthe step. See
PR 519 <https://github.com/python-greenlet/greenlet/pull/519/>.Thanks to ddorian and Kumar Aditya.
.. note::
Binary 3.15 wheels are now built with Python 3.15b4. These may not
be compatible with earlier or later versions of 3.15. Binary
3.15 wheels of greenlet from previous releases (e.g., 3.5.3)
may not be compatible with Python 3.15b4.
v3.5.3Compare Source
==================
Fix a crash (segfault) on free-threaded builds of Python 3.14 and
later when the garbage collector runs while a greenlet that was
started from a non-empty C-stack-reference state is active.
See
issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.Thanks to ddorian and Kumar Aditya.
Fix a potential use-after-free on free-threaded builds of Python 3.14
and later when the garbage collector runs while a greenlet is
suspended holding a
_PyCStackRef(for example, mid attributeresolution). See
issue 515 <https://github.com/python-greenlet/greenlet/issues/515>_.Thanks to ddorian and Kumar Aditya.
Fix a deadlock on free-threaded builds when a greenlet switch happened
while a
PyCriticalSectionwas held -- for example inside asyncio'sTask.__step, which holds one on the running task for the duration ofthe step. See
PR 519 <https://github.com/python-greenlet/greenlet/pull/519/>.Thanks to ddorian and Kumar Aditya.
.. note::
Binary 3.15 wheels are now built with Python 3.15b4. These may not
be compatible with earlier or later versions of 3.15. Binary
3.15 wheels of greenlet from previous releases (e.g., 3.5.3)
may not be compatible with Python 3.15b4.
v3.5.2Compare Source
==================
3.15. Thanks to Kumar Aditya in
PR #​511 <https://github.com/python-greenlet/greenlet/pull/511>_.Python 3.15. Thanks to Kumar Aditya in
PR #​512 <https://github.com/python-greenlet/greenlet/pull/512>_.KurimuzonAkuma/pyrogram (kurigram)
v2.2.26Compare Source
What's Changed
WINDOWflow control and per-kind proxy types by @Danipulok in kurigram-org/kurigram#364ee) secrets by @Danipulok in kurigram-org/kurigram#365ruffcheck, run frommake lintin CI andpre-commitby @Danipulok in kurigram-org/kurigram#366tests/unitortests/integrationsby @Danipulok in kurigram-org/kurigram#372JsonValueininit_connection_paramsby @Danipulok in kurigram-org/kurigram#367Message.topicalso holds aDirectMessagesTopicby @Danipulok in kurigram-org/kurigram#368Optionalfrom two_parse()helpers that always return an object by @Danipulok in kurigram-org/kurigram#369mypyreads as a# type:comment by @Danipulok in kurigram-org/kurigram#370MessageGenerationStoppedby @Danipulok in kurigram-org/kurigram#374save_file()used to log and hide by @Danipulok in kurigram-org/kurigram#373Noneback fromget_users()when the id belongs to no user by @Danipulok in kurigram-org/kurigram#378get_chat_admins_with_invite_links()handingtypes.Listan async generator by @Danipulok in kurigram-org/kurigram#379NOTE:prefix and the dashes standing in for punctuation by @Danipulok in kurigram-org/kurigram#380effect_idandis_enabledtoNone, not to theNoneTypeclass by @Danipulok in kurigram-org/kurigram#390reply_*/answer_*shortcuts by @Danipulok in kurigram-org/kurigram#391AsyncGenerator[T, None], notAsyncIterator[T]by @Danipulok in kurigram-org/kurigram#392KeyboardInlineButtonRowinReplyInlineMarkupby @Danipulok in kurigram-org/kurigram#396handlersonly when it is a list of handler pairs by @Danipulok in kurigram-org/kurigram#397stop()spawned instead of orphaning them by @Danipulok in kurigram-org/kurigram#398restart()from reconnecting a stopped session by @Danipulok in kurigram-org/kurigram#399repr()of aListwork for items that are notObjects by @Danipulok in kurigram-org/kurigram#401save_file()andInputChatPhoto.write()actually return by @Danipulok in kurigram-org/kurigram#403@Client.on_*()call declares by @Danipulok in kurigram-org/kurigram#402Updates by @Danipulok in kurigram-org/kurigram#405selfon thesave_file()overloads as the implementation does by @Danipulok in kurigram-org/kurigram#410Optionalwhere the default rules outNoneby @Danipulok in kurigram-org/kurigram#412tests/guardslayer by @Danipulok in kurigram-org/kurigram#413FakeClientby @Danipulok in kurigram-org/kurigram#414uv, dropping the hand-builtvenvandhatchby @Danipulok in kurigram-org/kurigram#415<=ceiling with a tested>=floor by @Danipulok in kurigram-org/kurigram#4193.10, dropping3.8and3.9by @Danipulok in kurigram-org/kurigram#421--used as punctuation in a comment by @Danipulok in kurigram-org/kurigram#439__all__rule the public exports guard enforces by @Danipulok in kurigram-org/kurigram#440kurigram[qrcode]extra when QR login cannot import it by @Danipulok in kurigram-org/kurigram#442restoremapping inedit_user_star_subscription()by @Danipulok in kurigram-org/kurigram#444StopIterationwhenclick()looks a button up by label by @Danipulok in kurigram-org/kurigram#448is_compactparameter in InputRichBlockTable and RichBlockTable by @deblomperrr in kurigram-org/kurigram#409str | Pathupload hints with aPathTypealias by @Danipulok in kurigram-org/kurigram#452InlineKeyboardButtonfields off the objects that hold them by @Danipulok in kurigram-org/kurigram#453LoginUrl.request_write_accessas theboolthe schema declares by @Danipulok in kurigram-org/kurigram#454New Contributors
Full Changelog: https://github.com/kurigram-org/kurigram/compare/v2.2.25...v2.2.26
v2.2.25Compare Source
What's Changed
workdirby @Danipulok in KurimuzonAkuma/kurigram#339NoneasOptionalby @Danipulok in KurimuzonAkuma/kurigram#343saved_peer_idin a direct-messages chat by @Danipulok in KurimuzonAkuma/kurigram#350flags.N?Vectorthe flags call absent by @Danipulok in KurimuzonAkuma/kurigram#352Messageby @Danipulok in KurimuzonAkuma/kurigram#346Nones by @Danipulok in KurimuzonAkuma/kurigram#341business,linked_channelandtopicread the message an update is about by @Danipulok in KurimuzonAkuma/kurigram#354Forbidden, and annotateRPCErrorby @Danipulok in KurimuzonAkuma/kurigram#353messages.GetSplitRangesresult by @ZeN220 in KurimuzonAkuma/kurigram#358New Contributors
Full Changelog: https://github.com/KurimuzonAkuma/kurigram/compare/v2.2.24...v2.2.25
v2.2.24Compare Source
What's Changed
Full Changelog: https://github.com/KurimuzonAkuma/kurigram/compare/v2.2.23...v2.2.24
pydantic/pydantic-settings (pydantic-settings)
v2.15.0Compare Source
Highlights
Behavior changes
case_sensitivenow applies to init kwargs and config-file sources (#900).InitSettingsSourceand the JSON/TOML/YAML config sources previously ignoredcase_sensitive. Since it defaults toFalse, case-insensitive matching is now the default for these sources — e.g.Settings(TeSt=...)now populates atestfield where it previously did not. Nested keys are still matched case-sensitively.IncompleteFieldDefinitionWarningtelling you to callmodel_rebuild(). If you havefilterwarnings = errorconfigured, this may surface as a new failure.ValidationError(#926) instead of a less specific error.New features
cli_show_env_vars=True(#860), so generated--helpoutput doubles as configuration documentation.PYDANTIC_SETTINGS_DEBUGfor debugging settings resolution (#906, #913). Set it to a truthy value withDEBUGlogging enabled to see each source's contribution in priority order, which source won for each value, and whichenv_file/secret files were probed, loaded, or skipped — the long-standing "why isn't my.envbeing picked up?" question.toml_table_headerfor regular TOML files (#882, #886, #887), letting you root settings at a nested table in any TOML file, not justpyproject.toml.Traversablesupport for JSON/TOML/YAML file sources (#902), so you can load config packaged inside a distribution — including files inside a zip or wheel — viaimportlib.resources.files(...)without casting toPath.project_idcan come from an earlier settings source (#878), rather than only from the constructor orGOOGLE_CLOUD_PROJECT.Bug fixes
case_sensitive=True(#894). Windows upper-casesos.environkeys, so fields raisedField requiredinstead of picking up their values.AliasPathon nested model fields not JSON-decoding env values (#898).dbx_tokenbeing swallowed by adb: dictfield.nested_model_default_partial_update=Truecorrupting discriminated unions (#876).Secretsubclasses crashing when loaded from the environment (#920).Optional[Annotated[MyEnum, ...]]withenv_parse_enums=True(#910).yaml_config_sectionnow falls back to defaults instead of raisingAttributeError: 'NoneType' object has no attribute 'keys'(#914).NestedSecretsSettingsSourceno longer follows symlinks pointing outsidesecrets_dir(#889).list_secretscall whencase_sensitive=True(#862), lowering the required IAM permissions to justroles/secretmanager.secretAccessor.types-boto3[secretsmanager]is no longer required at runtime (#880).Documentation
All changes (including dependency bumps and internal maintenance)
What's Changed
New Contributors
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.15.0
v2.14.2Compare Source
What's Changed
This is a security patch release.
NestedSecretsSettingsSourcefrom following symlinks outsidesecrets_dirby @hramezani in #889Security
Fixes GHSA-4xgf-cpjx-pc3j:
NestedSecretsSettingsSourcewithsecrets_nested_subdir=Truecould follow a symbolic link insidesecrets_dirpointing outside it, reading out-of-tree files into settings values and bypassing thesecrets_dir_max_sizecap. Affected versions:>= 2.12.0, < 2.14.2.Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2
fastapi/sqlmodel (sqlmodel)
v0.0.48Compare Source
Features
Internal
v0.0.47Compare Source
Features
v0.0.46Compare Source
Fixes
v0.0.45Compare Source
Breaking Changes
datetimefields now useUTCDateTime, a custom type based onDateTime(timezone=True). It requires aware datetime parameters, normalizes them to UTC, and returns aware UTC values from database reads, including on SQLite and MySQL/MariaDB. Pydantic'sAwareDatetimeuses the same type, whileNaiveDatetimeexplicitly selectsDateTime(timezone=False). Plaindatetimevalidation still accepts both aware and naive values, but naive database parameters now raise an error.Existing databases are not changed automatically. To retain naive storage, use
NaiveDatetimeor an explicitField(sa_type=DateTime(timezone=False)). Explicit SQLAlchemy types retain their existing behavior. PostgreSQL needs a column migration that explicitly specifies the timezone of existing values. SQLite and MySQL/MariaDB keep their column definitions, but existing non-UTC values need a data migration before adopting the new type. Update datetime producers, query parameters, comparisons, and any database defaults to follow the new UTC convention.Read Datetimes and Timezones: Upgrade Existing Applications before upgrading.
v0.0.44Compare Source
Refactors
v0.0.43Compare Source
Fixes
Field. PR #2095 by @tiangolo.Internal
v0.0.42Compare Source
Features
Discriminatortype fordiscriminatorparameter inField. PR #1729 by @YuriiMotov.v0.0.41Compare Source
Refactors
min_itemsandmax_itemsparameters ofField. PR #1731 by @YuriiMotov.v0.0.40Compare Source
Docs
Field()instead ofcondecimal(). PR #2035 by @anxkhn.Internal
0.26.1. PR #2078 by @YuriiMotov.setup-uvaction to10.0.1. PR #2077 by @YuriiMotov.v0.0.39Compare Source
Features
uvx library-skills. PR #2017 by @tiangolo.Fixes
__sqlmodel_relationships__. PR #1996 by @svlandeg.Docs
Internal
guard-dependencies.yml. PR #1916 by @svlandeg.needs_py310marker from tests. PR #1852 by @stickm4n.mypywithtyin precommit. PR #1806 by @svlandeg.Kludex/uvicorn (uvicorn)
v0.54.0: Version 0.54.0Compare Source
📨 Send metadata after the response body
uvicorn0.54.0 adds response trailers and103 Early Hintsto its experimental HTTP/2 implementation throughzttp.http.response.trailersextension lets applications send metadata, such as checksums, after the response body. Clients must sendTE: trailersto receive them. Multiple trailer messages are combined before completing the response.--http zttp --http2. Upgrade-based h2c and WebSockets over HTTP/2 remain unsupported.💡 Hint at resources before the final response
103 Early Hintsover HTTP/2 (#3137). Applications can use the ASGIhttp.response.early_hintextension to send resource hints before the final response. Each supplied link becomes a separateLinkheader.Full changelog: 0.53.0...0.54.0
v0.53.0: Version 0.53.0Compare Source
🌐 Opt-in HTTP/2 support
uvicorn0.53.0 adds experimental HTTP/2 throughzttp, alongside a newzuvloopintegration and connection-handling improvements.zttp(#2982, #3101). Installzttp, then enable HTTP/2 with--http zttp --http2. Uvicorn negotiates HTTP/2 over TLS with ALPN and supports cleartext prior knowledge.⚙️ More event loop choice
zuvloop(#3104). Installzuvloopseparately and select it explicitly with--loop zuvloopon CPython 3.14 or newer.🛡️ More reliable connections and proxies
Connection: closetoken lists (#3103). Uvicorn now parses comma-separated tokens case-insensitively across HTTP implementations.FORWARDED_ALLOW_IPSvalue now includes::1.Full changelog: 0.52.4...0.53.0
v0.52.4: Version 0.52.4Compare Source
Fixed
Dateheaders from accepted WebSocket handshakes withwebsockets-sansio(#3078)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4
v0.52.3: Version 0.52.3Compare Source
Changed
zttpto 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (#3067)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3
v0.52.2: Version 0.52.2Compare Source
Fixed
zttpto 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (#3063)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2
v0.52.1: Version 0.52.1Compare Source
Fixed
websockets-sansioandwsprotoimplementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (#3053)websockets-sansioimplementation, preventing data truncation on server-initiated closes with large in-flight payloads (#3048)Content-TypeandContent-Lengthheaders from WebSocket denial responses on thewebsockets-sansioimplementation, and deliver non-UTF-8 denial bodies intact (#3041)Full Changelog: https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1
v0.52.0: Version 0.52.0Compare Source
This release adds an experimental HTTP/1.1 implementation backed by zttp, a sans-IO HTTP parser I've been developing on the side: a core written in Zig, with bindings to Python. It has been running under a fuzzer for some weeks now, and has been through multiple rounds of security auditing.
It is still experimental, so don't put it in front of production traffic yet. Try it with
--http zttp, and please send any feedback to the issue tracker.Added
zttpHTTP/1.1 implementation, selectable with--http zttp(#2979)Fixed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0
v0.51.0: Version 0.51.0Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0
v0.50.2: Version 0.50.2Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.1...0.50.2
v0.50.1: Version 0.50.1Compare Source
What's Changed
Sec-WebSocket-Protocolvalues in the websockets-sansio implementation by @Aayush7352 in #3019New Contributors
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1
v0.50.0: Version 0.50.0Compare Source
What's Changed
asgiscope sub-dict per connection by @Kludex in #2976asgiscope dict per request by @Kludex in #2977autoto websockets-sansio by @Kludex in #2985Full Changelog: https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0
v0.49.0: Version 0.49.0Compare Source
What's Changed
Full Changelog: https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0
MagicStack/uvloop (uvloop)
v0.23.0Compare Source
Changes
Add Python 3.15 and 3.15t wheel builds and CI coverage (#758)
(by @honglei @fantix in
f7c0547)Add support for the
eager_startkeyword argument in create_task() (#748)(by @samypr100 in
3cbb095for #746 #718)Add thread name prefix to the default thread pool executor (#636)
(by @inikolaev @fantix in
0582f94for #562)Add support for special hostname
<broadcast>(#592)(by @jpbede in
3060cebfor #540)Upgrade libuv to v1.52.1 (#753)
(by @fantix in
e8efea4for #752)Improve performance by using Python C API to enter/exit context (#627)
(by @tarasko in
837ef22)Improve performance/latency of Transport.write (#619)
(by @tarasko in
1d9b6e0)Replace some SSL vectorcall with direct methods (#626)
(by @tarasko in
6a27cbe)Optimize SSL buffered reads using C values (#629)
(by @tarasko in
a308f75)Fixes
Detach socket on create_connection cancellation to prevent fd double-close (#740)
(by @junjzhang @fantix in
dc680ebfor #645 #738)Remove
loop._ready_lenin favor oflen(loop._ready)(#721)(by @x42005e1f in
5910a18for #720)Prefer inspect.iscoroutinefunction (#705)
(by @MatthieuDartiailh in
fd65027for #703)Fix context tests by explicitly yielding after run_in_executor (#743)
(by @samypr100 in
6cd24cb)Fix test_create_connection_open_con_addr with Python 3.13.9+ (#713)
(by @shadchin in
b93141afor #701)Skip flaky test_cancel_post_init on asyncio 3.13+ (#714)
(by @fantix in
3ea5c85for #709)Fix flaky test_fs_event (#717)
(by @fantix in
8da4547)Use C __atomic builtins for debug counters (#719)
(by @fantix in
836e3b2)Update the example to work with Python 3.14 (#710)
(by @Jamie-Chang in
b74c2f1)Build
Replace pkg_resources with packaging and use Cython 3.1 (#742)
(by @samypr100 in
b377b7cfor #729)Remove wheel as a build dependency (#696)
(by @DimitriPapadopoulos in
173e88c)Support any number of flags in UVLOOP_OPT_CFLAGS (#630)
(by @mgorny in
963a5f3)Configuration
📅 Schedule: (in timezone Europe/Warsaw)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate CLI.
⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
The artifact failure details are included below:
File name: backend/pyproject.toml