Check out our talk at Remix Conf!

Auto-generated

In this example, all fields, labels, and options are inferred from the schema.

const schema = z.object({
  firstName: z.string().nonempty(),
  email: z.string().nonempty().email(),
  howYouFoundOutAboutUs: z.enum(['fromAFriend', 'google']),
})

export default () => <Form schema={schema} />