unstale

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 init

@unstale/cli on npm

final-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.

    5.0.1release notes

New APIs and options 1

  • Fields that unregister have their values ignored during validation and submission, without needing destroyOnUnmount; useful for multi-step forms.

    5.0.1release notes

Tooling 1

  • A types field is added to package.json for better tooling compatibility.

    5.0.1release notes

Fixes and other changes 21

  • Validation now runs correctly when a field has both array-level and item-level validators.

    5.0.1release notes

  • Per-field async promises are tracked individually so stale results from previous runs can't overwrite current ones.

    5.0.1release notes

  • A stale promise is cleared after rejection so it cannot retry forever.

    5.0.1release notes

  • blur is now guaranteed to always be a function.

    5.0.1release notes

  • change is now guaranteed to always be a function.

    5.0.1release notes

  • Unregistering a field while validation is in flight no longer crashes.

    5.0.1release notes

  • Dirty state is now tracked for unregistered FieldArray fields.

    5.0.1release notes

  • focus is now guaranteed to always be a function.

    5.0.1release notes

  • FormState.values is now correctly typed as non-optional.

    5.0.1release notes

  • getValidators no longer crashes when it encounters an undefined field.

    5.0.1release notes

  • initialValues now update when a field's initialValue prop changes.

    5.0.1release notes

  • The TypeScript initialization error for isEqual is fixed.

    5.0.1release notes

  • keepDirtyOnReinitialize now works correctly with array fields.

    5.0.1release notes

  • The modified flag is cleared after reset() or initialize().

    5.0.1release notes

  • Decimal, negative, and zero-padded numbers are treated as object keys rather than array indexes.

    5.0.1release notes

  • Unregistering a field that had been renamed no longer crashes.

    5.0.1release notes

  • Fields can now be registered with reserved property names such as constructor.

    5.0.1release notes

  • String error values are no longer lost when removing nested field keys.

    5.0.1release notes

  • setIn no longer crashes when state is undefined.

    5.0.1release notes

  • The submit function's return type in the type declarations is fixed.

    5.0.1release notes

  • submitErrors are no longer wiped when synchronous validation fails after a failed submission.

    5.0.1release notes