Skip to main content
Describe the fields you want to Catalyst. This page is the reference for what’s available.

Field types

Every field takes a label, optional help text under the label, and a message that replaces the default error copy.

Validation

Serval enforces constraints, not the browser. A violation shows an error on the field and blocks submit on every surface.
Constraints never fire on an empty answer. required owns emptiness. An optional field with a maxLength is checked only once somebody types in it.
Date bounds are absolute. There’s no “no earlier than today,” because the form renders without a trustworthy clock. A rule that moves with the calendar belongs in the submit workflow.

Choice fields

select and multiSelect options can carry a description shown as secondary text. Slack truncates descriptions after 75 characters. The submitted value is unchanged. cards renders options as a grid of tiles with optional images: the right choice when somebody is picking a thing, like a laptop model or an office location.
Card images must be https URLs and load directly in the filler’s browser. Serval doesn’t host or proxy them, so use an image that’s publicly reachable and expected to stay that way. columns accepts 2, 3, or 4 and defaults to 3.

Database and user fields

entity and entityList turn a database table into a searchable picker, so requesters choose real records instead of typing names that match nothing. You pick which field shows as the label, which is submitted as the value, and which appears as secondary text. Filters can key off another field’s current answer, so choosing an application narrows the entitlements below it. user and userList pick from your organization: teamId and groupId are mutually exclusive. Setting both fails at render time rather than dropping a filter.

Layout

The <Form> root carries identity and look: header (title, subtitle, icon), accent (brand, blue, green, yellow, orange, red), density (comfortable, compact), and surface (plain, tinted, gradient).
Colors and icons come from fixed lists, so forms match the rest of the product and render correctly everywhere, including Slack. An unrecognized name fails at publish instead of rendering nothing.

Logic and workflows

Conditional fields and live data from your systems.

Share and fill

Where forms appear and how each surface renders them.