Forms
Field reference
Every built-in field type with its supported settings and validation options.
Text inputs
text— single-line input.textarea— multi-line input.email— validates as an email.url— validates as a URL.phone— formatted phone input with country codes.
Numeric & dates
number— integer or float, with min/max.rating— 1-to-N stars or faces.date,datetime,time.range— slider with step.
Choice
select— dropdown, single or multi.radio— exclusive choice with visible options.checkbox— single boolean or multi-select.
Advanced
file— with size/type restrictions.signature— e-sign canvas with audit.address— autocomplete + structured components.section— group label and divider.
Address field
Stores a structured value with line 1 / line 2 / city / region / postal code / country, plus optional latitude and longitude. The public renderer drives autocomplete via Geoapify; the API key lives server-side and every keystroke is rate-limited per IP.
Validation modes:
off— accept any input.format— postal code must match the country's pattern (US ZIP, UK postcode, etc.).verified— value must come from the autocomplete dropdown. Pair withrequireVerifiedPickto reject typed-only entries.
Configure restricted countries with ISO-3166-1 alpha-2 codes (US, CA, GB) — the picker hides results outside that set. Manual entry is allowed by default and can be disabled when a form needs every address to come from the provider.
On submission the address is stored as an object. CSV exports fan components into <field> (line1), <field> (city), etc. — and Salesforce / custom-DB integrations can map sub-components individually ({fieldId}.city, {fieldId}.postalCode, …) to their own destination columns.
{
type: "address",
label: "Shipping address",
required: true,
meta: {
provider: "geoapify",
validation: "verified",
allowedCountries: ["US", "CA"],
captureCoordinates: true,
manualEntryAllowed: false,
requireVerifiedPick: true,
},
}Custom validation
Attach a regex, min/max, or a custom function to any field:
{
type: "text",
label: "Invoice number",
required: true,
validation: {
pattern: "^INV-\\d{4,}$",
message: "Format is INV-XXXX where X is a digit.",
},
}