Field types catalog β
The form builder ships with 17 field types. They split into three buckets: input fields that collect data from the visitor, choice fields that constrain the input to a list, and display fields that don't take any input at all but help structure the form.

When you click + Field in the toolbar, you get a menu showing all of them. Pick whichever fits.
Input fields β
These accept free-form input β a name, a phone number, an essay.
Text β
A single-line input. Best for names, titles, short answers ("What's your favourite worship song?"). The most-used field type by far.
Validation: min_length, max_length. If you set both, the field rejects submissions outside the range.
Textarea β
A multi-line input. Best for prayer requests, comments, longer story-style answers. Defaults to three rows tall β it grows automatically as the visitor types.
Validation: same as Text β min_length, max_length.
Email β
A text field validated against an email regex (anything@anything.tld). Wrong-format input shows an error on blur.
The form submission flow also automatically uses an email field's value as the submitter_email on the resulting submission row β that's what shows up in the Email column in the submissions table. If you have multiple email fields, the first one with a value wins.
Phone β
A text field that accepts a phone number. There's no enforced format because phone validation is messy internationally β but it shows a phone-style keyboard on mobile.
Number β
A numeric input with optional min, max, and step. Best for counts ("How many people are coming?"), ages, ratings on a custom scale.
The step value controls the granularity β step: 1 only allows whole numbers, step: 0.5 allows halves.
Date β
A date picker. Defaults to today's date in the placeholder. Stores as an ISO date string (YYYY-MM-DD).
Time β
A time picker. Stores as HH:MM (24-hour internally; the visitor's locale controls how it's displayed).
URL β
A text field validated against https?://.... Useful for "Link to your testimony video" or "Your social media."
File upload β
Lets the visitor attach a single file. Uploads go to the form-uploads Supabase storage bucket at the path {org_id}/submissions/{submission_id}/{field_id}/{filename}.
Config:
- Allowed file types β checkbox presets for PDF, Images, Documents, Spreadsheets, plus a custom-extensions text box (
.dwg, .ai, .zip). Defaults to PDF + common image formats. - Max file size (MB) β capped at 100MB. Defaults to 5MB.
If the visitor's file fails either check, the form shows an inline error before they can submit.
Rating β
A star-rating control. Visitors tap stars; the value stored is the count selected. The number of stars is configurable from 1β10 (max_stars), defaults to 5.
Best for "How would you rate today's service?" or "Rate the small-group experience."
Choice fields β
These constrain the visitor's answer to a list of options you control. You add options in the Type Options section of the field config β click + Add option to add rows.
Select (single) β
A dropdown. The visitor picks one option. Best when you have more than five options and don't want them all visible.
Multi-select β
A dropdown that allows multiple selections. Selected values are stored as an array.
Radio β
Like Select, but renders as a vertical list of radio buttons. The visitor picks one. Best when you have two to five options and want them all visible.
Checkbox β
This one's dual-purpose:
- No options configured β renders as a single yes/no checkbox. Used for things like "I agree to be contacted." When marked required, the visitor must tick it to submit.
- Options configured β renders as a list of checkboxes; the visitor can tick any number. Stored as an array of selected values.
Display fields β
These don't collect anything. They structure the form.
Heading β
A larger-text section header inside a section. Configurable level: H2, H3, or H4. Useful when you've got a single long section but want a visual break inside it ("Personal info" then a few fields, then "Your request" then more fields).
Headings are not required, are not validated, and never appear in submissions. They're pure layout.
Divider β
A horizontal rule. Useful between conceptually-different groups of fields when you don't want a heading. Even less data than a heading β no label, no config.
Hidden β
A field that doesn't show to the visitor but submits a default value with the submission. Configurable default_value in the field config.
Use cases:
- Tag every submission with the source β e.g. a hidden field
source = "youth-camp-flyer"so you can tell which submissions came from which flyer - Pre-fill a value via URL query string (advanced β requires a custom website-builder block; not yet supported in the standalone form URL)
- Track a campaign code without asking the visitor to type it
Quick decision table β
| You want⦠| Field type |
|---|---|
| A short answer | Text |
| A paragraph answer | Textarea |
| A required email for contact | |
| A phone number | Phone |
| A count, age, or quantity | Number |
| A booking date | Date |
| A start time | Time |
| A link | URL |
| A signed photo / waiver / PDF | File upload |
| A 1β5 satisfaction score | Rating |
| Pick one from many | Select or Radio |
| Pick many from many | Multi-select or Checkbox (with options) |
| A consent tickbox | Checkbox (no options) |
| Section break | Heading or Divider |
| Silent metadata | Hidden |
What's not in the catalog β
A few field types that come up sometimes but aren't built in:
- Signature pad β not yet supported. For waivers, ask the visitor to type their name into a Text field labelled "Type your name to sign."
- Conditional logic ("show this field only if the previous one is yes") β not yet supported. If you need branching, build two separate forms and share the right link based on the situation.
- Repeating groups ("add another attendee") β not supported. Ask for a count in a Number field instead.
These are tracked on the roadmap; the form builder is still maturing.
