Formisch is a schema-based, headless form library for JS frameworks. 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!
- Small bundle size starting at 2.5 kB
- Schema-based validation with Valibot
- Type safety with autocompletion in editor
- It's fast – DOM updates are fine-grained
- Minimal, readable and well thought out API
- Supports all native HTML form fields
I SolidJS a form starts with the createForm primitive. It initializes your form's store based on the provided Valibot schema and infers its types. Next, wrap your form in the <Form /> component. It's a thin layer around the native <form /> element that handles form validation and submission. Then, you can access the state of a field with the useField primitive or the <Field /> component to connect your inputs.
import { createForm, Field, Form } from '@formisch/solid';
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 LoginPage() {
const loginForm = createForm({
schema: LoginSchema,
});
return (
<Form of={loginForm} onSubmit={(output) => console.log(output)}>
<Field
of={loginForm}
path={['email']}
render={(field) => (
<div>
<input {...field.props} value={field.input} type="email" />
{field.errors && <div>{field.errors[0]}</div>}
</div>
)}
/>
<Field
of={loginForm}
path={['password']}
render={(field) => (
<div>
<input {...field.props} value={field.input} type="password" />
{field.errors && <div>{field.errors[0]}</div>}
</div>
)}
/>
<button type="submit">Login</button>
</Form>
);
}In addition, Formisch offers several functions (we call them "methods") that can be used to manipulate the form state. These include focus, getErrors, getAllErrors, getInput, insert, move, remove, replace, reset, setErrors, setInput, submit, swap and validate. These methods allow you to control the form programmatically.
Find a bug or have an idea how to improve the library? Please fill out an issue. Together we can make forms even better!
This project is available free of charge and licensed under the MIT license.