final-form vs react-hook-form
react-hook-form is downloaded 90.2× more often than final-form (213,259,284 vs 2,365,196 per month), so it has the larger community and more answered questions online. final-form ships 44% less gzipped JavaScript (6.7 kB vs 12.1 kB), which matters if bundle size is a priority.
| Metric | final-form | react-hook-form |
|---|---|---|
| Weekly downloads | 590,803 | 49,546,012✓ |
| Monthly downloads | 2,365,196 | 213,259,284✓ |
| GitHub stars | — | 44,741 |
| Minified size | 20.7 kB✓ | 34.5 kB |
| Minified + gzipped | 6.7 kB✓ | 12.1 kB |
| Dependencies | 1 | 0✓ |
| Open issues | — | 77 |
| Last commit | — | 2026-06-01 |
| Latest version | 5.0.1 | 7.77.0 |
| License | MIT | MIT |
When to choose which
final-form
A framework-agnostic form state core with subscriptions.
Choose it when: You want fine-grained subscription-based updates and a core usable beyond React (with react-final-form).
- + Fine-grained subscriptions
- + Framework-agnostic
- + Small core
- - Needs a binding (react-final-form)
- - Smaller community
react-hook-form
Performant forms with minimal re-renders.
Choose it when: The default for most React forms — uncontrolled inputs keep re-renders minimal, with great TypeScript and tiny size.
- + Minimal re-renders
- + Tiny & fast
- + Schema resolvers (Zod/Yup)
- - Uncontrolled model takes adjusting
- - Refs under the hood
Feature comparison
| Feature | final-form | react-hook-form |
|---|---|---|
| Approach | Subscription-based | Uncontrolled (refs) |
| Re-render performance | Good | Excellent |
| TypeScript | Partial | ✓ Yes |
| Schema validation | Custom | Resolvers (Zod/Yup) |
| Maintenance | Active | Active |
final-form
🏁 Framework agnostic, high performance, subscription-based form state management
Related comparisons
Embed this comparison
A live badge for your README — it updates as the numbers change.
[](https://devcompare.dev/compare/final-form-vs-react-hook-form)Data from npm, Bundlephobia and GitHub. Last updated 2026-06-02.