Array (Repeating)
A repeating group of fields where respondents can add multiple entries.
Overview
The Array field creates a repeating block of sub-fields. Unlike the Table field which presents data in a grid, the Array field renders each entry as a full form group, making it suitable for complex nested data with many fields per entry (e.g. emergency contacts with name, phone, relationship, and address).
Respondents can add entries with the Add Item button, and remove individual entries with the delete button on each card. Entries can optionally be reordered by dragging.
Properties
| Property | Type | Default | Description |
|---|---|---|---|
| label | string | — | Human-readable label shown above the field or step heading. |
| required | boolean | false | When true, the form cannot submit without a value. |
| isHidden | boolean | false | Hides the field from respondents (may still store defaults). |
| isDisabled | boolean | false | Renders the field read-only. |
| instruction | string | undefined | Help text shown below the label (not the same as placeholder). |
| fields | FormField[] | [] | Nested field template for each repeated entry. |
| minItems | number | 0 | Minimum number of entries required. |
| maxItems | number | undefined | Maximum number of entries allowed. |
| addLabel | string | "Add Item" | Label for the add-entry button. |
| itemLabel | string | "Item" | Prefix label for each entry card (e.g. "Contact 1"). |
| collapsible | boolean | false | Allow entries to be collapsed to save space. |
JSON Schema
{
"type": "array",
"label": "Emergency Contacts",
"name": "emergency_contacts",
"required": true,
"minItems": 1,
"maxItems": 3,
"itemLabel": "Contact",
"fields": [
{ "type": "text", "label": "Full Name", "name": "name", "required": true },
{ "type": "phone", "label": "Phone Number", "name": "phone", "required": true },
{ "type": "select","label": "Relationship", "name": "relationship", "required": true,
"options": [
{ "label": "Parent", "value": "parent" },
{ "label": "Sibling", "value": "sibling" },
{ "label": "Spouse", "value": "spouse" },
{ "label": "Friend", "value": "friend" }
]
}
]
}Common Use Cases
- Emergency contacts, references, or beneficiaries with several fields each
- Line-of-business entries that are too rich for a flat table (mixed field types)
- Team rosters capturing name, role, and availability per participant
- Equipment registrations repeating serial numbers with warranty metadata
- Nested questionnaires where card layout aids scanning versus spreadsheet grids