Skip to content

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.

Field type selector

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 answerText
A paragraph answerTextarea
A required email for contactEmail
A phone numberPhone
A count, age, or quantityNumber
A booking dateDate
A start timeTime
A linkURL
A signed photo / waiver / PDFFile upload
A 1–5 satisfaction scoreRating
Pick one from manySelect or Radio
Pick many from manyMulti-select or Checkbox (with options)
A consent tickboxCheckbox (no options)
Section breakHeading or Divider
Silent metadataHidden

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.