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 |
|---|---|---|---|
| type | string | — | The field type identifier (e.g. "text", "email"). |
| label | string | — | Human-readable label shown above the field. |
| name | string | — | Unique machine name used as the data key in submissions. |
| required | boolean | false | When true the form cannot be submitted without a value. |
| placeholder | string | undefined | Ghost text shown inside the input when empty. |
| defaultValue | any | undefined | Pre-filled value when the form loads. |
| hidden | boolean | false | Hides the field from the rendered form (still submitted). |
| disabled | boolean | false | Renders the field as read-only and non-interactive. |
| description | string | undefined | Helper text displayed below the field label. |
| className | string | undefined | Additional CSS class applied to the field wrapper. |
| fields | Field[] | [] | Array of field definitions 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" }
]
}
]
}