# What changed in final-form

> 24 changes in final-form 5 from its official release notes, upgrade guides and advisories: 1 breaking, 1 new APIs and options. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/npm/final-form/

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

## final-form 5

### Breaking changes

- beforeSubmit is called before the synchronous errors check and can prevent submission even when there are no synchronous errors. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)

### New APIs and options

- Fields that unregister have their values ignored during validation and submission, without needing destroyOnUnmount; useful for multi-step forms. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)

### Tooling

- A types field is added to package.json for better tooling compatibility. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)

### Fixes and other changes

- Validation now runs correctly when a field has both array-level and item-level validators. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- Per-field async promises are tracked individually so stale results from previous runs can't overwrite current ones. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- A stale promise is cleared after rejection so it cannot retry forever. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- blur is now guaranteed to always be a function. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- change is now guaranteed to always be a function. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- Unregistering a field while validation is in flight no longer crashes. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- Dirty state is now tracked for unregistered FieldArray fields. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- focus is now guaranteed to always be a function. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- FormState.values is now correctly typed as non-optional. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- getValidators no longer crashes when it encounters an undefined field. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- initialValues now update when a field's initialValue prop changes. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- The TypeScript initialization error for isEqual is fixed. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- keepDirtyOnReinitialize now works correctly with array fields. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- The modified flag is cleared after reset() or initialize(). (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- Decimal, negative, and zero-padded numbers are treated as object keys rather than array indexes. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- Unregistering a field that had been renamed no longer crashes. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- Fields can now be registered with reserved property names such as constructor. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- String error values are no longer lost when removing nested field keys. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- setIn no longer crashes when state is undefined. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- The submit function's return type in the type declarations is fixed. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
- submitErrors are no longer wiped when synchronous validation fails after a failed submission. (5.0.1) — [release notes](https://github.com/final-form/final-form/releases/tag/v5.0.1)
