NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #60 most downloaded on PyPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Last release 3 days ago
30 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
320 releases · first in 2018
🐛 Fix support for tagged union with discriminator inside of Annotated with Body(). PR #14512 by @tiangolo.
Annotated with Body(). PR #14512 by @tiangolo.One column per quarter.
🐛 Fix support for if TYPE_CHECKING, non-evaluated stringified annotations. PR #14485 by @tiangolo.
🐛 Fix handling arbitrary types when using arbitrary_types_allowed=True. PR #14482 by @tiangolo.
🚸 Improve tracebacks by adding endpoint metadata. PR #14306 by @savannahostrowski.
scripts/mkdocs_hooks.py. PR #14457 by @yujiteshima.🐛 Fix using class (not instance) dependency that has __call__ method. PR #14458 by @YuriiMotov.
__call__ method. PR #14458 by @YuriiMotov.separate_input_output_schemas=False with computed_field. PR #14453 by @YuriiMotov.🐛 Fix OAuth2 scopes in OpenAPI in extra corner cases, parent dependency with scopes, sub-dependency security scheme without scopes. PR #14459 by @tian
🐛 Fix OpenAPI security scheme OAuth2 scopes declaration, deduplicate security schemes with different scopes. PR #14455 by @tiangolo.
🐛 Fix evaluating stringified annotations in Python 3.10. PR #11355 by @chaen.
🐛 Fix support for functools wraps and partial combined, for async and regular functions and classes in path operations and dependencies. PR #14448 by
✨ Allow using dependables with functools.partial(). PR #9753 by @lieryan.
functools.partial(). PR #9753 by @lieryan.@functools.wraps()) used with forward references. PR #5077 by @lucaswiman.is_coroutine check to reuse internal supported variants (unwrap, check class). PR #14434 by @tiangolo.🐛 Fix OpenAPI schema support for computed fields when using separate_input_output_schemas=False. PR #13207 by @vgrafe.
separate_input_output_schemas=False. PR #13207 by @vgrafe.servers parameter. PR #14405 by @YuriiMotov.🐛 Fix Query\Header\Cookie parameter model alias. PR #14360 by @YuriiMotov.
serialize sequence value with Pydantic V2. PR #14297 by @YuriiMotov.🐛 Fix unformatted {type_} in FastAPIError. PR #14416 by @Just-Helpful.
{type_} in FastAPIError. PR #14416 by @Just-Helpful.Form parameter list. PR #14303 by @YuriiMotov.None if that's the default), for compatibility with HTML forms. PR #13537 by @MarinPostma.pip in case of No module named pip error in virtual-environments.md. PR #14211 by @zadevhub.🐛 Avoid accessing non-existing "$ref" key for Pydantic v2 compat remapping. PR #14361 by @svlandeg.
TypeError when encoding a decimal with a NaN or Infinity value. PR #12935 by @kentwelcome.🐛 Cache dependencies that don't use scopes and don't have sub-dependencies with scopes. PR #14419 by @tiangolo.
🐛 Fix hierarchical security scope propagation. PR #5624 by @kristjanvalur.
🐛 Use 401 status code in security classes when credentials are missing. PR #13786 by @YuriiMotov.
401 status code in security classes when credentials are missing. PR #13786 by @YuriiMotov.
403 status code, check the new docs about how to override the classes, to use the same old behavior: Use Old 403 Authentication Error Status Codes.lang-all label. PR #14213 by @YuriiMotov.latest-changes GitHub Action and pin actions/checkout@v5. PR #14403 by @svlandeg.add-permalinks and add-permalinks-page to scripts/docs.py. PR #14033 by @YuriiMotov.♻️ Make the result of Depends() and Security() hashable, as a workaround for other tools interacting with these internal parts. PR #14372 by @tiangolo
Depends() and Security() hashable, as a workaround for other tools interacting with these internal parts. PR #14372 by @tiangolo.0.51.0. PR #14282 by @musicinmybrain.🐛 Fix handling of JSON Schema attributes named "$ref". PR #14349 by @tiangolo.
🐛 Fix Depends(func, scope='function') for top level (parameterless) dependencies. PR #14301 by @luzzodev.
Depends(func, scope='function') for top level (parameterless) dependencies. PR #14301 by @luzzodev.yield, noting the changes in 0.121.0, adding scope. PR #14287 by @tiangolo.✨ Add support for dependencies with scopes, support scope="request" for dependencies with yield that exit before the response is sent. PR #14262 by @t
scope="request" for dependencies with yield that exit before the response is sent. PR #14262 by @tiangolo.
🐛 Fix security schemes in OpenAPI when added at the top level app. PR #14266 by @YuriiMotov.
♻️ Reduce internal cyclic recursion in dependencies, from 2 functions calling each other to 1 calling itself. PR #14256 by @tiangolo.
get_param_sub_dependant. PR #14255 by @tiangolo.🐛 Fix separation of schemas with nested models introduced in 0.119.0. PR #14246 by @tiangolo.
⬆️ Bump Starlette to <0.50.0. PR #14234 by @YuriiMotov.
0.50.0. PR #14234 by @YuriiMotov.license and license-files to pyproject.toml, remove License from classifiers. PR #14230 by @YuriiMotov.There are no major nor breaking changes in this release. ☕️
There are no major nor breaking changes in this release. ☕️
The internal reference documentation now uses annotated_doc.Doc instead of typing_extensions.Doc, this adds a new (very small) dependency on annotated-doc, a package made just to provide that Doc documentation utility class.
I would expect typing_extensions.Doc to be deprecated and then removed at some point from typing_extensions, for that reason there's the new annotated-doc micro-package. If you are curious about this, you can read more in the repo for annotated-doc.
This new version 0.120.0 only contains that transition to the new home package for that utility class Doc.
typing_extensions.Doc to annotated_doc.Doc. PR #14222 by @tiangolo.🐛 Fix internal Pydantic v1 compatibility (warnings) for Python 3.14 and Pydantic 2.12.1. PR #14186 by @svlandeg.
And with this, support for Pydantic v1 is now deprecated and will be removed from FastAPI in a future version soon.
FastAPI now (temporarily) supports both Pydantic v2 models and pydantic.v1 models at the same time in the same app, to make it easier for any FastAPI apps still using Pydantic v1 to gradually but quickly migrate to Pydantic v2.
from fastapi import FastAPI
from pydantic import BaseModel as BaseModelV2
from pydantic.v1 import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
class ItemV2(BaseModelV2):
title: str
summary: str | None = None
app = FastAPI()
@app.post("/items/", response_model=ItemV2)
def create_item(item: Item):
return {"title": item.name, "summary": item.description}
Adding this feature was a big effort with the main objective of making it easier for the few applications still stuck in Pydantic v1 to migrate to Pydantic v2.
And with this, support for Pydantic v1 is now deprecated and will be removed from FastAPI in a future version soon.
Note: have in mind that the Pydantic team already stopped supporting Pydantic v1 for recent versions of Python, starting with Python 3.14.
You can read in the docs more about how to Migrate from Pydantic v1 to Pydantic v2.
⬆️ Add support for Python 3.14. PR #14165 by @svlandeg.
🐛 Fix tagged discriminated union not recognized as body field. PR #12942 by @frankie567.
👽️ Ensure compatibility with Pydantic 2.12.0. PR #14036 by @cjwatson.
mkdocs_hooks.py to add title to page's metadata (remove permalinks in social cards). PR #14125 by @YuriiMotov.🐛 Fix support for StreamingResponses with dependencies with yield or UploadFiles, close after the response is done. PR #14099 by @tiangolo.
StreamingResponses with dependencies with yield or UploadFiles, close after the response is done. PR #14099 by @tiangolo.Before FastAPI 0.118.0, if you used a dependency with yield, it would run the exit code after the path operation function returned but right before sending the response.
This change also meant that if you returned a StreamingResponse, the exit code of the dependency with yield would have been already run.
For example, if you had a database session in a dependency with yield, the StreamingResponse would not be able to use that session while streaming data because the session would have already been closed in the exit code after yield.
This behavior was reverted in 0.118.0, to make the exit code after yield be executed after the response is sent.
You can read more about it in the docs for Advanced Dependencies - Dependencies with yield, HTTPException, except and Background Tasks. Including what you could do if you wanted to close a database session earlier, before returning the response to the client.
tutorial/security/oauth2-jwt/ to use pwdlib with Argon2 instead of passlib. PR #13917 by @Neizvestnyj.🐛 Fix validation error when File is declared after Form parameter. PR #11194 by @thomasleveil.
File is declared after Form parameter. PR #11194 by @thomasleveil.✨ Allow None as return type for bodiless responses. PR #9425 by @hofrob.
None as return type for bodiless responses. PR #9425 by @hofrob.type field. PR #13639 by @sammasak.external_docs parameter to FastAPI. PR #13713 by @cmtoro.default_factory for response model field with Pydantic V1. PR #9704 by @vvanglro.jsonable_encoder alters json_encoders of Pydantic v1 objects. PR #4972 by @aboubacs.allow_arbitrary_types when only 1 argument is used on the API endpoint. PR #13694 by @rmawatson.inspect.getcoroutinefunction() can break testing with unittest.mock.patch(). PR #14022 by @secrett2633.dependency-cache dict in solve_dependencies only if None (don't re-create if empty). PR #13689 by @bokshitsky.test_tutorial/test_header_params/test_tutorial003.py. PR #13864 by @Amogha-ark.httpx to >=0.23.0,<1.0.0. PR #14086 by @YuriiMotov.tutorial/cookie-params.md. PR #13510 by @Kludex.path-params-numeric-validations.md for languages en, es and uk.. PR #14059 by @svlandeg.docs.py generate-readme command to remove permalinks from headers. PR #14055 by @YuriiMotov.📝 Add deprecation info block about dict() in docs/tutorial/body.md. PR #13906 by @jomkv.
--forwarded-allow-ips="*". PR #14028 by @tiangolo.dict() in docs/tutorial/body.md. PR #13906 by @jomkv.termynal.js. PR #13714 by @Ashish-Pandey62.url field in error responses in docs. PR #13655 by @Taoup.scope claim in line with the standard in docs_src/security/tutorial005.py. PR #11189 by @DurandA.docs/en/docs/advanced/generate-clients.md. PR #13793 by @mrlubos.docs/zh/docs/python-types.md. PR #13997 by @anfreshman.docs/pt/docs/async.md. PR #13863 by @EdmilsonRodrigues.docs/ja/docs/tutorial/body.md. PR #13927 by @KoyoMiyazaki.docs/fa/docs/environment-variables.md. PR #13923 by @Mohammad222PR.docs/fa/docs/python-types.md. PR #13524 by @Mohammad222PR.docs/pt/docs/project-generation.md. PR #13875 by @EdmilsonRodrigues.docs/fa/docs/async.md. PR #13541 by @Mohammad222PR.docs/bn/about/index.md. PR #13882 by @sajjadrahman56.mkdocs_hooks to handle headers with permalinks when building docs. PR #14025 by @tiangolo.mkdocs-macros-plugin from 1.3.7 to 1.3.9. PR #14003 by @YuriiMotov.⬆️ Upgrade Starlette supported version range to >=0.40.0,<0.48.0. PR #13884 by @tiangolo.
docs/en/docs/contributing.md. PR #13886 by @YuriiMotov.✨ Add support for deploying to FastAPI Cloud with fastapi deploy. PR #13870 by @tiangolo.
Installing fastapi[standard] now includes fastapi-cloud-cli.
This will allow you to deploy to FastAPI Cloud with the fastapi deploy command.
If you want to install fastapi with the standard dependencies but without fastapi-cloud-cli, you can install instead fastapi[standard-no-fastapi-cloud-cli].
docs/ru/docs/advanced/response-directly.md. PR #13801 by @NavesSapnis.docs/ru/docs/advanced/additional-status-codes.md. PR #13799 by @NavesSapnis.docs/uk/docs/tutorial/body-updates.md. PR #13804 by @valentinDruzhinin.🐛 Fix support for unions when using Form. PR #13827 by @patrick91.
Form. PR #13827 by @patrick91.docs/en/docs/advanced/response-directly.md. PR #13800 by @NavesSapnis.docs/uk/docs/tutorial/response-model.md. PR #13792 by @valentinDruzhinin.docs/uk/docs/tutorial/security/index.md. PR #13805 by @valentinDruzhinin.docs/ja/docs/tutorial/encoder.md. PR #13815 by @ruzia.docs/ja/docs/tutorial/handling-errors.md. PR #13814 by @ruzia.docs/ja/docs/tutorial/body-fields.md. PR #13802 by @ruzia.docs/ru/docs/advanced/index.md. PR #13797 by @NavesSapnis.🔨 Resolve Pydantic deprecation warnings in internal script. PR #13696 by @emmanuel-ferdman.
\f) character for Pydantic V2. PR #13698 by @YuriiMotov.refreshUrl parameter in OAuth2PasswordBearer. PR #11460 by @snosratiershad.password and client_secret in OAuth2PasswordRequestForm, make docs show password fields for passwords. PR #11032 by @Thodoris1999.settings. PR #13505 by @valentinDruzhinin.validate_response_recursive. PR #13507 by @valentinDruzhinin.async def without await. PR #13642 by @swastikpradhan1999.docs/en/docs/tutorial/handling-errors.md. PR #13623 by @gsheni.docs/ru/docs/advanced/response-change-status-code.md. PR #13791 by @NavesSapnis.docs/fa/docs/learn/index.md. PR #13518 by @Mohammad222PR.docs/ko/docs/advanced/sub-applications.md. PR #4543 by @NinaHwang.docs/uk/docs/tutorial/schema-extra-example.md. PR #13769 by @valentinDruzhinin.docs/uk/docs/tutorial/query-param-models.md. PR #13748 by @valentinDruzhinin.docs/bn/docs/environment-variables.md. PR #13629 by @SakibSibly.docs/uk/docs/tutorial/query-params-str-validations.md page. PR #13546 by @valentinDruzhinin.docs/ru/docs/tutorial/cookie-param-models.md. PR #13616 by @EgorOnishchuk.docs/ko/docs/tutorial/extra-models.md. PR #13063 by @timothy-jeong.docs/uk/docs/tutorial/path-params-numeric-validations.md page. PR #13548 by @valentinDruzhinin.docs/uk/docs/tutorial/middleware.md page. PR #13520 by @valentinDruzhinin.docs/uk/docs/tutorial/background-tasks.md page. PR #13502 by @valentinDruzhinin.docs/uk/docs/tutorial/cors.md page. PR #13519 by @valentinDruzhinin.docs/ko/docs/advanced/events.md. PR #13487 by @bom1215.docs/uk/docs/tutorial/handling-errors.md page. PR #13420 by @valentinDruzhinin.docs/ru/docs/tutorial/request-form-models.md. PR #13552 by @EgorOnishchuk.docs/ko/docs/virtual-environments.md. PR #13630 by @sungchan1.docs/ru/docs/tutorial/header-param-models.md. PR #13526 by @minaton-ru.docs/zh/docs/tutorial/index.md. PR #13374 by @Zhongheng-Cheng.docs/zh/docs/deployment/manually.md. PR #13324 by @Zhongheng-Cheng.docs/zh/docs/deployment/server-workers.md. PR #13292 by @Zhongheng-Cheng.docs/zh/docs/tutorial/first-steps.md. PR #13348 by @Zhongheng-Cheng.inline-snapshot to support different Pydantic versions in the test suite. PR #12534 by @15r10nk.docs/en/mkdocs.yml configuration file. PR #13542 by @svlandeg.🐛 Fix convert_underscores=False for header Pydantic models. PR #13515 by @tiangolo.
docs/en/docs/tutorial/middleware.md. PR #13444 by @Rishat-F.docs/uk/docs/tutorial/metadata.md page. PR #13459 by @valentinDruzhinin.docs/uk/docs/tutorial/response-status-code.md page. PR #13462 by @valentinDruzhinin.docs/uk/docs/tutorial/cookie-param-models.md page. PR #13460 by @valentinDruzhinin.docs/uk/docs/tutorial/header-param-models.md page. PR #13461 by @valentinDruzhinin.docs/ja/docs/virtual-environments.md. PR #13304 by @k94-ishi.docs/ko/docs/tutorial/security/oauth2-jwt.md. PR #13333 by @yes0ng.docs/vi/docs/deployment/cloud.md. PR #13407 by @ptt3199.🐛 Add docs examples and tests (support) for Annotated custom validations, like AfterValidator, revert #13440. PR #13442 by @tiangolo.
♻️ Update internal annotation usage for compatibility with Pydantic 2.11. PR #13314 by @Viicos.
>=0.40.0,<0.47.0. PR #13426 by @musicinmybrain.docs/uk/docs/tutorial/debugging.md. PR #13370 by @valentinDruzhinin.docs/uk/docs/tutorial/query-params.md. PR #13362 by @valentinDruzhinin.docs/uk/docs/tutorial/path-params.md. PR #13354 by @valentinDruzhinin.docs/ja/docs/tutorial/cookie-param-models.md. PR #13330 by @k94-ishi.docs/uk/docs/tutorial/body-multiple-params.md. PR #13408 by @valentinDruzhinin.docs/ja/docs/tutorial/query-param-models.md. PR #13323 by @k94-ishi.docs/uk/docs/tutorial/body-nested-models.md. PR #13409 by @valentinDruzhinin.docs/vi/docs/deployment/versions.md. PR #13406 by @ptt3199.docs/vi/docs/deployment/index.md. PR #13405 by @ptt3199.docs/uk/docs/tutorial/request-forms.md. PR #13383 by @valentinDruzhinin.docs/uk/docs/tutorial/testing.md. PR #13371 by @valentinDruzhinin.🐛 Ensure that HTTPDigest only raises an exception when auto_error is True. PR #2939 by @arthurio.
query_params_str_validations. PR #13218 by @alv2017.app_testing. PR #13220 by @alv2017.dependency_testing. PR #13223 by @alv2017....). PR #13377 by @tiangolo.body-multiple-params. PR #13345 by @DanielYang59.docs/uk/docs/tutorial/header-params.md. PR #13381 by @valentinDruzhinin.docs/uk/docs/tutorial/request-files.md. PR #13395 by @valentinDruzhinin.docs/uk/docs/tutorial/request-form-models.md. PR #13384 by @valentinDruzhinin.docs/uk/docs/tutorial/request-forms-and-files.md. PR #13386 by @valentinDruzhinin.docs/ko/docs/help-fastapi.md. PR #13262 by @Zerohertz.docs/ko/docs/advanced/custom-response.md. PR #13265 by @11kkw.docs/ko/docs/tutorial/security/simple-oauth2.md. PR #13335 by @yes0ng.docs/ru/docs/advanced/response-cookies.md. PR #13327 by @Stepakinoyan.docs/vi/docs/tutorial/static-files.md. PR #11291 by @ptt3199.docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md. PR #13257 by @11kkw.docs/vi/docs/virtual-environments.md. PR #13282 by @ptt3199.docs/uk/docs/tutorial/static-files.md. PR #13285 by @valentinDruzhinin.docs/vi/docs/environment-variables.md. PR #13287 by @ptt3199.docs/vi/docs/fastapi-cli.md. PR #13294 by @ptt3199.docs/uk/docs/features.md. PR #13308 by @valentinDruzhinin.docs/uk/docs/learn/index.md. PR #13306 by @valentinDruzhinin.docs/pt/docs/deployment/https.md. PR #13317 by @Joao-Pedro-P-Holanda.docs/pt/docs/index.md. PR #13328 by @ceb10n.docs/ru/docs/advanced/websockets.md. PR #13279 by @Rishat-F.tests/test_modules_same_name_body/test_main.py. PR #13411 by @alv2017.wrangler-action v3. PR #13415 by @joakimnordling.🐛 Fix OAuth2PasswordRequestForm and OAuth2PasswordRequestFormStrict fixed grant_type "password" RegEx. PR #9783 by @skarfie123.
OAuth2PasswordRequestForm and OAuth2PasswordRequestFormStrict fixed grant_type "password" RegEx. PR #9783 by @skarfie123.APIKeyBase super class. PR #3142 by @ShahriyarR.docs/en/docs/tutorial/extra-models.md. PR #13061 by @timothy-jeong.tutorial002 to deal with tax=0 case. PR #13230 by @togogh.docs/ja/docs/environment-variables.md. PR #13226 by @k94-ishi.docs/ru/docs/advanced/async-tests.md. PR #13227 by @Rishat-F.docs/ru/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md. PR #13252 by @Rishat-F.docs/ru/docs/tutorial/bigger-applications.md. PR #13154 by @alv2017.>=3.2.1,<5.0.0. PR #13273 by @tiangolo.notify_translations.py empty env var handling for PR label events vs workflow_dispatch. PR #13272 by @tiangolo.scripts/notify_translations.py, no need for a custom GitHub Action. PR #13270 by @tiangolo.⬆️ Upgrade python-multipart to >=0.0.18. PR #13219 by @DanielKusyDev.
python-multipart to >=0.0.18. PR #13219 by @DanielKusyDev.>=0.40.0,<0.46.0. PR #13117 by @Kludex.jinja2 to >=3.1.5. PR #13194 by @DanielKusyDev.fastapi-cli UI examples in docs. PR #13107 by @Zhongheng-Cheng.docs/en/docs/virtual-environments.md. PR #13124 by @tiangolo.docs/en/docs/contributing.md. PR #12899 by @kingsubin.docs/en/docs/tutorial/sql-databases.md. PR #13081 by @alv2017.docs/ru/docs/tutorial/query-param-models.md. PR #12994 by @alejsdev.fastapi-cli. PR #13031 by @tiangolo.docs/pt/docs/tutorial/request-forms.md. PR #13216 by @Joao-Pedro-P-Holanda.docs/pt/docs/advanced/settings.md. PR #13209 by @ceb10n.docs/pt/docs/tutorial/security/oauth2-jwt.md. PR #13205 by @ceb10n.docs/id/docs/index.md. PR #13191 by @gerry-sabar.docs/id/docs/tutorial/static-files.md. PR #13092 by @guspan-tanadi.docs/pt/docs/tutorial/security/get-current-user.md. PR #13188 by @ceb10n.docs/pt/docs/advanced/benchmarks.md. PR #13187 by @ceb10n.docs/ru/docs/tutorial/security/first-steps.md. PR #13159 by @Yarous.docs/ja/docs/tutorial/path-params-numeric-validations.md. PR #12238 by @FakeDocument.docs/zh/docs/fastapi-cli.md. PR #13102 by @Zhongheng-Cheng.docs/zh/docs/advanced/security/oauth2-scopes.md. PR #13110 by @ChenPu2002.docs/id/docs/tutorial/path-params.md. PR #13086 by @gerry-sabar.docs/ko/docs/tutorial/sql-databases.md. PR #13093 by @GeumBinLee.docs/zh/docs/async.md. PR #13095 by @Zhongheng-Cheng.docs/zh/docs/advanced/openapi-webhooks.md. PR #13091 by @Zhongheng-Cheng.docs/zh/docs/advanced/async-tests.md. PR #13074 by @Zhongheng-Cheng.docs/uk/docs/fastapi-cli.md. PR #13020 by @ykertytsky.docs/zh/docs/advanced/events.md. PR #12512 by @ZhibangYue./docs/ru/docs/tutorial/sql-databases.md. PR #13079 by @alv2017.docs/zh/docs/advanced/testing-dependencies.md. PR #13066 by @Zhongheng-Cheng.docs/zh-hant/docs/tutorial/index.md. PR #13075 by @codingjenny.docs/zh/docs/tutorial/sql-databases.md. PR #13051 by @Zhongheng-Cheng.docs/zh/docs/tutorial/query-params-str-validations.md. PR #12928 by @Vincy1230.docs/zh/docs/tutorial/header-param-models.md. PR #13040 by @Zhongheng-Cheng.docs/zh/docs/tutorial/path-params.md. PR #12926 by @Vincy1230.docs/zh/docs/tutorial/first-steps.md. PR #12923 by @Vincy1230.docs/ru/docs/deployment/docker.md. PR #13048 by @anklav24.docs/pt/docs/advanced/generate-clients.md. PR #13030 by @vitumenezes.docs/id/docs/tutorial/first-steps.md. PR #13042 by @gerry-sabar.docs/zh/docs/tutorial/cookie-param-models.md. PR #13038 by @Zhongheng-Cheng.docs/zh/docs/tutorial/request-form-models.md. PR #13045 by @Zhongheng-Cheng.docs/ru/docs/virtual-environments.md. PR #13026 by @alv2017.docs/ko/docs/tutorial/testing.md. PR #12968 by @jts8257.docs/ko/docs/advanced/async-test.md. PR #12918 by @icehongssii.docs/ru/docs/tutorial/security/oauth2-jwt.md. PR #10601 by @AlertRED.docs/ru/docs/tutorial/security/simple-oauth2.md. PR #10599 by @AlertRED.docs/ru/docs/tutorial/security/get-current-user.md. PR #10594 by @AlertRED.docs/zh-hant/docs/features.md. PR #12441 by @codingjenny.docs/zh-hant/docs/virtual-environments.md. PR #12791 by @Vincy1230.docs/ko/docs/advanced/templates.md. PR #12726 by @Heumhub.docs/ru/docs/fastapi-cli.md. PR #13041 by @alv2017.docs/ko/docs/tutorial/cookie-param-models.md. PR #13000 by @hard-coders.docs/ko/docs/tutorial/header-param-models.md. PR #13001 by @hard-coders.docs/ko/docs/tutorial/request-form-models.md. PR #13002 by @hard-coders.docs/ko/docs/tutorial/request-forms.md. PR #13003 by @hard-coders.docs/ko/docs/resources/index.md. PR #13004 by @hard-coders.docs/ko/docs/how-to/configure-swagger-ui.md. PR #12898 by @nahyunkeem.docs/ko/docs/advanced/additional-status-codes.md. PR #12715 by @nahyunkeem.docs/zh-hant/docs/tutorial/first-steps.md. PR #12467 by @codingjenny.notify-translations.yml. PR #12915 by @tinyboxvk.🐛 Preserve traceback when an exception is raised in sync dependency with yield. PR #5823 by @sombek.
yield. PR #5823 by @sombek.docs/de/docs/advanced/using-request-directly.md. PR #12685 by @alissadb.docs/de/docs/how-to/conditional-openapi.md. PR #12689 by @alissadb.docs/zh-hant/docs/async.md. PR #12990 by @ILoveSorasakiHina.docs/zh-hant/docs/tutorial/query-param-models.md. PR #12932 by @Vincy1230.docs/ko/docs/advanced/testing-dependencies.md. PR #12992 by @Limsunoh.docs/ko/docs/advanced/websockets.md. PR #12991 by @kwang1215.docs/pt/docs/tutorial/response-model.md. PR #12933 by @AndreBBM.docs/ko/docs/advanced/middlewares.md. PR #12753 by @nahyunkeem.docs/ko/docs/advanced/openapi-webhooks.md. PR #12752 by @saeye.docs/zh/docs/tutorial/query-param-models.md. PR #12931 by @Vincy1230.docs/ru/docs/tutorial/query-param-models.md. PR #12445 by @gitgernit.docs/ko/docs/tutorial/query-param-models.md. PR #12940 by @jts8257.docs/zh/docs/tutorial/sql-databases.md, it references files that are no longer on the repo. PR #12949 by @tiangolo.♻️ Update internal checks to support Pydantic 2.10. PR #12914 by @tiangolo.
docs/en/docs/tutorial/body.md. PR #12757 by @gsheni.docs/en/docs/advanced/testing-dependencies.md. PR #12647 by @AyushSinghal1794.docs/en/docs/tutorial/metadata.md. PR #12773 by @Nimitha-jagadeesha.docs/en/docs/tutorial/dependencies/dependencies-with-yield.md. PR #12045 by @xuvjso.docs/en/docs/tutorial/dependencies/global-dependencies.md. PR #12653 by @vishnuvskvkl.docs/en/docs/tutorial/body-updates.md. PR #12712 by @davioc.docs/en/docs/tutorial/header-param-models.md. PR #12814 by @zhaohan-dong.contributing.md docs, include note to not translate this page. PR #12841 by @tiangolo.docs/en/docs/tutorial/request-forms.md. PR #12648 by @vishnuvskvkl.docs/en/docs/tutorial/request-form-models.md. PR #12649 by @vishnuvskvkl.docs/en/docs/tutorial/security/oauth2-jwt.md. PR #12650 by @OCE1960.docs/vi/docs/tutorial/first-steps.md. PR #12754 by @MxPy.docs/pt/docs/advanced/wsgi.md. PR #12769 by @Nimitha-jagadeesha.docs/en/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md. PR #12815 by @handabaldeep.docs/en/docs/tutorial/dependencies/classes-as-dependencies.md. PR #12813 by @handabaldeep.docs/en/docs/tutorial/middleware.md. PR #12819 by @alejsdev.docs/en/docs/tutorial/security/get-current-user.md. PR #12645 by @OCE1960.docs/en/docs/tutorial/security/first-steps.md. PR #12643 by @OCE1960.docs/de/docs/advanced/additional-responses.md. PR #12821 by @zhaohan-dong.docs/en/docs/advanced/generate-clients.md. PR #12642 by @AyushSinghal1794.docs/zh/docs/advanced/additional-responses.md. PR #12828 by @zhaohan-dong.docs/en/docs/tutorial/path-params-numeric-validations.md. PR #12825 by @zhaohan-dong.docs/en/docs/advanced/testing-websockets.md. PR #12761 by @hamidrasti.docs/en/docs/advanced/using-request-directly.md. PR #12760 by @hamidrasti.docs/advanced/wsgi.md. PR #12758 by @hamidrasti.docs/de/docs/tutorial/middleware.md. PR #12729 by @paintdog.docs/en/docs/tutorial/schema-extra-example.md. PR #12822 by @tiangolo.docs/fr/docs/advanced/additional-responses.md. PR #12634 by @fegmorte.docs/fr/docs/advanced/path-operation-advanced-configuration.md. PR #12633 by @kantandane.docs/fr/docs/advanced/response-directly.md. PR #12632 by @kantandane.docs/en/docs/tutorial/header-params.md. PR #12640 by @vishnuvskvkl.docs/en/docs/tutorial/cookie-param-models.md. PR #12639 by @vishnuvskvkl.docs/en/docs/tutorial/extra-models.md. PR #12638 by @vishnuvskvkl.docs/en/docs/tutorial/cors.md. PR #12637 by @vishnuvskvkl.docs/en/docs/tutorial/dependencies/sub-dependencies.md. PR #12810 by @handabaldeep.docs/en/docs/tutorial/body-nested-models.md. PR #12812 by @zhaohan-dong.docs/en/docs/tutorial/path-operation-configuration.md. PR #12809 by @AlexWendland.docs/en/docs/tutorial/request-files.md. PR #12818 by @zhaohan-dong.docs/en/docs/tutorial/query-param-models.md. PR #12817 by @handabaldeep.docs/en/docs/tutorial/path-params.md. PR #12811 by @AlexWendland.docs/en/docs/tutorial/response-model.md. PR #12621 by @kantandane.docs/en/docs/advanced/websockets.md. PR #12606 by @vishnuvskvkl.docs/en/docs/tutorial/cookie-params.md. PR #12808 by @handabaldeep.docs/en/docs/tutorial/middleware.md. PR #12807 by @AlexWendland.docs/en/docs/advanced/sub-applications.md. PR #12806 by @zhaohan-dong.docs/en/docs/advanced/response-headers.md. PR #12805 by @zhaohan-dong.docs/fr/docs/tutorial/first-steps.md. PR #12594 by @kantandane.docs/en/docs/advanced/response-cookies.md. PR #12804 by @zhaohan-dong.docs/en/docs/advanced/path-operation-advanced-configuration.md. PR #12802 by @zhaohan-dong.docs/en/docs/advanced/response-directly.md. PR #12803 by @handabaldeep.docs/zh/docs/tutorial/background-tasks.md. PR #12798 by @zhaohan-dong.docs/de/docs/tutorial/body-multiple-params.md. PR #12699 by @alissadb.docs/em/docs/tutorial/body-updates.md. PR #12799 by @AlexWendland.docs/en/docs/advanced/response-change-status-code.md. PR #12801 by @handabaldeep.docs/en/docs/advanced/openapi-callbacks.md. PR #12800 by @handabaldeep.docs/fr/docs/tutorial/body-multiple-params.md. PR #12598 by @kantandane.docs/en/docs/tutorial/body-multiple-params.md. PR #12593 by @Tashanam-Shahbaz.docs/pt/docs/tutorial/background-tasks.md. PR #12736 by @bhunao.docs/en/docs/advanced/custom-response.md. PR #12797 by @handabaldeep.docs/pt/docs/python-types.md. PR #12671 by @ceb10n.docs/de/docs/python-types.md. PR #12660 by @alissadb.docs/de/docs/advanced/dataclasses.md. PR #12658 by @alissadb.docs/fr/docs/tutorial/path-params.md. PR #12592 by @kantandane.docs/de/docs/how-to/configure-swagger-ui.md. PR #12690 by @alissadb.docs/en/docs/advanced/security/oauth2-scopes.md. PR #12572 by @krishnamadhavan.docs/en/docs/how-to/conditional-openapi.md. PR #12624 by @rabinlamadong.docs/en/docs/tutorial/dependencies/index.md. PR #12615 by @bharara.docs/en/docs/tutorial/response-status-code.md. PR #12620 by @kantandane.docs/en/docs/how-to/custom-docs-ui-assets.md. PR #12623 by @rabinlamadong.docs/en/docs/advanced/openapi-webhooks.md. PR #12605 by @salmantec.docs/en/docs/advanced/events.md. PR #12604 by @salmantec.docs/en/docs/advanced/dataclasses.md. PR #12603 by @salmantec.docs/es/docs/tutorial/cookie-params.md. PR #12602 by @antonyare93.docs/fr/docs/tutorial/path-params-numeric-validations.md. PR #12601 by @kantandane.docs/fr/docs/tutorial/background-tasks.md. PR #12600 by @kantandane.docs/en/docs/tutorial/encoder.md. PR #12597 by @tonyjly.docs/en/docs/how-to/custom-docs-ui-assets.md. PR #12557 by @philipokiokio.docs/en/docs/how-to/custom-request-and-route.md. PR #12560 by @philipokiokio.docs/ko/docs/advanced/testing-websockets.md. PR #12739 by @Limsunoh.docs/zh-hant/docs/environment-variables.md. PR #12785 by @Vincy1230.docs/zh/docs/environment-variables.md. PR #12784 by @Vincy1230.ko/docs/advanced/response-headers.md. PR #12740 by @kwang1215.docs/zh/docs/virtual-environments.md. PR #12790 by @Vincy1230./docs/ko/docs/environment-variables.md. PR #12526 by @Tolerblanc.docs/ko/docs/history-design-future.md. PR #12646 by @saeye.docs/ko/docs/advanced/advanced-dependencies.md. PR #12675 by @kim-sangah.docs/ko/docs/how-to/conditional-openapi.md. PR #12731 by @sptcnl.docs/ko/docs/advanced/using_request_directly.md. PR #12738 by @kwang1215.docs/ko/docs/advanced/testing-events.md. PR #12741 by @9zimin9.docs/ko/docs/security/index.md. PR #12743 by @kim-sangah.docs/pt/docs/advanced/path-operation-advanced-configuration.md. PR #12762 by @Joao-Pedro-P-Holanda.docs/ko/docs/advanced/wsgi.md. PR #12659 by @Limsunoh.docs/pt/docs/advanced/websockets.md. PR #12703 by @devfernandoa.docs/pt/docs/tutorial/security/simple-oauth2.md. PR #12520 by @LidiaDomingos.docs/ko/docs/advanced/response-directly.md. PR #12674 by @9zimin9.docs/pt/docs/advanced/middleware.md. PR #12704 by @devluisrodrigues.docs/pt/docs/advanced/openapi-callbacks.md. PR #12705 by @devfernandoa.docs/pt/docs/tutorial/request-files.md. PR #12706 by @devluisrodrigues.docs/pt/docs/advanced/custom-response.md. PR #12631 by @Joao-Pedro-P-Holanda.docs/pt/docs/tutorial/metadata.md. PR #12538 by @LinkolnR.docs/ko/docs/tutorial/metadata.md. PR #12541 by @kwang1215.docs/ko/docs/advanced/response-cookies.md. PR #12546 by @kim-sangah.docs/ko/docs/fastapi-cli.md. PR #12515 by @dhdld.docs/ko/docs/advanced/response-change-status-code.md. PR #12547 by @9zimin9.♻️ Update logic to import and check python-multipart for compatibility with newer version. PR #12627 by @tiangolo.
python-multipart for compatibility with newer version. PR #12627 by @tiangolo.docs/fr/docs/tutorial/body.md. PR #12596 by @kantandane.docs/fr/docs/tutorial/debugging.md. PR #12595 by @kantandane.docs/fr/docs/tutorial/query-params-str-validations.md. PR #12591 by @kantandane.docs/fr/docs/tutorial/query-params.md. PR #12589 by @kantandane.docs/en/tutorial/body-fields.md. PR #12588 by @lucaromagnoli.docs/de/docs/tutorial/response-status-code.md. PR #12585 by @abejaranoh.docs/en/docs/tutorial/body.md. PR #12586 by @lucaromagnoli.docs/en/docs/advanced/behind-a-proxy.md. PR #12583 by @imjuanleonard.docs/pl/docs/tutorial/first-steps.md. PR #12584 by @sebkozlo.docs/en/docs/advanced/middleware.md. PR #12582 by @montanarograziano.docs/en/docs/advanced/additional-status-codes.md. PR #12577 by @krishnamadhavan.docs/en/docs/advanced/advanced-dependencies.md. PR #12578 by @krishnamadhavan.docs/en/docs/advanced/additional-responses.md. PR #12576 by @krishnamadhavan.docs/en/docs/tutorial/static-files.md. PR #12575 by @lucaromagnoli.docs/en/docs/advanced/async-tests.md. PR #12568 by @krishnamadhavan.docs/pt/docs/advanced/behind-a-proxy.md. PR #12563 by @asmioglou.docs/de/docs/advanced/security/http-basic-auth.md. PR #12561 by @Nimitha-jagadeesha.docs/en/docs/tutorial/background-tasks.md. PR #12559 by @FarhanAliRaza.docs/fr/docs/python-types.md. PR #12558 by @Ismailtlem.docs/en/docs/how-to/graphql.md. PR #12564 by @philipokiokio.docs/en/docs/how-to/extending-openapi.md. PR #12562 by @philipokiokio.docs/en/docs/how-to/configure-swagger-ui.md. PR #12556 by @tiangolo.docs/en/docs/how-to/separate-openapi-schemas.md. PR #12555 by @tiangolo.docs/en/docs/advanced/security/http-basic-auth.md. PR #12553 by @tiangolo.docs/en/docs/tutorial/first-steps.md. PR #12552 by @tiangolo.docs/en/docs/python-types.md. PR #12551 by @tiangolo.docs/de/docs/advanced/async-tests.md. PR #12567 by @imjuanleonard.docs/pt/docs/tutorial/sql-databases.md. PR #12530 by @ilacftemp.docs/ko/docs/benchmarks.md. PR #12540 by @Limsunoh.docs/pt/docs/how-to/separate-openapi-schemas.md. PR #12518 by @ilacftemp.docs/zh-hant/docs/deployment/index.md. PR #12521 by @codingjenny.docs/zh-hant/docs/deployment/cloud.md. PR #12522 by @codingjenny.docs/zh-hant/docs/how-to/index.md. PR #12523 by @codingjenny.docs/zh-hant/docs/tutorial/index.md. PR #12524 by @codingjenny.docs/zh-hant/docs/how-to/index.md. PR #12468 by @codingjenny.docs/zh-hant/docs/tutorial/index.md. PR #12466 by @codingjenny.docs/pt/docs/tutorial/header-param-models.md. PR #12437 by @Joao-Pedro-P-Holanda.docs/pt/docs/how-to/extending-openapi.md. PR #12470 by @ilacftemp.docs/pt/docs/advanced/dataclasses.md. PR #12475 by @leoscarlato.docs/pt/docs/how-to/custom-request-and-route.md. PR #12483 by @devfernandoa.⬆️ Upgrade Starlette to >=0.40.0,<0.42.0. PR #12469 by @defnull.
docs/zh-hant/docs/fastapi-cli.md. PR #12444 by @codingjenny.docs/zh-hant/docs/deployment/index.md. PR #12439 by @codingjenny.docs/pt/docs/how-to/testing-database.md. PR #12472 by @GuilhermeRameh.docs/pt/docs/how-to/custom-docs-ui-assets.md. PR #12473 by @devluisrodrigues.docs/pt/docs/advanced/response-headers.md. PR #12458 by @leonardopaloschi.docs/zh-hant/docs/deployment/cloud.md. PR #12440 by @codingjenny.docs/pt/docs/python-types.md. PR #12428 by @ceb10n.docs/ru/docs/environment-variables.md. PR #12436 by @wisderfin.docs/zh-hant/docs/resources/index.md. PR #12443 by @codingjenny.docs/zh-hant/docs/about/index.md. PR #12438 by @codingjenny.docs/pt/docs/tutorial/query-param-models.md. PR #12414 by @ceb10n.docs/pt/docs/deployment.md. PR #12427 by @ceb10n.docs/pt/docs/tutorial/body-updates.md. PR #12381 by @andersonrocha0.docs/pt/docs/advanced/response-cookies.md. PR #12417 by @Paulofalcao2002.⬆️ Upgrade Starlette to >=0.37.2,<0.41.0. PR #12431 by @tiangolo.
🐛 Fix openapi generation with responses kwarg. PR #10895 by @flxdot.
Required shadowing from fastapi using Pydantic v2. PR #12197 by @pachewise.base_path for mdx_include Markdown extension in MkDocs. PR #12391 by @tiangolo.docs/project-generation.md. PR #12274 by @kayqueGovetri.docs/pt/docs/tutorial/cookie-param-models.md. PR #12298 by @ceb10n.docs/pt/docs/how-to/graphql.md. PR #12215 by @AnandaCampelo.docs/pt/docs/advanced/security/oauth2-scopes.md. PR #12263 by @ceb10n.docs/pt/docs/deployment/concepts.md. PR #12219 by @marcelomarkus.docs/pt/docs/how-to/conditional-openapi.md. PR #12221 by @marcelomarkus.docs/pt/docs/advanced/response-directly.md. PR #12266 by @Joao-Pedro-P-Holanda.docs/pt/docs/tutorial/cookie-params.md. PR #12297 by @ceb10n.docs/ko/docs/tutorial/index.md. PR #12278 by @kkotipy.docs/pt/docs/advanced/security/http-basic-auth.md. PR #12275 by @andersonrocha0.docs/pt/docs/deployment/cloud.md. PR #12217 by @marcelomarkus.docs/es/docs/python-types.md. PR #12235 by @JavierSanchezCastro.docs/nl/docs/environment-variables.md. PR #12200 by @maxscheijen.docs/pt/docs/deployment/manually.md. PR #12210 by @JoaoGustavoRogel.docs/pt/docs/deployment/server-workers.md. PR #12220 by @marcelomarkus.docs/pt/docs/how-to/configure-swagger-ui.md. PR #12222 by @marcelomarkus.sponsors_badge.yml. PR #12404 by @tiangolo.Now you can declare Query, Header, and Cookie parameters with Pydantic models. 🎉
Now you can declare Query, Header, and Cookie parameters with Pydantic models. 🎉
Query Parameter ModelsUse Pydantic models for Query parameters:
from typing import Annotated, Literal
from fastapi import FastAPI, Query
from pydantic import BaseModel, Field
app = FastAPI()
class FilterParams(BaseModel):
limit: int = Field(100, gt=0, le=100)
offset: int = Field(0, ge=0)
order_by: Literal["created_at", "updated_at"] = "created_at"
tags: list[str] = []
@app.get("/items/")
async def read_items(filter_query: Annotated[FilterParams, Query()]):
return filter_query
Read the new docs: Query Parameter Models.
Header Parameter ModelsUse Pydantic models for Header parameters:
from typing import Annotated
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: Annotated[CommonHeaders, Header()]):
return headers
Read the new docs: Header Parameter Models.
Cookie Parameter ModelsUse Pydantic models for Cookie parameters:
from typing import Annotated
from fastapi import Cookie, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cookies(BaseModel):
session_id: str
fatebook_tracker: str | None = None
googall_tracker: str | None = None
@app.get("/items/")
async def read_items(cookies: Annotated[Cookies, Cookie()]):
return cookies
Read the new docs: Cookie Parameter Models.
Use Pydantic models to restrict extra values for Query parameters (also applies to Header and Cookie parameters).
To achieve it, use Pydantic's model_config = {"extra": "forbid"}:
from typing import Annotated, Literal
from fastapi import FastAPI, Query
from pydantic import BaseModel, Field
app = FastAPI()
class FilterParams(BaseModel):
model_config = {"extra": "forbid"}
limit: int = Field(100, gt=0, le=100)
offset: int = Field(0, ge=0)
order_by: Literal["created_at", "updated_at"] = "created_at"
tags: list[str] = []
@app.get("/items/")
async def read_items(filter_query: Annotated[FilterParams, Query()]):
return filter_query
This applies to Query, Header, and Cookie parameters, read the new docs:
Query, Cookie, Header. PR #12199 by @tiangolo.docs/pt/docs/advanced/security/http-basic-auth.md. PR #12195 by @ceb10n.🐛 Fix form field regression with alias. PR #12194 by @Wurstnase.
alias. PR #12194 by @Wurstnase.docs/pt/docs/tutorial/request-form-models.md. PR #12175 by @ceb10n.docs/zh/docs/project-generation.md. PR #12170 by @waketzheng.docs/nl/docs/python-types.md. PR #12158 by @maxscheijen.⚡️ Improve performance in request body parsing with a cache for internal model fields. PR #12184 by @tiangolo.
docs/pt/docs/virtual-environments.md. PR #12163 by @marcelomarkus.docs/pt/docs/environment-variables.md. PR #12162 by @marcelomarkus.docs/pt/docs/tutorial/testing.md. PR #12164 by @marcelomarkus.docs/pt/docs/tutorial/debugging.md. PR #12165 by @marcelomarkus.docs/ko/docs/project-generation.md. PR #12157 by @BORA040126.issue-manager.yml. PR #12159 by @tiangolo.fastapi/params.py. PR #12143 by @surreal30.You can restrict form fields to only include those declared in a Pydantic model and forbid any extra field sent in the request using Pydantic's model_
You can restrict form fields to only include those declared in a Pydantic model and forbid any extra field sent in the request using Pydantic's model_config = {"extra": "forbid"}:
from typing import Annotated
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
model_config = {"extra": "forbid"}
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
Read the new docs: Form Models - Forbid Extra Form Fields.
Now you can declare form fields with Pydantic models:
Now you can declare form fields with Pydantic models:
from typing import Annotated
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
Read the new docs: Form Models.
This release is mainly a big internal refactor to enable adding support for Pydantic models for Form fields, but that feature comes in the next releas
This release is mainly a big internal refactor to enable adding support for Pydantic models for Form fields, but that feature comes in the next release.
This release shouldn't affect apps using FastAPI in any way. You don't even have to upgrade to this version yet. It's just a checkpoint. 🤓
embed body fields, do not overwrite fields, compute once per router, refactor internals in preparation for Pydantic models in Form, Query and others. PR #12117 by @tiangolo.📝 Fix async test example not to trigger DeprecationWarning. PR #12084 by @marcinsulikowski.
This release is mainly internal refactors, it shouldn't affect apps using FastAPI in any way. You don't even have to upgrade to this version yet. There are a few bigger releases coming right after. 🚀
check_file_field(), rename to ensure_multipart_is_installed() to clarify its purpose. PR #12106 by @tiangolo.create_response_field() to create_model_field() as it's used for more than response models. PR #12103 by @tiangolo.solve_dependencies() using dataclasses. PR #12100 by @tiangolo.analyze_param() to structure data with dataclasses instead of tuple. PR #12099 by @tiangolo.time.perf_counter() in middlewares. PR #12095 by @tiangolo.time.time() to time.perf_counter(). PR #11957 by @domdent.docs_src/path_params_numeric_validations/tutorial006.py. PR #11478 by @MuhammadAshiqAmeer.docs/en/docs/async.md. PR #12062 by @Alec-Gillis.response_class parameter, validations, and returning a response directly. PR #12067 by @tiangolo.CMD exec form. PR #11960 by @GPla.docs/nl/docs/features.md. PR #12101 by @maxscheijen.docs/pt/docs/advanced/testing-events.md. PR #12108 by @ceb10n.docs/pt/docs/advanced/security/index.md. PR #12114 by @ceb10n.docs/nl/docs/index.md. PR #12042 by @svlandeg.docs/zh/docs/how-to/index.md. PR #12070 by @synthpop123.include-hidden-files to True when using the upload-artifact GH action. PR #12118 by @svlandeg.latest-changes GitHub Action. PR #12073 by @tiangolo.🐛 Fix allow_inf_nan option for Param and Body classes. PR #11867 by @giunio-prc.
allow_inf_nan option for Param and Body classes. PR #11867 by @giunio-prc.app.include_router merges nested lifespans. PR #9630 by @Lancetnik.FastAPI.add_api_route(). PR #10240 by @ordinary-jamie.docs/en/docs/virtual-environments.md. PR #12064 by @aymenkrifa.Security. PR #11168 by @0shah0.docs/en/docs/tutorial/body-multiple-params.md. PR #11978 by @svlandeg.email-validator dependency with dash. PR #11515 by @jirikuncar.docs/es/docs/project-generation.md. PR #11947 by @alejsdev.compresslevel parameter on docs for GZipMiddleware. PR #11350 by @junah201.docs/en/docs/tutorial/body.md with Python 3.10 union type example. PR #11415 by @rangzen.docs/pt/docs/tutorial/request_file.md. PR #12018 by @Joao-Pedro-P-Holanda.docs/ja/docs/learn/index.md. PR #11592 by @ukwhatn.docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md. PR #12028 by @xuvjso.docs/ur/docs/benchmarks.md. PR #10046 by @AhsanSheraz..gitignore. PR #11940 by @gitworkflows.⬆️ Allow Starlette 0.38.x, update the pin to >=0.37.2,<0.39.0. PR #11876 by @musicinmybrain.
>=0.37.2,<0.39.0. PR #11876 by @musicinmybrain.docs/pt/docs/tutorial/bigger-applications.md. PR #11971 by @marcelomarkus.docs/pt/docs/advanced/testing-websockets.md. PR #11994 by @ceb10n.docs/pt/docs/advanced/testing-dependencies.md. PR #11995 by @ceb10n.docs/pt/docs/advanced/using-request-directly.md. PR #11956 by @ceb10n.docs/fr/docs/tutorial/body-multiple-params.md. PR #11796 by @pe-brian.docs/zh/docs/tutorial/query-params.md. PR #11557 by @caomingpei.docs/zh/docs/advanced/testing-dependencies.md. PR #11944 by @bestony.docs/pt/docs/advanced/sub-applications.md and docs/pt/docs/advanced/behind-a-proxy.md. PR #11856 by @marcelomarkus.docs/pt/docs/tutorial/cors.md and docs/pt/docs/tutorial/middleware.md. PR #11916 by @wesinalves.docs/fr/docs/tutorial/path-params-numeric-validations.md. PR #11788 by @pe-brian.pyproject.toml, shows in PyPI. PR #11152 by @Pierre-VF.deploy_docs_status.py to account for deploy URLs with or without trailing slash. PR #11965 by @tiangolo.Your coding agent can read these notes before it upgrades. Set up the MCP server →