Type-safe forms generated from the Zod schemas you already trust.
Form Wire turns a schema into a complete React form system: renderable fields, server action parsing, validation errors, arrays, wizards, conditional UI, and mapper-based styling for shadcn/ui or your own components.
const leadSchema = z.object({
name: z.string().min(1, "Name is required"),
email: z.string().email("Use a work email"),
company: z.string().min(2),
message: z.string().min(10).max(500),
})
const LeadForm = createFormWire(leadSchema, {
fields: {
name: { label: "Your name" },
email: {
label: "Work email",
placeholder: "you@company.com",
},
company: { label: "Company" },
message: {
label: "What are you building?",
component: "textarea",
},
},
})What it is
The missing wire between your schema, UI kit, and server action.
Schema-first fields
Describe the shape once in Zod. Form Wire derives labels, names, validation, defaults, and renderable field metadata.
Typed server actions
Parse FormData with the same schema on the server and return field errors in the format the React renderer expects.
Bring your own UI
Use native HTML, shadcn/ui, or a custom mapper. Form Wire owns behavior, your components own presentation.
Complex flows included
Wizards, conditional fields, nested objects, arrays, async validation, and draft persistence are built in.
Start simple. Keep the hard cases.
Most form libraries are fine until the product asks for wizard steps, nested arrays, server-side errors, draft restore, and a UI kit migration. Form Wire treats those as first-class form concerns instead of one-off glue code.
See supported field types