Skip to main content
Contact, signup, and feedback forms are defined as JSON, registered with the CLI, and rendered from a generated, validated client. Submissions are captured server-side — never hand-roll fetch or validation.

The flow

1

Write the form JSON

Create src/forms/{name}.json — kebab-case filename, e.g. contact-us.json — with the fields you need.
2

Register it

This creates the form, obtains its id, and patches it back into the JSON file. Register before writing app code that depends on the form, or the generated client won’t exist and the runtime fetch 404s.
3

Render it

A pre-build step generates src/forms/contact-us.ts (a Zod schema + a submitContactUs helper). Import from @/forms/contact-us in your React component.

Form commands

The form JSON spec, the generated Zod schema, and the submitX helper signature are part of the project’s fimo package surface. Load the project fimo skill before writing form JSON or the React component. Notification recipients are configured in Fimo Studio, not the CLI.

Read submissions

Once the form is live and people have filled it out, inspect submissions from the terminal:
<formIdOrName> accepts the form’s UUID or its name. list returns newest-first by default; search matches submission contents server-side. All three are read-only — submissions are created only when a visitor submits the published site’s form. For bulk export or older submissions, use Studio.

What’s next

Content & CMS

Model structured content.

Labels, locales & i18n

Localize form copy with t().

Deploy & publish

Ship the form to production.