Forms

Create and edit records — or trigger flows — with the form block: auto-derived fields, rich inputs, validation, and conditional fields.

#The form block

A form block submits to one of three actions:

  • Create record in a target collection,
  • Update record (record pages pass the id automatically),
  • Trigger flow — the submission becomes the flow's payload.

Submissions go through the records API, so permissions and validation always apply — a public intake form can only create what the public role is allowed to create.

#Fields: automatic or curated

  • Auto fields derives the form from the target collection's schema — inputs, labels, required flags, enum dropdowns, and validation rules stay in sync with the collection. Relations become dropdowns (multi-selects when the relation is has many), loaded from the target collection with permissions applied.
  • Turn Auto fields off to curate: the inspector's Form fields editor gives you rows with key, label, input type, and required — plus per-type options.

#Input types

| Input | Notes | | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | | text / email / url / tel / password / number / date / datetime / checkbox / textarea | The HTML basics. | | select | Options are either a manual value | label list or From collection — live records, permission-checked. | | multiselect | Multiple choice; relation multi-selects submit record ids, manual ones store a JSON array (which chips display per-value). | | file | Uploads on submit and stores the file id. | | richtext | A formatting toolbar (bold, italic, lists, links); stores HTML. | | icon | A Material icon name with a live preview. | | geo | Latitude/longitude inputs plus a click-to-pick map — click or drag the marker, or type coordinates. |

#Validation

  • Set min / max / min length / max length / pattern on any curated field — they render as native browser constraints, so users get instant feedback before submitting.
  • With Auto fields, the collection's own validation rules become these constraints automatically.
  • The server validates again on write — browser constraints are convenience, not the security boundary.

#Conditional fields (showIf)

A field can show only when another field has a value — or a specific value:

{
	"key": "sequel_title",
	"label": "Sequel title",
	"inputType": "text",
	"showIf": { "field": "has_sequel", "equals": "true" }
}

Hidden fields are left out of the submission entirely. Without JavaScript the field simply stays visible, and the server's validation still governs what's accepted.

#Tips

  • Give public intake forms a curated field list rather than Auto fields — expose only what you want strangers to fill in.
  • The success message is configurable per form; after submission the form resets.
  • Pair a form with a table or cards block bound to the same collection on one page for an instant "submit and see it appear" experience (refresh to see new rows).