Forms from schemas, without the framework trap

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.

React 19
Strict TypeScript
Zod powered
Client and server
UI agnostic
Native, shadcn, custom
app/lead-form.tsx
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",
    },
  },
})
bun add @form-wire/core @form-wire/react zod
1
Define a Zod schema
2
Create a Form Wire model
3
Render with your mapper
4
Parse the action result

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
Nested object groups
String and object arrays
Conditional visibility
Async field validation
Wizard step validation
Draft persistence