When no file is selected, browsers submit a file part with an empty filename and empty content. FastAPI now treats this as missing: required file fields return a validation error, and fields with defaults or default factories use them. Unselected inputs are ignored in lists of files. Named zero-byte files are still accepted.
Breaking Changes
🐛 Treat unselected browser file inputs as missing. PR #16534 by @tiangolo.
Browsers submit empty text inputs as empty strings (""). FastAPI now treats empty scalar form values as missing in form models, matching individual Form parameters. Required fields return a validation error. Fields with defaults or default factories use them and remain unset in model_dump(exclude_unset=True).
Empty strings inside lists are preserved. Omitted boolean form fields still become False. JSON requests and direct Pydantic validation are unchanged.
Breaking Changes
🐛 Treat empty scalar values as missing in form models. PR #16529 by @tiangolo.
Defaults for omitted Query, Header, Cookie, and Form parameters and model fields are no longer treated as user input. Defaults are not validated unless validate_default=True is enabled. If you rely on validators running for omitted values, enable default validation with Field(validate_default=True) for model fields or, for example, Query(validate_default=True) for individual parameters. Body(validate_default=True) is now honored too.
For parameter models, applying a default no longer marks a field as explicitly set, so model_dump(exclude_unset=True) excludes it. Default factories run once, and validation errors no longer include injected defaults in input.
Omitted boolean form fields still become False and count as explicitly set.
Breaking Changes
🐛 Fix default handling for request parameters and models. PR #16527 by @tiangolo.
Omitted bool and bool | None form fields are now interpreted as False, matching unchecked HTML checkboxes. This applies to individual Form parameters and form models, including required fields and fields with defaults of True or None. The inferred value is considered explicitly set, including in model_dump(exclude_unset=True).
JSON requests and direct Pydantic validation are unchanged. See Boolean Form Fields.
Breaking Changes
🐛 Treat omitted boolean form fields as False. PR #16523 by @tiangolo.
Internal
✅ Add tests for parameter defaults, nullability, and browser form behavior. PR #14829 by @YuriiMotov.
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.
🔕Ignore: Close this PR and you won't be reminded about this update again.
If you want to rebase/retry this PR, check this box
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [fastapi](https://github.com/fastapi/fastapi) ([changelog](https://fastapi.tiangolo.com/release-notes/)) | `0.146.0` → `0.150.0` |  |  |
---
### Release Notes
<details>
<summary>fastapi/fastapi (fastapi)</summary>
### [`v0.150.0`](https://github.com/fastapi/fastapi/releases/tag/0.150.0)
[Compare Source](https://github.com/fastapi/fastapi/compare/0.149.0...0.150.0)
When no file is selected, browsers submit a file part with an empty filename and empty content. FastAPI now treats this as missing: required file fields return a validation error, and fields with defaults or default factories use them. Unselected inputs are ignored in lists of files. Named zero-byte files are still accepted.
##### Breaking Changes
- 🐛 Treat unselected browser file inputs as missing. PR [#​16534](https://github.com/fastapi/fastapi/pull/16534) by [@​tiangolo](https://github.com/tiangolo).
### [`v0.149.0`](https://github.com/fastapi/fastapi/releases/tag/0.149.0)
[Compare Source](https://github.com/fastapi/fastapi/compare/0.148.0...0.149.0)
Browsers submit empty text inputs as empty strings (`""`). FastAPI now treats empty scalar form values as missing in form models, matching individual `Form` parameters. Required fields return a validation error. Fields with defaults or default factories use them and remain unset in `model_dump(exclude_unset=True)`.
Empty strings inside lists are preserved. Omitted boolean form fields still become `False`. JSON requests and direct Pydantic validation are unchanged.
##### Breaking Changes
- 🐛 Treat empty scalar values as missing in form models. PR [#​16529](https://github.com/fastapi/fastapi/pull/16529) by [@​tiangolo](https://github.com/tiangolo).
### [`v0.148.0`](https://github.com/fastapi/fastapi/releases/tag/0.148.0)
[Compare Source](https://github.com/fastapi/fastapi/compare/0.147.0...0.148.0)
Defaults for omitted `Query`, `Header`, `Cookie`, and `Form` parameters and model fields are no longer treated as user input. Defaults are not validated unless `validate_default=True` is enabled. If you rely on validators running for omitted values, enable default validation with `Field(validate_default=True)` for model fields or, for example, `Query(validate_default=True)` for individual parameters. `Body(validate_default=True)` is now honored too.
For parameter models, applying a default no longer marks a field as explicitly set, so `model_dump(exclude_unset=True)` excludes it. Default factories run once, and validation errors no longer include injected defaults in `input`.
Omitted boolean form fields still become `False` and count as explicitly set.
##### Breaking Changes
- 🐛 Fix default handling for request parameters and models. PR [#​16527](https://github.com/fastapi/fastapi/pull/16527) by [@​tiangolo](https://github.com/tiangolo).
### [`v0.147.0`](https://github.com/fastapi/fastapi/releases/tag/0.147.0)
[Compare Source](https://github.com/fastapi/fastapi/compare/0.146.0...0.147.0)
Omitted `bool` and `bool | None` form fields are now interpreted as `False`, matching unchecked HTML checkboxes. This applies to individual `Form` parameters and form models, including required fields and fields with defaults of `True` or `None`. The inferred value is considered explicitly set, including in `model_dump(exclude_unset=True)`.
JSON requests and direct Pydantic validation are unchanged. See [Boolean Form Fields](https://fastapi.tiangolo.com/tutorial/request-forms/#boolean-form-fields).
##### Breaking Changes
- 🐛 Treat omitted boolean form fields as False. PR [#​16523](https://github.com/fastapi/fastapi/pull/16523) by [@​tiangolo](https://github.com/tiangolo).
##### Internal
- ✅ Add tests for parameter defaults, nullability, and browser form behavior. PR [#​14829](https://github.com/fastapi/fastapi/pull/14829) by [@​YuriiMotov](https://github.com/YuriiMotov).
</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.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- 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.161.1, which is a pending version that has not yet passed the Minimum Release Age threshold.
Renovate was attempting to update to 0.150.0
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.161.1, which is a pending version that has not yet passed the Minimum Release Age threshold.
Renovate was attempting to update to 0.150.0
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:
0.146.0→0.150.0Release Notes
fastapi/fastapi (fastapi)
v0.150.0Compare Source
When no file is selected, browsers submit a file part with an empty filename and empty content. FastAPI now treats this as missing: required file fields return a validation error, and fields with defaults or default factories use them. Unselected inputs are ignored in lists of files. Named zero-byte files are still accepted.
Breaking Changes
v0.149.0Compare Source
Browsers submit empty text inputs as empty strings (
""). FastAPI now treats empty scalar form values as missing in form models, matching individualFormparameters. Required fields return a validation error. Fields with defaults or default factories use them and remain unset inmodel_dump(exclude_unset=True).Empty strings inside lists are preserved. Omitted boolean form fields still become
False. JSON requests and direct Pydantic validation are unchanged.Breaking Changes
v0.148.0Compare Source
Defaults for omitted
Query,Header,Cookie, andFormparameters and model fields are no longer treated as user input. Defaults are not validated unlessvalidate_default=Trueis enabled. If you rely on validators running for omitted values, enable default validation withField(validate_default=True)for model fields or, for example,Query(validate_default=True)for individual parameters.Body(validate_default=True)is now honored too.For parameter models, applying a default no longer marks a field as explicitly set, so
model_dump(exclude_unset=True)excludes it. Default factories run once, and validation errors no longer include injected defaults ininput.Omitted boolean form fields still become
Falseand count as explicitly set.Breaking Changes
v0.147.0Compare Source
Omitted
boolandbool | Noneform fields are now interpreted asFalse, matching unchecked HTML checkboxes. This applies to individualFormparameters and form models, including required fields and fields with defaults ofTrueorNone. The inferred value is considered explicitly set, including inmodel_dump(exclude_unset=True).JSON requests and direct Pydantic validation are unchanged. See Boolean Form Fields.
Breaking Changes
Internal
Configuration
📅 Schedule: (in timezone Europe/Warsaw)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
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