Repeater Group Field

Let users dynamically add multiple sets of related fields for collecting variable-length lists of structured data.

Overview

The repeater field type is a container for child fields that users can repeat as many times as needed. They can add and remove rows of fields on the fly, which makes repeaters a good fit for collecting lists of related data where the count varies per user (e.g., work history, family members, project tasks).

Basic Usage

Create the repeater field first, then add child fields by pointing their parent to the repeater's ID.

app/Actions/CreateApplicationForm.php

Advanced Example

Repeaters can hold any field type, including required fields and fields with their own validation.

app/Actions/CreateProjectForm.php

Available Settings

SettingTypeDefaultDescription
min_rowsinteger0Minimum number of repeater rows required. User cannot have fewer than this.
max_rowsintegernullMaximum number of repeater rows allowed. Null means unlimited.

Validation

Repeater fields have their own validation behavior:

  • The repeater itself checks that the row count is between min_rows and max_rows
  • Each child field's validation rules run independently on every row
  • If a child field is required, it must have a value in each row
  • Child field validators check each row's data against the field's type-specific rules

Common Use Cases

  • Employment history in job applications
  • Education background (multiple degrees/schools)
  • Family member information
  • Product variants or line items
  • Project milestones or tasks
  • References or testimonials
  • Multiple addresses (shipping, billing, etc.)

Response Data Structure

Repeater submissions are stored as an array of objects, one per row:

{
  "work_experience": [
    {
      "company": "Acme Corp",
      "position": "Senior Developer",
      "start_date": "2020-01-15",
      "end_date": "2023-06-30"
    },
    {
      "company": "TechStart Inc",
      "position": "Lead Engineer",
      "start_date": "2023-07-01",
      "end_date": null
    }
  ]
}