# What changed in wtforms

> 33 changes in wtforms 3 from its official release notes, upgrade guides and advisories: 2 breaking, 1 deprecations, 10 new APIs and options. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/pypi/wtforms/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## wtforms 3

### Breaking changes

- Render-time checked kwargs take precedence over field.checked. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- Radio labels no longer render a for attribute. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)

### Deprecations

- DateTimeField is deprecated. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)

### New APIs and options

- ButtonField is implemented. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- Datalist is implemented. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- A DateRange validator, similar to NumberRange, is implemented. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- DateTimeLocalField accepts a tz parameter. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- The Email validator supports test_environment. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- Error messages can be customized. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- The formdata parameter is passed to post_process. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- RangeInput implements min and max parameters. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- The Regexp validator allows customization of its match method. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- SelectField supports Enum choices, with improved enum coercion and backward compatibility. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)

### Performance

- URL validation is faster on hostnames with many dashes. (3.3.1) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.1)

### Behavior and default changes

- Choices callables are resolved lazily. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- FloatField uses NumberInput by default. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- html_params returns Markup. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- ListField uses Meta.bind_field instead of the default bind method. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- The URL validator accepts user/password and uses urllib.urlparse. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- The UUID validator accepts uuid.UUID objects. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)

### Fixes and other changes

- FieldList keeps the form prefix when renumbering its entries. (3.3.1) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.1)
- Choice and SelectChoice dataclasses are re-introduced. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- The Email validator respects email_validator default values. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- post_process is appended on new FieldList items. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- FieldList resets index state when process is called, handles entries with indices, and uses consecutive IDs after insert and remove. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- Double quotes in HTML attribute values are escaped. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- Numeric fields handle TypeError. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- WTForms supports Python 3.15. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- The Regexp validator sets the HTML input pattern attribute. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- render_kw is copied for each form instance. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- False values are handled correctly with Select. (3.3.0) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.3.0)
- Supports Python versions from 3.10 to 3.14. (3.2.2) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.2.2)
- Fixes validation being disabled when formdata is provided. (3.2.2) — [release notes](https://github.com/pallets-eco/wtforms/releases/tag/3.2.2)
