A look at how TypeScript projects came to treat schemas as the source of truth for data, why the big form libraries were designed before that happened, and what a form library looks like when it's designed after.
I work on Formisch, so I'm obviously biased, and you should keep that in mind the whole way through. That said, most of this post is about the wider ecosystem rather than about Formisch itself, and I've tried to keep every claim in here something you can go verify on your own. Formisch mostly shows up at the end.
TL;DR: Over the last five years or so, TypeScript developers have pretty much settled on schema libraries like Zod, Valibot, and ArkType as the single place where they describe what their data looks like, and that agreement is now formalized in the Standard Schema spec. The major form libraries were all designed before this happened, so their schema support is an adapter layer on top of an older architecture, which works fine, but leaves you maintaining two descriptions of every form and keeping them in sync yourself. Formisch is what you get when someone designs a form library after the shift instead of before it, and I'd argue that difference matters more than any individual feature comparison.






