The Field Type Picker


You choose a field's type from the Type dropdown in the field's settings panel, just below Label. The list is split by dividers into groups: first the common types (Text, Text Area, Number, Integer, Date, Time, Date Time, Single and Multi Select Dropdown, Checkbox, Switch), then Email, Password, Slider, Pin Input, Phone Number, Currency Input, Rich Text, Radio Group, Rating and Checkbox Group, then Code Editor, File, Key Value Pair and JSON Schema. 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 |
|---|---|---|---|
|
| string | Single-line free text input. |
|
| string | Multi-line free text input. |
|
| number | Decimal number input with min/max validation. |
|
| integer | Whole-number input with integer min/max validation. |
|
| string | Text input with built-in email format validation. |
|
| string | Masked text input for secrets. |
|
| string/number | Calendar picker for date only; supports single or range variant. |
|
| string | Time-of-day picker with a configurable step size. |
|
| string/number | Combined date and time picker. |
|
| string | Dropdown for picking exactly one option. |
|
| array | Dropdown for picking multiple options; value is an array of strings. |
|
| boolean | A single true/false checkbox. Only fires On Change (no On Focus/Blur). |
|
| boolean | Toggle-switch true/false. Only fires On Change (no On Focus/Blur). |
|
| array (the checked options' values) | Group of checkboxes for multi-pick from a fixed list. |
|
| string (the chosen option's value; number if the option values are numbers) | Radio button group for single-pick from a visible list. |
|
| number | Drag handle for selecting a numeric value within a range. |
|
| number | Star (or custom icon) rating selector. |
|
| string | Per-digit boxes for 4- or 6-digit OTP/PIN codes. No Is Optional toggle, no Default value. |
|
| object: countryCode, phoneNumber, dialCode (e.g. {"countryCode": "IN", "phoneNumber": "9822419876", "dialCode": "91"}) | Phone input with country-code selector. |
|
| object: currencyCode, amount (e.g. {"currencyCode": "INR", "amount": "1000.00"}) | Numeric input with currency-code selector. |
|
| string | WYSIWYG formatted text editor. |
|
| string | Syntax-highlighted code input. |
|
| array of file objects (id, name, url, mimeType, size); one file object when multiple files is off | File picker/drop zone inside the form. |
|
| object | Editable map of key-string to value-string pairs. |
|
| object | Nested form driven by a JSON Schema. |
|
| array | Container: repeating group of child fields users can add rows to. |
|
| object | Container: fixed group of child fields under one key. No Default value control. |
Reusable fields (see Reusable Forms & Fields) offer 25 of these types — every type except Array and Object.
Note: In the Type dropdown, Checkbox is the single true/false box (BOOLEAN), and Checkbox Group is the multi-pick list (CHECKBOX). Pick Checkbox Group when users should choose several options.
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 |
|---|---|---|---|
| on/off | on (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, and absent on Checkbox (Boolean) and Switch fields — use a Validity condition (for example, Equals true) to require those. |
| 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. |
| integer | — | Hard character cap. Typing is blocked at the limit — no error message, keystrokes simply stop registering. Available on Text (Validation → Max length) and Text Area (Content → Text Area options → Maximum characters). For other text types, use a Validity condition with Maximum length. |
| number | — | Lowest and highest allowed number for Number, Integer and Slider fields. Integer fields accept whole numbers only. For Currency Input, use a Validity condition. |
|
| None | Text fields only. 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. Set Min rows and Max rows (Appearance) for the visible height and Maximum characters (Content) for a hard cap. 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. 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 Input (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. Set Step size (in minutes) to control the selectable increments. Value is a time string. Use a Validity condition (Is Before / Is After) to restrict the range.
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.
Checkbox (BOOLEAN)
A single yes/no checkbox. Value is true or false. Only fires On Change — no On Focus or On Blur. No label positioning; the label sits beside the checkbox. Has no Is Optional toggle — to require it, add a Validity condition (for example, Equals true).
Switch (SWITCH)
Toggle-switch style boolean. Same behavior as Checkbox (BOOLEAN). Value is true or false. Only fires On Change. Has no Is Optional toggle.
Checkbox Group (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 Group (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 (FILE_UPLOADER)
File picker embedded in the form. Supports single or multiple files, accepted types, per-file size cap, and File Visibility (Only me, Only this app, Restricted or Public). With multiple files on, the value is an array of file objects (id, name, url, mimeType, size); with it off, it is a single file object. 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.
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 except Object and Array (wire the child fields instead) |
On Focus | The field gains focus. | Every field type except Checkbox (Boolean), Switch, Object and Array |
On Blur | The field loses focus. | Every field type except Checkbox (Boolean), Switch, Object and Array |
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 Group
Checkbox Group
Currency Input
Configure it in the field's options section (for example Dropdown options): set Type to Mapped, open Source and choose Use Data Source, then map the option Label and Value from the source fields. Per-option visibility conditions still work on data-source options. See Dropdown Data Source Options for the full setup.
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 that has an Is Optional toggle is optional until you turn it off. The Is Optional toggle is a plain on/off — it cannot follow a condition. Checkbox (Boolean) and Switch fields have no Is Optional toggle; use a Validity condition to require them. Use a validity condition or visibility + required for conditional requirements.
Warning: Max length blocks typing with no message. Setting Max length on a Text field (or Maximum characters on a Text Area) 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 (Text fields only) 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.
Common Patterns
Make a Field Required
Open the field's settings → Validation.
Turn Is Optional off. For Checkbox (Boolean) and Switch fields, which have no Is Optional toggle, add a Validity condition (for example, Equals true) instead.
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 its Dropdown options section, set Type to Mapped, open Source and choose Use Data Source.
Pick the data source and 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.
See Dropdown Data Source Options for every mapping row and for dependent dropdowns.
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.