/examples/formslouise-toolkit/forms test mode · no data leaves your browser

A validated contact form, one definition

louise-toolkit/forms turns a single field definition into the D1 table, the server + client validation, and the public capture route — no hand-rolled handler. The form on the left runs the same email + required checks the toolkit ships.

live · running now

// The one definition — derives the table, review columns, and validation.
const contactForm = defineForm({
  name: "inquiries",
  fields: inquiriesForm.fields,
  spam: { honeypot: "website", minSeconds: 2 },
});

// Wired into the worker's route list — public capture + editor-gated review:
formRoute({ form: contactForm, rateLimitKv: (env) => env.RL }),
inquiriesRoute({ table: inquiries, resolveEditor }),
sliced from real source — never drifts
Try itFix the email to jordan@acme.com and send — watch the same validation the server runs pass client-side. Deep-dive doc View source

Want the fully wired version that actually stores a row and shows up in Louise Settings? That's the contact form on the home page — same inquiries definition, posting to its real capture route.