Repeaters
One template. As many instances as the form needs.
{
"type": "repeater",
"key": "people",
"render": {
"type": "tabs",
"settings": {}
},
"min": 0,
"max": 5,
"reorder": true,
"template": [
{
"type": "text",
"key": "people.name"
}
]
}{
"people": [
{
"name": "Ada"
},
{
"name": "Grace"
}
]
}There is no variant. Min defaults to 0, max is unlimited when omitted, and reorder defaults to false. Required is accepted as a no-op on a repeater; use min for cardinality. Length is derived runtime metadata.
Rendering and nesting
Undereachother stacks instances and accepts gap from 0 to 128 pixels. Tabs selects instances and accepts a nonnegative integer initialIndex. Templates may contain groups and nested repeaters. Child arrays live inside each parent item.
people[current].children[current].nameEach current selector resolves at its own level. A child rule can reference its parent with people[current].name. Numeric selectors address current positions. Unindexed general references such as people.name are not implemented.
Runtime changes
Add initializes only new leaves and nested defaults. Remove drops an instance and its descendants. Reorder preserves their stable identities, values and errors while rebinding positional paths. Min/max apply independently to every nested collection.
Loaded data is never padded to min or truncated to max. Cardinality errors remain editable. Any operation creating a cycle, invalid reference or processing-limit failure rolls back atomically. Out-of-range numeric references are rejected. Safety limits are 10,000 instances per collection, 100,000 total instances and 100,000 concrete fields.