npm / final-form
final-form
What changed in final-form 5, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-21.
1 breaking1 new APIs and options1 tooling21 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initfinal-form 524 changes
Breaking changes 1
beforeSubmit is called before the synchronous errors check and can prevent submission even when there are no synchronous errors.
New APIs and options 1
Fields that unregister have their values ignored during validation and submission, without needing destroyOnUnmount; useful for multi-step forms.
Tooling 1
A types field is added to package.json for better tooling compatibility.
Fixes and other changes 21
Validation now runs correctly when a field has both array-level and item-level validators.
Per-field async promises are tracked individually so stale results from previous runs can't overwrite current ones.
A stale promise is cleared after rejection so it cannot retry forever.
blur is now guaranteed to always be a function.
change is now guaranteed to always be a function.
Unregistering a field while validation is in flight no longer crashes.
Dirty state is now tracked for unregistered FieldArray fields.
focus is now guaranteed to always be a function.
FormState.values is now correctly typed as non-optional.
getValidators no longer crashes when it encounters an undefined field.
initialValues now update when a field's initialValue prop changes.
The TypeScript initialization error for isEqual is fixed.
keepDirtyOnReinitialize now works correctly with array fields.
The modified flag is cleared after reset() or initialize().
Decimal, negative, and zero-padded numbers are treated as object keys rather than array indexes.
Unregistering a field that had been renamed no longer crashes.
Fields can now be registered with reserved property names such as constructor.
String error values are no longer lost when removing nested field keys.
setIn no longer crashes when state is undefined.
The submit function's return type in the type declarations is fixed.
submitErrors are no longer wiped when synchronous validation fails after a failed submission.