Type-safe by default
Get a Zod schema and TypeScript types from your form.
const schema = z.object({
email: z.string().email(),
name: z.string().min(2),
company: z.string().optional(),
role: z.string().min(2),
acceptTerms: z.boolean(),
})Design visually, export unlimited code, and use managed submissions only when it saves your team time.
Start building freeContact form
3 fields
Works with tools you already use
Features
Get a Zod schema and TypeScript types from your form.
const schema = z.object({
email: z.string().email(),
name: z.string().min(2),
company: z.string().optional(),
role: z.string().min(2),
acceptTerms: z.boolean(),
})Drag fields, change types, and see updates right away.
Start with templates for contact, signup, and surveys.
Build forms with steps, checks, and clear progress.
Ship forms faster with less repeat work.
Export React Hook Form and shadcn/ui code you can edit.
<FormField name="email" render={({ field }) => (
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl><Input {...field} /></FormControl>
<FormMessage />
</FormItem>
)}/>How it works
Pick a template or start blank. Add fields and labels. Drag, drop, and preview in one place.
Set required fields and simple rules. Schema and types update for you.
Export files and move them into your app. Edit anything after export.
Code output
Zod schema + TypeScript types
shadcn/ui form code, already wired
Page file ready to use
1import { z } from "zod"23export const contactSchema = z.object({4 name: z.string().min(2, {5 message: "Name must be at least 2 characters.",6 }),7 email: z.string().email({8 message: "Please enter a valid email address.",9 }),10 company: z.string().optional(),11 message: z.string().min(10, {12 message: "Message must be at least 10 characters.",13 }),14})1516export type ContactFormValues =17 z.infer<typeof contactSchema>
Pricing
FAQ
Get started
Export free forever. Upgrade when you need managed cloud scale.