Comparison
Legend:
- π’ - fully supported
- π‘ - partial support
- π΄ - not supported
Bundle size is calculated based on the core API and any other dependencies required for the library to function. The core API selection is approximate and may not be fully accurate.
| Feature | Reatom Form | TanStack Form | React Hook Form |
Formisch (ex Modular Forms) |
|---|---|---|---|---|
| Github |
|
|
|
|
| Supported rendering frameworks | React, Preact, Vue, Solid, Lit, Reatom JSX | React, Vue, Angular, Solid, Lit | React | React, Solid, Vue, Svelte, Qwik, Preact |
| Bundle size |
|
|
|
|
| Decoupled form and field models *1 | π’ | π΄ | π΄ | π΄ |
| Granular reactivity *2 | π’ | π’ *2 | π’ *2 | π’ *2 |
| Standard Schema support | π’ | π’ | π’ | π΄ |
| SSR support | π’ | π’ | π΄ | π΄ |
| Devtools | π‘ *3 | π’ | π’ | π΄ |
| Field groups support | π’ | π’ | π΄ | π΄ |
| Highly optimized array fields | π’ | π‘ *4 | π‘ *4 | π‘ *4 |
| Built-in async validation and debounce | π’ | π’ | π‘ *5 | π΄ |
| First-class support for dependent fields and reactive validation rules | π’ | π‘ *6 | π΄ | π΄ |
| Built-in fields input/output transformers | π’ | π΄ | π΄ | π’ |
| First-class support for abstract field components | π’ | π’ | π’ *7 | π΄ |
| First-class support for state persistence and cross-tab sync | π’ | π΄ | π΄ | π΄ |
| Built-in element reference and focus management | π’ | π΄ | π’ | π‘ *8 |
- Decoupled form and field models - the form or field logic (state, validation, and field dependencies) is fully defined as a standalone entity outside of the UI frameworkβs lifecycle. It indicates whether the entire form/fields/group of fields model can be tested, reused, or binded to another framework without modifying the business logic, leaving the UI layer responsible only for data binding.
- Reactivity granularity there is limited to static dependency lists, while ideal behavior would involve automatic tracking like in signal-based architectures
- Only debug logger is available at this moment
- List implementation may have performance issues when rendering a large number of elements and may be poorly optimized for virtualization
- No built-in debounce and validation concurrency solution
- Validators are currently limited to subscribing to the state of other fields or form submission events. However,Β validation rule reactivity implies the ability to subscribe to any data source to dynamically update the rules.
- Available only as a separate package
@hookform/lenses - There is a way to programmatically trigger focus on a field, but there is no access to the element reference itself