Catalog / FastAPI

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.

0.162.0breaking

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

0.160.0breaking

Query, header, cookie, and form parameter models now apply their extra configuration to all submitted fields in the same parameter location, consistent with Pydantic behavior. This includes fields declared in other models, individual parame

0.155.0breakingdeprecatedremoved

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

0.151.0breaking

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

0.150.0breaking

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

0.149.0breaking

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

0.148.0breaking

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,

0.147.0breakingadded

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

0.146.0breakingdeprecated

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.

0.145.0breakingdeprecated

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.

0.143.0breaking

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

0.137.0breakingsecurityadded

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 "

0.132.0breakingaddedchanged

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

0.131.0breakingdeprecated

Breaking Changes πŸ—‘οΈ Deprecate ORJSONResponse and UJSONResponse. PR #14964 by @tiangolo.

0.129.0breakingchanged

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

0.128.0breaking

Breaking Changes βž– Drop support for pydantic.v1. PR #14609 by @tiangolo. Internal βœ… Run performance tests only on Pydantic v2. PR #14608 by @tiangolo.

0.127.0breakingaddeddeprecated

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

0.125.0breakingaddedchanged

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