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 models *1 | π’ | π΄ | π΄ | π΄ |
| Granular reactivity *2 | π’ | π’ *2 | π’ *2 | π’ *2 |
| Standard Schema support | π’ | π’ | π’ | π΄ |
| SSR support | π’ | π’ | π΄ | π΄ |
| Devtools | π‘ *3 | π’ | π’ | π΄ |
| Field groups support | π’ | π’ | π΄ | π΄ |
| Array fields | π’ | π’ | π’ | π’ |
| Built-in async validation and debounce | π’ | π’ | π‘ *4 | π΄ |
| First-class support for dependent fields and reactive validation rules | π’ | π‘ *5 | π΄ | π΄ |
| Built-in fields input/output transformers | π’ | π΄ | π΄ | π’ |
| First-class support for abstract field components | π’ | π’ | π’*6 | π΄ |
- Decoupled form models - the form 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 model can be tested, reused, or ported 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 debugger is available at this moment
- 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