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).