Form Field Types
The Field Type Picker
You choose a field's type from the Type dropdown at the top of the field's settings panel. The list is grouped so related types sit together — text-like types, choice types, date/time, numeric, and structural types. Changing the Type re-shapes the inspector: the shared controls stay and the type-specific ones swap to match the new type.
All 27 Field Types
| Display Name | ID | Output Type | Description |
Text | STRING | string | Single-line free text input. |
Text Area | TEXTAREA | string | Multi-line free text input. |
Number | NUMBER | number | Decimal number input with min/max validation. |
Integer | INTEGER | integer | Whole-number input with integer min/max validation. |
Email | EMAIL | string | Text input with built-in email format validation. |
Password | PASSWORD | string | Masked text input for secrets. |
Date | DATE | string/number | Calendar picker for date only; supports single or range variant. |
Time | TIME | string | Time-of-day picker (HH:mm or HH:mm:ss). |
Date & Time | DATE_TIME | string/number | Combined date and time picker. |
Single-select Dropdown | SINGLE_SELECT_DROPDOWN | string | Dropdown for picking exactly one option. |
Multi-select Dropdown | MULTI_SELECT_DROPDOWN | array | Dropdown for picking multiple options; value is an array of strings. |
Boolean | BOOLEAN | boolean | Checkbox-style true/false toggle. Only fires On Change (no On Focus/Blur). |
Switch | SWITCH | boolean | Toggle-switch true/false. Only fires On Change (no On Focus/Blur). |
Checkbox | CHECKBOX | — | Checkbox group for multi-pick from a fixed list. |
Radio | RADIO | — | Radio button group for single-pick from a visible list. |
Slider | SLIDER | number | Drag handle for selecting a numeric value within a range. |
Rating | RATING | number | Star (or custom icon) rating selector. |
Pin Input | OTP | string | Per-digit boxes for 4- or 6-digit OTP/PIN codes. No Is Optional toggle, no Default value. |
Phone Number | PHONE_NUMBER | — | Phone input with country-code selector. |
Currency | CURRENCY_INPUT | — | Numeric input with currency-code selector. |
Rich Text | RICH_TEXT | string | WYSIWYG formatted text editor. |
Code Editor | CODE_EDITOR | string | Syntax-highlighted code input. |
File Uploader | FILE_UPLOADER | — | File picker/drop zone inside the form. |
Key-Value Pair | KEY_VALUE_PAIR | object | Editable map of key-string to value-string pairs. |
JSON Schema | JSON_SCHEMA | object | Nested form driven by a JSON Schema. |
Array | ARRAY | array | Container: repeating group of child fields users can add rows to. |
Object | OBJECT | object | Container: fixed group of child fields under one key. No Default value control. |
Controls Every Field Shares
These controls appear on almost every field type. Each type's extras are on top of these.
Content
| Control | Type | Default | Description |
Type | field-type ID | type at creation | The kind of input. Changing it swaps the type-specific controls but keeps shared ones. |
Field Key | text | — | The unique name used to read this field's value: {{ form1.data.myKey }}. Letters, numbers, - and _ only. Cannot be empty. |
Label | string | — | The text shown as the field's title above or beside the input. |
Placeholder | string | — | Greyed-out hint text shown inside the empty input. |
Default Value | matches field type | — | Starting value on first render. Can be a fixed value or a {{ … }} binding. A changing binding overwrites what the user typed — with no On Change event. |
Add-ons | help/description/tooltip | — | Optional supporting text: help text displayed below the field, a description, and a tooltip. |
Validation
| Control | Type | Default | Description |
Is Optional | on/off | on (optional) (optional) | Turn off to make the field required. Cannot follow a condition — use a validity condition for conditional requirements. Hidden on Array, Object, and Pin Input fields. |
Validity Conditions | rule list | — | Custom rules with their own error messages. Each rule is a visual AND/OR condition builder. All rules must pass for the field to be valid. |
Max Length | integer | — | Hard character cap for text-family fields. Typing is blocked at the limit — no error message, keystrokes simply stop registering. Available on: Text, Text Area, Email, Password, Pin Input, Rich Text, Code Editor, and choice/dropdown fields. |
Min Value / Max Value | number | — | Lowest and highest allowed number for Number, Integer, Slider, and Currency fields. Integer fields accept whole numbers only. |
Text Transform | None | AB | ab | Ab | None | Auto-rewrites the stored value as the user types: None (keep as-is), UPPERCASE, lowercase, or Capitalize Each Word. Also enforced at submit — a bound default or programmatic value that doesn't match blocks submission. |
Interactions
| Control | Type | Default | Description |
Disabled | condition | — | Greys the field out and blocks input while the condition is true. Validity rules on a disabled field are skipped at submit. |
Read Only | condition | — | Shows the value but blocks editing while the condition is true. Unlike disabled, read-only fields still run validity rules at submit. |
Events | event list | — | On Change, On Focus, On Blur handlers. Boolean and Switch fields only have On Change. |
Appearance
| Control | Type | Default | Description |
Visibility | condition | — | Shows or hides the field. Hidden fields are removed from {{ id.data }} and the submit payload, and their validity rules are skipped. |
Width | percentage | 100% | Field width as a percentage of the form row. Set two adjacent fields to 50% for a two-column layout. |
Permissions
| Control | Type | Default | Description |
Permissions | permission rule | — | Who can access the field. Users who fail the rule have the field removed from the form by default, or shown read-only if "when no permission" is set to read-only. |
Text & String Fields
Text (STRING)
Single-line free text. Supports placeholder, default value, max length, text transform. On text-family fields you can validate with minimum/maximum length, regex matching, starts-with, ends-with, contains, equals, in-list.
Text Area (TEXTAREA)
Multi-line text. Same properties as Text plus a Rows option to set the visible height. Best for longer free-form entries like comments, descriptions, or addresses.
Email (EMAIL)
Text input with built-in email format validation on submit. The format check runs in addition to any custom validity conditions. Keyboard hint on mobile shows the @ symbol prominently.
Password (PASSWORD)
Masked input. Value is readable from {{ form1.data.fieldKey }} (plain string) — masking is only visual. Use validity conditions to enforce minimum length, complexity, and password-confirmation matching.
Rich Text (RICH_TEXT)
WYSIWYG formatted text editor. The submitted value is an HTML string. Max length applies to the raw HTML. Use for entries where formatting matters — notes, descriptions, templates.
Numeric Fields
Number (NUMBER)
Decimal number input. Supports Min Value, Max Value, decimal precision, and the standard comparison validators (greater than, less than, equals). The value in {{ form1.data.fieldKey }} is a JS number.
Integer (INTEGER)
Whole-number input. Min/Max accept integers only. Keyboard shows numeric pad on mobile. Same validators as Number; the submitted value is always an integer.
Slider (SLIDER)
Drag handle that produces a number within a configured range. Set Min and Max to define the range and Step to control the increment. Value is a number.
Currency (CURRENCY_INPUT)
Numeric amount paired with a currency-code selector (e.g. USD, EUR). Options can come from a data source. The submitted value includes both amount and currency code.
Rating (RATING)
Row of stars (or a custom icon). Set Max Rating for the number of stars. Value is a number from 1 to max. Decimal values from data render as partially filled icons.
Date & Time Fields
Date (DATE)
Calendar picker for a date without time. Supports Single or Range variant. Formats: ISO 8601 string or Unix epoch timestamp. Display format is configurable (MMMM dd, yyyy; d MMM yyyy; yyyy-MM-dd; etc.). Date Selection Limits add-on restricts which days can be picked: Only Future, Only Past, or Custom Range.
| Property | Type | Default | Description |
Variant | single | range | single | Single date or start–end range. |
Date Format | iso | epoch | iso | How the value is stored: ISO 8601 string with timezone, or Unix epoch timestamp. |
Display Format | format string | Default | How the date is shown to the user. Custom format tokens supported. |
Date Selection Limits | add-on | — | Only Future Dates, Only Past Dates, or Custom Date Range. Future/Past modes include an "Include Today" toggle. |
Time (TIME)
Time-of-day picker. Configurable format (HH:mm or HH:mm:ss). Value is a time string. Supports min/max time restrictions.
Date & Time (DATE_TIME)
Combined picker for date and time together. Same format options as Date. Value is an ISO 8601 datetime string or epoch timestamp. Useful for event start times, deadlines.
Choice Fields
Single-select Dropdown (SINGLE_SELECT_DROPDOWN)
Dropdown for picking exactly one option. Options come from a hand-typed list or a data source. Supports search/filter within the list. Value is the chosen option's value string.
Multi-select Dropdown (MULTI_SELECT_DROPDOWN)
Dropdown for picking several options. Value is an array of selected value strings. Supports select-all, typed custom values, and data-source options with search. Use when the option list is too long to show all at once.
Boolean (BOOLEAN)
Checkbox-style yes/no. Value is true or false. Only fires On Change — no On Focus or On Blur. No label positioning; the label sits beside the checkbox.
Switch (SWITCH)
Toggle-switch style boolean. Same behavior as Boolean. Value is true or false. Only fires On Change.
Checkbox (CHECKBOX)
Multi-pick from a visible list of checkboxes. Each option can have its own visibility condition. Options can come from a data source. Use for small sets of always-visible multi-pick choices.
Radio (RADIO)
Single-pick from a visible list of radio buttons. Each option can have its own visibility condition. Options can come from a data source. Use when the option set is small enough to show all at once.
File & Specialized Fields
File Uploader (FILE_UPLOADER)
File picker embedded in the form. Supports single or multiple files, accepted types, per-file size cap, and file visibility (Public / Restricted / Only Me). Uploaded files are available in the form's data as file descriptors (URL, name, size, mime type). See File Upload for standalone block details.
Pin Input (OTP)
Per-digit boxes for 4- or 6-digit PIN or OTP codes. No Is Optional toggle and no Default value. Length is either 4 or 6. Supports masked variant. Value is a string of digits.
Phone Number (PHONE_NUMBER)
Text input with a country-code selector. Stores number with country code. Built-in format hint adapts to selected country.
Rich Text (RICH_TEXT)
See Text & String Fields above.
Code Editor (CODE_EDITOR)
Syntax-highlighted code input. Configure the language mode (JavaScript, JSON, SQL, etc.). Value is a string. Useful for template editors, configuration inputs.
Key-Value Pair (KEY_VALUE_PAIR)
Editable map of string-to-string pairs. Users can add and remove rows. Value is an object. Use for HTTP headers, metadata, custom attributes.
Container Fields: Object & Array
Object and Array are the two container field types — fields that hold other fields inside them.
Object groups a fixed set of child fields under one key. No Default value control. Build child fields in the Object's settings panel.
Array repeats a set of child fields as a list the user can add rows to. No Is Optional toggle.
| Option | Default | Available On | Description |
Wrap | off | Object, Array | Lays child fields out wrapped rather than in a single line. |
Collapsible | off | Object, Array | Lets the user collapse and expand the group. |
Collapsed by Default | off | Object, Array | Starts the group collapsed. Only effective when Collapsible is on. |
Add Item Label | — | Array only | Label on the button that adds a new row. |
Show Divider | — | Object, Array | Draws a dividing line around the group. |
Disable Background | — | Object, Array | Removes the group's background panel. |
Field Events
| Event | Trigger | Available On |
| On Change | The field's value changes. | Every field type |
| On Focus | The field gains focus. | Every field type except Boolean and Switch |
| On Blur | The field loses focus. | Every field type except Boolean and Switch |
Options from a Data Source
Five choice fields can build their option list from a data source instead of a hand-typed list — the choices stay in sync with live data:
Single-select Dropdown
Multi-select Dropdown
Radio
Checkbox
Currency
Configure the data source under Content → Options on the field. Map option label and value from the source fields. Per-option visibility conditions still work on data-source options.
Behavior & Gotchas
Warning: A dynamic default value can overwrite what the user typed — with no On Change event. When a field's Default value is a {{ … }} binding and that bound value changes, the field's current value is silently replaced. Use a fixed default if you don't want this.
Note: Every field is optional until you turn "Is Optional" off. Fields are optional by default. The Is Optional toggle is a plain on/off — it cannot follow a condition. Use a validity condition or visibility + required for conditional requirements.
Warning: Max length blocks typing with no message. Setting Max length on a text-family field stops keystrokes once the cap is reached — there is no error message. If a text field "won't let me type more", check its Max length.
Note: Text transform rewrites the stored value, not just the display. Set Text transform to UPPERCASE and the submitted data is uppercase. Also enforced at submit: a value that doesn't match the configured transform blocks submission.
Note: Pin Input and Object have no Default value control. For Object, prefill its child fields instead. Pin Input cannot be pre-filled.
Note: "Collapsed by default" only works when "Collapsible" is on. On Object and Array fields, turn Collapsible on first, then Collapsed by default.
Frequently Asked Questions
How do I make a field required only when another field has a specific value?
The Is Optional toggle is static — it can't follow a condition. To make a field conditionally required, either: (1) add a Validity condition that passes when the controlling field is not the trigger value OR when the field is filled; or (2) set Is Optional off and use a Visibility condition so the field only appears when relevant (hidden fields are skipped by validation). See Conditionally Required Fields.
Why can't I type any more characters into my text field?
The field has a Max Length set under Validation. This is a hard input cap — keystrokes stop registering once the limit is reached, with no error message shown. Check and raise or clear the Max Length setting for the field. Note this is different from a validity condition with a max-length rule, which would show an error message instead.
My checkbox or boolean field doesn't have an On Focus/On Blur event — is that a bug?
No, this is by design. Boolean and Switch fields only fire On Change. They have no On Focus or On Blur events because they receive clicks, not keyboard focus in the same way text fields do. Move any logic that was wired to focus/blur to On Change instead.
How do I populate dropdown options from a database or API?
For Single-select Dropdown, Multi-select Dropdown, Radio, Checkbox, and Currency fields, switch Options Type from Manual to Lookup in the field's Content settings. Select the data source, map the Label Field and optionally a value field. The options will update whenever the data source refreshes. You can also configure Search Type (Contains or Starts With) and whether to search by label or label+value.
Can I set a field's value from a button click?
Yes — from any button's click event, add a Control block method action targeting the form block. Use the setFieldValue method with the field's key and the new value. For multiple fields at once, use setFieldsValue. Note these methods do not fire the field's On Change event.
Common Patterns
Make a Field Required
Open the field's settings → Validation.
Turn Is Optional off.
The field now blocks form submission until it has a value.
Multi-select Dropdown from a Data Source
Add a Multi-select Dropdown field.
In Content → Options, switch from "Manual" to a data source.
Map Label and Value to the source's fields.
The options update whenever the source data changes.
Access selected values with
{{ form1.data.myField }}— an array of value strings.
Repeating Group with Array Field
Add an Array field and name it (e.g.
lineItems).Inside the Array, add child fields: Text for name, Number for quantity, Currency for price.
Set Add Item Label to "Add line item".
Users click the button to add rows;
{{ form1.data.lineItems }}is an array of objects.