Overview


The Form block is the primary way to capture validated, structured input in UnifyApps. It supports 27 field types — text, numbers, dates, dropdowns, file uploads, and more — arranged in one of three source modes: Manual, Object, or Schema. Every new Form arrives pre-assembled with a title header, a footer containing Reset and Submit buttons already wired to the form, and an On Submit success notification you can replace with your own actions.
Note: When to use the Form block
Collect user input that must be validated before anything runs, such as sign-ups, settings and requests.
Create or update records of a platform object without wiring individual inputs by hand: use the Object source.
Render a form whose shape is decided at runtime by data (an API response, a variable): use the Schema source.
For a single free-standing input tied to no submission flow, prefer a standalone input block instead.
The Three Source Modes
The Source toggle is the block's spine — it decides where fields come from and which inspector properties are shown.
| Mode | Value | Fields Come From | Typical Use |
Manual | custom | A field list you compose in the Fields editor; fields can also be mapped from bound data | Any hand-built form |
Object | entity | The selected platform object's attributes | Create or update a record |
Schema | json_schema | A JSON Schema you bind or paste | Runtime-defined, dynamic forms |
A freshly dropped Form starts in Manual mode with a starter field set. Switching source modes changes which inspector properties appear — Select Object / Action / Record ID, JSON Schema / UI Schema / Default Form Data, and so on.
Manual Source
Build the field list yourself from 27 available types. Fields can also be mapped from bound data — a collection or variable — so the field set changes when your data changes. Use this mode for any custom form that doesn't map directly to a platform object.
Object Source
Select a platform Object, an action (Create or Update), and (for Update) a Record ID. The Form generates its fields from the object's schema automatically. Object-sourced forms pre-populate on Update, validate against the object's constraints, and submit directly to create or update records — no manual wiring needed.
When Source is set to Object, the inspector shows:
Property | Type | Description |
|---|---|---|
Select Object | object selector | The platform object whose attributes become form fields. |
Action | Create or Update | Whether the form creates a new record or updates an existing one. |
Record ID | string (bindable) | The ID of the record to update. Appears when Action is Update. The form auto-populates from this record. |
Schema Source
Bind a JSON Schema (and optionally a UI Schema and Default Form Data) to drive the form's shape at runtime. The form re-renders whenever the bound schema changes. Use this for forms whose structure is determined by data coming from an API or a variable. The setFormData method is only available in Schema mode.
When Source is set to Schema, the inspector shows:
Property | Type | Description |
|---|---|---|
JSON Schema | JSON Schema (bindable) | The JSON Schema that drives which fields are rendered. Bind to an API response or variable for dynamic forms. |
UI Schema | UI Schema (bindable) | Optional UI schema that customizes field rendering — labels, widgets, ordering, column layout. |
Default Form Data | object (bindable) | Initial values for the form when it renders. Updates whenever the bound data changes. |
Content Properties
Fields
Property | Type | Default | Description |
|---|---|---|---|
Source | Manual, Object or Schema | Manual | Which source mode the form uses. |
Fields | field list | Starter set | The form's field list. Add, reorder, group and configure fields here. Appears when Source is Manual or Object. |
Slots
The form has two fixed drop-zones — a header and a footer. A new Form ships with a header containing the form title and a footer containing Reset and Submit buttons. Every individual field also has its own header/footer slots for placing helper content around each field.
Tip: Relabeling, restyling, or deleting the default footer buttons only changes those specific blocks — the form's submitForm and resetForm methods keep working independently, since any button (or other action) can call a method by targeting the form directly.
Interactions
Property | Type | Default | Description |
|---|---|---|---|
Reset form when hidden | on/off | on | When on, the form clears all entries when hidden. Turn off to preserve the user's input across hide/show cycles. |
Autocomplete | On or Off | Browser default | Controls whether the browser offers to autofill the form's fields. |
Events | event list | On Submit → notification | The form's event handlers (On Submit, On Change, On Focus, On Blur). Pre-configured with an On Submit notification. |
Permissions
| Property | Type | Default | Description |
permissions | permission rule | — | Restricts who can see or use the form. Uses the standard block permissions picker. |
Appearance
The Appearance panel controls how the whole form looks and behaves as a block — field layout, label/description styling, disabled and read-only states, and overall block sizing. These settings apply form-wide; each individual field also has its own Appearance settings.
Note: There is no grid or column-count option. The form lays fields out in a single column, or places each field's label beside its input with Row. For a multi-column look, set each field's Width (as a percentage of the form row, under the field's Appearance) so two or more fields share a row — e.g. 50% on two adjacent fields.
| Property | Type | Default | Where to Set | Description |
layout | "column" | "row" | column | Appearance → Layout | column stacks label above input; row puts them side by side. |
autoFocus | boolean | — | Appearance → Auto Focus | Focuses the first field when the form appears. Only active in live app and preview, not in the builder. |
disabled | condition | — | Appearance → Disabled | Disables the entire form when the condition is true. Overrides individual field settings. |
readOnly | condition | — | Appearance → Read only | Makes the entire form read-only when the condition is true. Blocks submission. |
fieldTitle | typography | text-secondary, text-sm, medium | Appearance → Field Label | Color, size and weight of every field's label across the form. |
fieldDescription | variant + options | inline | Appearance → Field Description | How field descriptions render: inline text, a dashed-underline tooltip (with line color), or an icon tooltip (with icon and color). |
visibility | condition | — | Appearance → Visibility | Shows or hides the entire block based on a condition. |
styles | style set | — | Appearance → Styles | Width/min/max, height/min/max, padding, gap between fields, overflow, visibility. |
htmlAttributes | key/value attributes | — | Appearance → HTML Attributes | Custom HTML attributes attached to the form. Only appears once HTML attributes have been applied. |
customCSS | CSS | — | Appearance → Custom CSS | Custom CSS applied to the form. Only appears once custom CSS has been applied. |
Exposed State
Read these values from anywhere on the page. Replace form1 with your form's block ID. This is the reference table for form state; Form Validation, Methods & Events links here.
Binding | Type | Description |
|---|---|---|
| object | Current form data, keyed by field. Hidden fields are absent from this object. |
| array | Current validation errors. Populated after the first submit or validate call. |
| string | Label of the field that currently has focus. |
| string | Description of the focused field. |
| string | Help text of the focused field. |
| object | Data in scope for the focused field. |
Behavior & Gotchas
Warning: Disabling or locking the whole form overrides every field's own setting. When Disabled is on, every field is turned off no matter what a field's own Disabled setting says, and pressing Submit fails the action (its On Error branch runs) and nothing is submitted. When Read only is on, the form cannot be submitted and edits are not saved.
Warning: Auto Focus does nothing while you're building. The Auto Focus toggle only takes effect in the live app and in preview. While editing in the builder it is deliberately ignored so it doesn't steal focus from the inspector.
Note: Custom CSS and HTML Attributes only appear once already applied. The Custom CSS and HTML Attributes controls are hidden from the Appearance panel until the form already has them on it. If you don't see them, this form has none applied yet.
Warning: Switching field-description style clears the previous style's settings. Field Description has three styles — Inline, Dashed, and Icon — and only the selected style's extra settings are kept. Switch away and those settings are discarded; switching back starts them fresh at defaults.
Step-by-Step Examples
Lay Fields Out in Two Columns
Leave Layout =
columnso labels sit above inputs.Open each field's own Appearance and set its Width to
50%.Two adjacent fields at
50%now share one row. Repeat for further pairs.
Put Labels Beside Their Inputs
Set Layout =
rowin the form's Appearance panel.Every field now renders its label to the left of its input instead of above it.
Disable the Form Until It's Ready
In Appearance, set Disabled to a condition — e.g. a binding that is true until a record has loaded.
While the condition is true the whole form is greyed out and cannot be submitted.
When the condition turns false the form becomes editable.
Build a Dynamic Form from an API Response
Set Source = Schema.
Bind JSON Schema to your API response field that contains the schema, e.g.
{{ myApi.data.formSchema }}.Optionally bind Default Form Data to pre-populate values.
The form re-renders whenever the bound schema changes.
Related Pages
Page | Relationship |
|---|---|
All 27 field types and the properties every field shares. | |
Validity conditions, conditional required, submit event, all methods. | |
Build form fields as reusable components and share across pages. |