Skip to main content
A Declarative Forms config file is a YAML file in a GitHub repo. It has a small set of root-level keys. Three are required; the rest are optional and each adds a specific capability. Here is the job application form from the quickstart:
version: 1
title: Join the team
sections:
  - id: main
    title: Apply to work with us
    fields:
      - id: full_name
        type: short_text
        label: Full name
      - id: role
        type: single_select
        label: Role you're applying for
        options:
          - Software Engineer
          - Product Manager
          - Designer
      - id: email
        type: email
        label: Email address
    next: done
Three keys at work here: version, title, and sections. That’s everything required to make a working form.

Required keys

version — Always 1. Reserved for future schema versioning. title — The heading shown at the top of the form. Accepts a plain string or a locale map for multilingual forms. sections — An array of one or more section definitions. Each section has fields, a title, and a next destination. See Sections.

Optional keys

description

A subtitle rendered below the form title.
version: 1
title: Join the team
description: Takes about 2 minutes.
Accepts a plain string or a locale map.

connections

Defines what fires after the form is completed — a webhook, an email, or an Airtable row. Connections only fire when status becomes completed.
connections:
  - type: webhook
    url: https://your-api.com/hooks/apply
See Connections for full coverage of all three types.

completion

Customizes the thank-you page shown after the final section is submitted. Supports {{data.fieldId}} interpolation.
completion:
  title: "Thanks, {{data.full_name}}!"
  message: We'll review your application and be in touch.
  button:
    label: Back to our site
    url: https://example.com

start_date / end_date

Makes the form inaccessible outside a date window. Both accept ISO 8601 strings.
start_date: "2025-09-01"
end_date: "2025-09-30"

locale

Locks the form to a specific language. Without this key, locale is resolved from the browser. The platform auto-appends ?lang= to maintain locale across sections.
locale: es
See Localization.

mixpanel

Enables analytics events (page_view and section_completed) sent to your Mixpanel project.
mixpanel: "your-project-token"

Full example

The job application form with every optional root key included:
version: 1
title: Join the team
description: Takes about 2 minutes.
start_date: "2025-01-01"
end_date: "2025-12-31"
locale: en
mixpanel: "your-project-token"

sections:
  - id: main
    title: Apply to work with us
    fields:
      - id: full_name
        type: short_text
        label: Full name
      - id: role
        type: single_select
        label: Role you're applying for
        options:
          - Software Engineer
          - Product Manager
          - Designer
      - id: email
        type: email
        label: Email address
    next: done

connections:
  - type: webhook
    url: https://your-api.com/hooks/apply

completion:
  title: "Thanks, {{data.full_name}}!"
  message: We'll review your application and be in touch.

For complete property tables, see the YAML Schema reference.