Skip to main content
Menu
On this page

Pages and layout

Split a form into pages, show progress, and keep layout ownership in the right renderer.

Pages split one form into validated steps while keeping every answer in the same response.

When to add a page

Add a page when the respondent hits a clear phase change, when a follow-up shouldn't distract from the first decision, or when a long form needs a visible sense of progress. Related questions can stay together — Fillo doesn't force one question per page.

In the dashboard

  1. Select Add block where the next step should begin.
  2. Choose Page break.
  3. Give the new page a short title when the phase needs explanation.
  4. Reorder fields within the page.
  5. Preview Back, Next, validation, and narrow-screen behavior.

The built-in renderer shows progress on a multi-page form unless showProgress is false.

In code

ts
const onboarding = defineForm({
  id: "onboarding",
  pages: [
    {
      id: "account",
      title: "Your account",
      blocks: [
        { id: "email", kind: "email", label: "Work email", required: true },
      ],
    },
    {
      id: "goals",
      title: "What you need",
      blocks: [
        { id: "goal", kind: "long_text", label: "What are you trying to do?" },
      ],
    },
  ],
  settings: { showProgress: true },
});

Page IDs are jump targets, so keep them stable when logic points to them.

Layout limits

The default React and DOM renderers stack blocks in one column. There's no column-width or grid-position setting in the schema. Use the appearance slots for visual spacing, or reach for FilloProvider or createFormController when your app needs a multi-column layout.

Progress shows the current reachable page position. Page jumps and early end can change which pages are reachable — and the shared logic engine uses that same path during server validation.

  • Logic: Jump to another page, end early, or conditionally reveal a block.
  • Custom UI: Place fields in a host-owned grid without changing the schema.
  • Styling: Adjust the built-in renderer with theme and appearance slots.

Updated

Was this page helpful?