Modyra · form engine for TypeScript
Typed forms, arrays, async validation, drafts, undo/redo, injection prevention, one schema for client and server — in the smallest realistic bundle of any library we measured, across seven frameworks.
The bundle that matters
Not the whole-package worst case — the exports a typed form with array fields and validation actually imports, minified and gzipped, measured with both esbuild and rollup.
esbuild gzip, measured 2026-07-21 against the published packages —the full methodology has the rollup numbers, exact versions and per-package breakdown. And Modyra's 10.6 KB already includes drafts, undo/redo and injection prevention — none of the others on this chart ship any of the three.
One engine, unique by default
form.mutate() coalesces programmatic bursts too.The scoreboard
Draft autosave, undo/redo, wizard gating, injection prevention, dynamic/AI-declared forms, bundled UI — same six rows as the feature matrix above, counted per library. Not "fewer" — zero.
* TanStack Form lists persistence APIs on its v1 roadmap, unshipped at time of writing — counted as not built-in. Full row-by-row matrix: the comparison doc.
Bring your framework
Angular gets real signals. Solid gets real signals. Vue gets real reactivity. Everyone else gets vanillaReactivity()and a proper external-store bridge — never a second, competing reactive graph bolted onto the framework's own.
Where we lose
We spent this cycle hardening the reactivity contract every adapter is tested against instead of defending a leaderboard number — and we're not hiding what that cost.
Whole-entry bundle regressed
Importing the entire package (not what a real consumer's bundler keeps) grew from 10.7 KB to 14.1 KB gzip after this cycle's reactivity work — real ownership scopes, typed errors and a hardened effect scheduler, not dead code. It cost us the #2 spot on that specific measurement.
The realistic surface — what you actually ship — only moved 9.4 → 10.6 KB, and still beats every library we measured. Two of the four bugs this hardening pass caught were already live in shipped code: a cross-runtime observation bug in the React/Preact stores, and a scheduler bug that could silently starve sibling effects. We'd rather publish that trade than a quieter number.
Try it in one tab
Every framework starter below runs on @modyra/*@0.4.0 straight from npm — not a mocked demo.