A repeating group is a list of rows, each with its own sub-fields - line
items, options, passengers, anything with no fixed count. Add one as a
repeating-group field in the Form Editor; its
config sheet has its own "Child Fields" section for configuring the
sub-fields, recursively, the same way as any other field.
At fill-out time it renders as an "Add row" list, each row with its own Remove. In the submitted data it's a list of objects, one per row, keyed by each sub-field's id:
{ "options": [
{ "description": "Extended Warranty", "price": 500 },
{ "description": "Paint Protection", "price": 250 }
] }
The raw shape in form.json (only needed for anything the config sheet
doesn't expose yet):
{
"id": "options", "type": "repeating-group", "label": "Options",
"fields": [
{ "id": "description", "type": "text", "label": "Description" },
{ "id": "price", "type": "currency", "label": "Price", "min": 0 }
]
}
fields is a normal field-definition array, same shape as top-level
fields - one level deep only, no nested repeating groups.
Turning a submitted repeating group into a table on the page is its own topic: Grid.