Waren.dev
24 Sep — 11:46 PST
- HomeAboutDocsGet in Touch

Package Documentation
Get Started with React Form Kit
Simple, reusable form utilities for building type-safe, maintainable React forms.
@dev-waren/react-form-kitView on npm
Built around
- React Hook FormZodTypeScript
Integration
Choose your form library
- 01
Installation
Install React Form Kit using your preferred package manager.
terminalnpm install @dev-waren/react-form-kit - 02
Define Your Schema
Create a type-safe validation schema for your form fields.
validation/login-schema.tsimport { z, sanitize } from "@dev-waren/react-form-kit"; export const schema = { login: z.object({ email: z.string() .email({ message: "email is required" }) .transform(sanitize), password: z.string() .min(8,{ message: "password must be atleast 8 characters long." }) .transform(sanitize), }), }; - 03
Configure the Form
Initialize the form with validation, default values, and submission behavior.
hooks/useLoginForm.tsimport { useFormSettings } from "@dev-waren/react-form-kit/hook-form"; import { schema } from "../validation/login-schema"; export const useLoginForm = () => { const form = useFormSettings({ schema: schema.login, defaultValues: { email: "", password: "", }, clearFields: ["email", "password"], onSubmit: (data) => { console.log("Submitted data:", data); }, }); return { form }; }; - 04
Define Form Fields
Describe your fields in a reusable configuration list.
fields.tsexport const fields = [ { name: "email", placeholder: "Enter your email", type: "email", }, { name: "password", placeholder: "Enter password", type: "password", }, ]; - 05
Create a Reusable Input
Connect each input to the form state and display validation errors.
components/Input.tsximport type { ComponentProps } from "react"; import { useInput } from "@dev-waren/react-form-kit/hook-form"; import type { Path } from "@dev-waren/react-form-kit"; type InputProps<T extends object> = ComponentProps<"input"> & { name: Path<T>; }; export default function Input<T extends object>({ name, ...props }: InputProps<T>) { const { register, isError, error } = useInput(name); return ( <div className="space-y-2"> <input {...register} {...props} /> {isError && ( <p className="text-red-600">{error}</p> )} </div> ); } - 06
Build the Form
Combine the form provider, field mapper, and reusable input component.
Login.tsximport { Mapper } from "@dev-waren/react-form-kit"; import { Form } from "@dev-waren/react-form-kit/hook-form"; import Input from "./components/Input"; import { fields } from "./fields"; import { useLoginForm } from "./hooks/useLoginForm"; export default function LoginForm() { const { form } = useLoginForm(); return ( <Form {...form}> <Mapper listFor="login form" items={fields} className="space-y-2" as="div" > {(field) => <Input {...field} />} </Mapper> <button type="submit"> Login </button> </Form> ); }
07
Finished React Hook Form
Congratulations! You've just created a login form.
terminaloutput
$ Waiting for form submission...
Support the project
Enjoying React Form Kit?
A GitHub star helps the project gain visibility and reach more developers.