# Comparison

> This document is the Markdown version of [formisch.dev/react-native/guides/comparison/](https://formisch.dev/react-native/guides/comparison/). For the complete documentation index, see [llms.txt](https://formisch.dev/llms.txt).

Formisch is one of several form libraries available for React Native. The two most common alternatives, [React Hook Form](https://react-hook-form.com) and [TanStack Form](https://tanstack.com/form/latest), also run in React Native. This page is meant as a quick reference for picking the right tool. For a deeper explanation of the architectural differences and the reasoning behind each row of the table below, see our [long-form comparison article](/blog/react-form-library-comparison.md) — it was written for React on the web, but the architecture it describes applies equally to React Native.

## At a glance

|                        | **Formisch**                                                   | React Hook Form                     | TanStack Form                                         |
| ---------------------- | -------------------------------------------------------------- | ----------------------------------- | ----------------------------------------------------- |
| Type source            | Inferred from schema                                           | Generic you declare                 | Inferred from `defaultValues`                         |
| Validation location    | Defined in schema                                              | Per-field or resolver               | Per-validator config                                  |
| Validation timing      | Form-wide `validate` / `revalidate`                            | Form-wide `mode` option             | Per-validator trigger                                 |
| Async validation       | Built-in via schema                                            | Manual loading state                | Built-in `isValidating`                               |
| Re-render scope        | Automatic per signal                                           | Manual via `watch` / `useFormState` | Automatic per subscription                            |
| Schema libraries       | Valibot                                                        | Any via resolvers                   | Standard Schema                                       |
| Bundle size (min+gzip) | From ~2.5 kB                                                   | ~12 kB                              | ~15 kB                                                |
| Framework support      | Angular, React, React Native, Preact, Solid, Svelte, Vue, Qwik | React, React Native                 | React, React Native, Vue, Solid, Svelte, Lit, Angular |

The table is intentionally short. It only covers the dimensions that most often drive a library choice in practice. Other differences such as devtools, ecosystem maturity, and community size are real but tend to matter less than how each library handles types, validation, and re-renders.

## Why Formisch?

Three reasons to pick Formisch over the alternatives above:

**One schema, no second source of truth.** A single Valibot schema is everything the form needs: the runtime validator, the source of types, and the description of the form's structure — all at once. There is no separate TypeScript generic to declare, no `defaultValues` object to keep aligned with the schema, no resolver to configure. When the schema changes, every part of the form follows — at compile time and at runtime.

**The smallest bundle, by a wide margin.** Formisch starts at ~2.5 kB and grows only as you import additional methods like `focus`, `getInput`, and `reset`. That is several times smaller than the alternatives in the table above — and it stays that way because the core is intentionally small and the library is fully tree-shakable, so methods you don't import don't end up in your bundle.

**Type safety that stays fast.** Types flow from the schema through every API, including deeply nested paths and field arrays. The inference is structured to keep TypeScript editor performance from degrading as schemas grow — which matters in large codebases where heavily-generic form libraries become a friction point.

## Which library should you use?

**React Hook Form** is a mature, well-documented choice with a large community and years of production usage. In React Native there are no DOM inputs to `register`, so each `TextInput` is wired up through its `Controller` component, which adds a wrapper per field. For simple to moderately complex forms, it remains a reasonable default. The tradeoffs only become visible as forms grow: types and schema drift out of sync, validation rules spread across components, and re-render scope becomes your responsibility.

**TanStack Form** is a good fit when you need fine-grained control over validation timing and built-in async validation handling without building that infrastructure yourself. It is also the natural choice if your team is already invested in the TanStack ecosystem and values a consistent mental model across data fetching, routing, and forms.

**Formisch** makes the most sense for new projects in TypeScript-heavy codebases, especially when you expect forms to grow in complexity. The schema-first design means there is a single source of truth for types, runtime validation, and form structure, so there is less to keep aligned over time. The main consideration is that Formisch currently supports only [Valibot](https://valibot.dev) as the schema library.

## Migrating to Formisch

Migrating to Formisch is a genuine rewrite of the form layer, not a drop-in replacement. The mental model is different: instead of starting from a component and attaching form behavior to it, you start from a schema and build the component around it. The libraries can coexist in the same application, so you can migrate one form at a time.

We provide a dedicated migration guide for each library, with a side-by-side example, step-by-step instructions, and an API mapping table: [migrate from React Hook Form](/react-native/guides/migrate-from-react-hook-form.md) and [migrate from TanStack Form](/react-native/guides/migrate-from-tanstack-form.md).

## Next steps

If you have decided that Formisch is a good fit, install it via the [installation](/react-native/guides/installation.md) guide and start building by [defining your form](/react-native/guides/define-your-form.md).
