# Formisch > The lightweight, schema-first and fully type-safe form library for Angular, Preact, Qwik, React, React Native, Solid, Svelte and Vue. ## Get started ### Introduction Formisch is a schema-based, headless form library for React Native. It manages form state and validation. It is type-safe, fast by default and its bundle size is small due to its modular design. Try it out in our [playground](/playground/login/)! #### Highlights - Small bundle size starting at 2.5 kB - Schema-based validation with Valibot - Type safety with autocompletion in editor - Open source and fully tested with 100 % coverage - It's fast – re-renders only if necessary - Minimal, readable and well thought out API - Supports native `TextInput` fields #### Example Every form starts with the [`useForm`](/react-native/api/useForm.md) hook. It initializes your form's store based on the provided Valibot schema and infers its types. Unlike the DOM frameworks, React Native has no native form element or submit event, so there is no `
` component and submission is triggered explicitly with [`handleSubmit`](/methods/api/handleSubmit.md), for example from a button's `onPress` or a text input's `onSubmitEditing` handler. You can access the state of a field with the [`useField`](/react-native/api/useField.md) hook or the [``](/react-native/api/Field.md) component to connect your `TextInput`. ```tsx import { Field, handleSubmit, useForm } from '@formisch/react-native'; import { Button, Text, TextInput, View } from 'react-native'; import * as v from 'valibot'; const LoginSchema = v.object({ email: v.pipe(v.string(), v.email()), password: v.pipe(v.string(), v.minLength(8)), }); export default function LoginScreen() { const loginForm = useForm({ schema: LoginSchema, }); const submitForm = handleSubmit(loginForm, (output) => console.log(output)); return ( {(field) => ( {field.errors && {field.errors[0]}} )} {(field) => ( {field.errors && {field.errors[0]}} )}