Skip to content

Overview

Feature matrix

Kin FormReact Hook FormFormikTanStack Form
Zero dependencies⚠️
Framework-agnostic core
Type-safe nested field paths
Standard Schema support⚠️⚠️
Nested groups/arrays as first-class nodes⚠️⚠️
Selective re-rendering⚠️
Built-in async-validation debounce
Declarative cross-field revalidation⚠️

✅ full support · ⚠️ partial or conditional · ❌ not supported

Bundle Size

4.8 KB
Kin Form
13.0 KB
React Hook Form
13.9 KB
Formik
18.5 KB
TanStack Form

React usage, minified + gzipped, same toolchain for every library.

Every library above is measured directly with the same toolchain — rolldown and its own built-in minifier, then gzip. That's not the same as Bundlephobia, which minifies with terser by default and can produce different sizes for the same source. Reproducible via deno task --cwd scripts bundle-size.

Performance

Smaller is better.

Initial mount (84 fields)

2.87 ms
Kin Form
5.14 ms
React Hook Form
2.38 ms
Formik
9.50 ms
TanStack Form

Flat field update burst (800x)

1.39 ms
Kin Form
66.55 ms
React Hook Form
3.30 ms
Formik
564.24 ms
TanStack Form

Nested field update burst (800x)

3.68 ms
Kin Form
166.63 ms
React Hook Form
6.36 ms
Formik
574.47 ms
TanStack Form

Array swap burst (800x, cycling adjacent pairs)

72.29 ms
Kin Form
221.32 ms
React Hook Form
11.99 ms
Formik
1514.68 ms
TanStack Form

Array insert/remove burst (800x)

33.40 ms
Kin Form
434.70 ms
React Hook Form
5.10 ms
Formik
1608.80 ms
TanStack Form

Flat field update burst + sync validator (800x)

3.42 ms
Kin Form
160.25 ms
React Hook Form
67.66 ms
Formik
709.82 ms
TanStack Form

Debounced async validation (800 updates, 50ms debounce)

90.56 ms
Kin Form
221.59 ms
React Hook Form
98.79 ms
Formik
952.59 ms
TanStack Form

Whole-form zod schema validation (on submit)

2.07 ms
Kin Form
4.98 ms
React Hook Form
2.84 ms
Formik
29.95 ms
TanStack Form

Untouched sibling re-renders (800 updates)

Flat field update burst (800x)

0
Kin Form
0
React Hook Form
19
Formik
0
TanStack Form

Nested field update burst (800x)

0
Kin Form
0
React Hook Form
3
Formik
3
TanStack Form

These are wall-clock numbers from one shared ~84-field form (flat fields, a nested group, an array) in a real (Happy DOM) React tree, reproducible via deno task --cwd scripts speed-bench.

The benchmark also counts re-renders per scenario — how many untouched sibling fields re-render when one field updates, charted above for the two scenarios where that count is clean and isolated.

Detailed comparisons

Released under the MIT License.
Copyright © 2026-present Man Hoang