Unify Applications
Logo
Form Field Types

Form Field Types

Logo

13 mins READ

The Field Type Picker

unify-applications-form-field-types-01-field-type-picker.png
unify-applications-form-field-types-01-field-type-picker.png

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

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 with a configurable step size.

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.

Checkbox

BOOLEAN

boolean

A single true/false checkbox. Only fires On Change (no On Focus/Blur).

Switch

SWITCH

boolean

Toggle-switch true/false. Only fires On Change (no On Focus/Blur).

Checkbox Group

CHECKBOX

array (the checked options' values)

Group of checkboxes for multi-pick from a fixed list.

Radio Group

RADIO

string (the chosen option's value; number if the option values are numbers)

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

object: countryCode, phoneNumber, dialCode (e.g. {"countryCode": "IN", "phoneNumber": "9822419876", "dialCode": "91"})

Phone input with country-code selector.

Currency Input

CURRENCY_INPUT

object: currencyCode, amount (e.g. {"currencyCode": "INR", "amount": "1000.00"})

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

FILE_UPLOADER

array of file objects (id, name, url, mimeType, size); one file object when multiple files is off

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.

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

ControlTypeDefaultDescription
Typefield-type IDtype at creationThe kind of input. Changing it swaps the type-specific controls but keeps shared ones.
Field Keytext—The unique name used to read this field's value: {{ form1.data.myKey }}. Letters, numbers, - and _ only. Cannot be empty.
Labelstring—The text shown as the field's title above or beside the input.
Placeholderstring—Greyed-out hint text shown inside the empty input.
Default Valuematches 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-onshelp/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)

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.

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

Min Value / Max Value

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.

Text Transform

None | AB | ab | Ab

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

ControlTypeDefaultDescription
Disabledcondition—Greys the field out and blocks input while the condition is true. Validity rules on a disabled field are skipped at submit.
Read Onlycondition—Shows the value but blocks editing while the condition is true. Unlike disabled, read-only fields still run validity rules at submit.
Eventsevent list—On Change, On Focus, On Blur handlers. Boolean and Switch fields only have On Change.

Appearance

ControlTypeDefaultDescription
Visibilitycondition—Shows or hides the field. Hidden fields are removed from {{ id.data }} and the submit payload, and their validity rules are skipped.
Widthpercentage100%Field width as a percentage of the form row. Set two adjacent fields to 50% for a two-column layout.

Permissions

ControlTypeDefaultDescription
Permissionspermission 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.

PropertyTypeDefaultDescription
Variantsingle | rangesingleSingle date or start–end range.
Date Formatiso | epochisoHow the value is stored: ISO 8601 string with timezone, or Unix epoch timestamp.
Display Formatformat stringDefaultHow the date is shown to the user. Custom format tokens supported.
Date Selection Limitsadd-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.

OptionDefaultAvailable OnDescription
WrapoffObject, ArrayLays child fields out wrapped rather than in a single line.
CollapsibleoffObject, ArrayLets the user collapse and expand the group.
Collapsed by DefaultoffObject, ArrayStarts the group collapsed. Only effective when Collapsible is on.
Add Item Label—Array onlyLabel on the button that adds a new row.
Show Divider—Object, ArrayDraws a dividing line around the group.
Disable Background—Object, ArrayRemoves 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

  1. Open the field's settings → Validation.

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

  3. The field now blocks form submission until it has a value.

Multi-select Dropdown from a Data Source

  1. Add a Multi Select Dropdown field.

  2. In its Dropdown options section, set Type to Mapped, open Source and choose Use Data Source.

  3. Pick the data source and map Label and Value to the source's fields.

  4. The options update whenever the source data changes.

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

  1. Add an Array field and name it (e.g. lineItems).

  2. Inside the Array, add child fields: Text for name, Number for quantity, Currency for price.

  3. Set Add Item Label to "Add line item".

  4. Users click the button to add rows; {{ form1.data.lineItems }} is an array of objects.

FAQs

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 Group, Checkbox Group and Currency Input fields, open the field's options section (for example Dropdown options), set Type from Manual to Mapped, open Source and choose Use Data Source. Pick the data source and map Label and Value. The options update whenever the data source refreshes. Dropdowns also let you set Search Type (Contains or Starts With) and 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 Trigger Component Method action targeting the form block. Use the Set Fields Value method with the field's key and the new value. These methods fire the field's On Change event (and the form-level On Change), just as a user edit would — avoid calling them on the same field from its own On Change handler.