Unify Applications
Logo
Form Overview & Appearance

Form Overview & Appearance

Logo

10 mins READ

Overview

unify-applications-form-overview-and-appearance-01-form-block-manual-source.png
unify-applications-form-overview-and-appearance-01-form-block-manual-source.png

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.

ModeValueFields Come FromTypical Use
ManualcustomA field list you compose in the Fields editor; fields can also be mapped from bound dataAny hand-built form
ObjectentityThe selected platform object's attributesCreate or update a record
Schemajson_schemaA JSON Schema you bind or pasteRuntime-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

PropertyTypeDefaultDescription
permissionspermission 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.

PropertyTypeDefaultWhere to SetDescription
layout"column" | "row"columnAppearance → Layoutcolumn stacks label above input; row puts them side by side.
autoFocusboolean—Appearance → Auto FocusFocuses the first field when the form appears. Only active in live app and preview, not in the builder.
disabledcondition—Appearance → DisabledDisables the entire form when the condition is true. Overrides individual field settings.
readOnlycondition—Appearance → Read onlyMakes the entire form read-only when the condition is true. Blocks submission.
fieldTitletypographytext-secondary, text-sm, mediumAppearance → Field LabelColor, size and weight of every field's label across the form.
fieldDescriptionvariant + optionsinlineAppearance → Field DescriptionHow field descriptions render: inline text, a dashed-underline tooltip (with line color), or an icon tooltip (with icon and color).
visibilitycondition—Appearance → VisibilityShows or hides the entire block based on a condition.
stylesstyle set—Appearance → StylesWidth/min/max, height/min/max, padding, gap between fields, overflow, visibility.
htmlAttributeskey/value attributes—Appearance → HTML AttributesCustom HTML attributes attached to the form. Only appears once HTML attributes have been applied.
customCSSCSS—Appearance → Custom CSSCustom 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

{{ form1.data }}

object

Current form data, keyed by field. Hidden fields are absent from this object.

{{ form1.errors }}

array

Current validation errors. Populated after the first submit or validate call.

{{ form1.context.currentField.label }}

string

Label of the field that currently has focus.

{{ form1.context.currentField.description }}

string

Description of the focused field.

{{ form1.context.currentField.help }}

string

Help text of the focused field.

{{ form1.context.currentField.data }}

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

  1. Leave Layout = column so labels sit above inputs.

  2. Open each field's own Appearance and set its Width to 50%.

  3. Two adjacent fields at 50% now share one row. Repeat for further pairs.

Put Labels Beside Their Inputs

  1. Set Layout = row in the form's Appearance panel.

  2. Every field now renders its label to the left of its input instead of above it.

Disable the Form Until It's Ready

  1. In Appearance, set Disabled to a condition — e.g. a binding that is true until a record has loaded.

  2. While the condition is true the whole form is greyed out and cannot be submitted.

  3. When the condition turns false the form becomes editable.

Build a Dynamic Form from an API Response

  1. Set Source = Schema.

  2. Bind JSON Schema to your API response field that contains the schema, e.g. {{ myApi.data.formSchema }}.

  3. Optionally bind Default Form Data to pre-populate values.

  4. The form re-renders whenever the bound schema changes.

Page

Relationship

Form Field Types

All 27 field types and the properties every field shares.

Form Validation, Methods & Events

Validity conditions, conditional required, submit event, all methods.

Reusable Forms & Fields

Build form fields as reusable components and share across pages.

FAQs

Can I use a Form block without the default Submit button?

Yes. The default Submit button in the footer slot is just a regular button pre-wired to the form's submitForm method. You can delete it and place your own button anywhere on the page — call submitForm on the form block from any button or interaction. The form's submit behavior is independent of the default footer buttons.

How do I pre-populate a form when editing an existing record?

Set the form's Source to Object, set Action to Update, and bind Record ID to the record's identifier (e.g. {{ myTable.selectedRow.id }}). The form auto-populates all fields from that record. For Manual source forms, bind each field's Default Value to the corresponding record field.

Why does my form reset when I hide and re-show it?

The Reset form when hidden property is on by default (Inspector → Content → Interactions). When the form's visibility condition turns false or the form unmounts, it clears all user input. Turn this off in Interactions if you want to preserve the user's entries across hide/show cycles.

What is the difference between Disabled and Read Only on a form?

Disabled greys out every field and prevents submission entirely — calling submitForm while the form is disabled fails the action (its On Error branch runs) and nothing is submitted. Read Only allows the user to see all values but not edit them, and also blocks submission. Use Disabled when the form is not yet ready (e.g. data still loading); use Read Only to display existing values the user should not change.

Can I build a multi-step wizard with a Form block?

Yes, with a few techniques. You can show different groups of fields on each step by using field Visibility conditions tied to a step variable, or by placing fields across multiple Form blocks on separate pages/tabs and collecting data into variables. Call validateForm at each step transition to check the visible fields before advancing. The Form does not have built-in wizard steps, but these patterns achieve the same result.