Omitted bool and bool | None form fields now use their declared defaults or produce missing-field errors, consistent with other fields and Pydantic behavior. FastAPI no longer infers False for omitted booleans. This applies to individual fo
FastAPI breaking changes
The 18 releases whose own notes call out a breaking change, out of 102 the archive holds. Scattered one per release page, this is a run nobody can see; gathered, it is the shape of how often FastAPI asks you to change your code.
- Tagged breaking
- 18 of 102 releases
- Roughly
- 1 in 6 releases held here
- Most recent
- 23 Oct 2026 yesterday
- Across
- 10 months back to 17 Dec 2025
How this is decided
A release appears here because the word breaking is in the notes its publisher wrote, not because anyone here read the diff. That cuts both ways. A release that changed an API without using the word is missing from this page, and a release that used the word about something minor is on it. It is the publisherβs own signal, reported rather than judged, which is the same rule the security page follows.
Newest first
All FastAPI releasesQuery, header, cookie, and form parameter models now apply their extra configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parame
The deprecated **extra keyword arguments have been removed from Path, Query, Header, Cookie, Body, Form, and File. Unknown keyword arguments now raise TypeError. For additional JSON Schema properties, replace, for example, Query(custom="val
JSON request bodies now distinguish an explicit null from an omitted value. For individual Body parameters, null is validated as None: nullable types accept it, and non-nullable types reject it even when a default is defined. Defaults and d
When no file is selected, browsers submit a file part with an empty filename and empty content. FastAPI now treats this as missing: required file fields return a validation error, and fields with defaults or default factories use them. Unse
Browsers submit empty text inputs as empty strings (""). FastAPI now treats empty scalar form values as missing in form models, matching individual Form parameters. Required fields return a validation error. Fields with defaults or default
Defaults for omitted Query, Header, Cookie, and Form parameters and model fields are no longer treated as user input. Defaults are not validated unless validate_default=True is enabled. If you rely on validators running for omitted values,
Omitted bool and bool | None form fields are now interpreted as False, matching unchecked HTML checkboxes. This applies to individual Form parameters and form models, including required fields and fields with defaults of True or None. The i
The root_path parameter in FastAPI() is deprecated. Configure the server with fastapi run --root-path /api/v1 instead. Breaking Changes ποΈ Deprecate the root_path parameter in FastAPI. PR #16520 by @tiangolo.
Breaking Changes π₯ Remove deprecated openapi_prefix and unused **extra from FastAPI. PR #16518 by @tiangolo. Docs π Document URL paths in templates. PR #16517 by @tiangolo.
Automatic OpenTelemetry exporter setup is now opt-in. If you rely on FastAPI to configure exporters from OTEL_* environment variables, set FASTAPI_OTEL_AUTO_CONFIGURE=true or use FastAPI(telemetry={"auto_configure": True}) to retain the pre
Breaking Changes β»οΈ 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 "
Breaking Changes ποΈ Add strict_content_type checking for JSON requests. PR #14978 by @tiangolo. Now FastAPI checks, by default, that JSON requests have a Content-Type header with a valid JSON value, like application/json, and rejects reque
Breaking Changes ποΈ Deprecate ORJSONResponse and UJSONResponse. PR #14964 by @tiangolo.
Breaking Changes β Drop support for Python 3.9. PR #14897 by @tiangolo. Refactors π¨ Update internal types for Python 3.10. PR #14898 by @tiangolo. Docs π Update highlights in webhooks docs. PR #14905 by @tiangolo. π Update source example
Breaking Changes β Drop support for pydantic.v1. PR #14609 by @tiangolo. Internal β Run performance tests only on Pydantic v2. PR #14608 by @tiangolo.
Breaking Changes π Add deprecation warnings when using pydantic.v1. PR #14583 by @tiangolo. Translations π§ Add LLM prompt file for Korean, generated from the existing translations. PR #14546 by @tiangolo. π§ Add LLM prompt file for Japane
Breaking Changes π§ Drop support for Python 3.8. PR #14563 by @tiangolo. This would actually not be a breaking change as no code would really break. Any Python 3.8 installer would just refuse to install the latest version of FastAPI and wou