Skip to main content
Menu
On this page

Fields

Pick the right Fillo field type and look up its schema options, stored value, and validation behavior.

A field is a question that stores an answer under its stable id. The same field definition drives the dashboard builder, SDK renderers, server validation, response grid, exports, and integrations.

Field catalog

FieldKindStored valueBest for
Short textshort_textstringNames and brief answers
Long textlong_textstringFeedback and explanations
EmailemailstringEmail addresses
PhonephonestringInternational phone numbers
NumbernumbernumberQuantities and measurements
URLurlstringHTTP and HTTPS links
Selectselectoption ID or other textOne visible choice
Multi-selectmulti_selectstring arraySeveral choices
Dropdowndropdownoption ID or other textOne compact choice
CheckboxcheckboxbooleanConsent or one toggle
RatingratingintegerStar ratings and CSAT
Linear scalelinear_scaleintegerNPS and numbered scales
Rankingrankingstring arrayA complete preference order
Matrixmatrixrow-to-column objectRepeated questions on one scale
Signaturesignatureimage data stringDrawn acknowledgement
DatedateYYYY-MM-DD stringCalendar dates
File uploadfile_uploadfile reference arrayFiles in connected storage
HiddenhiddenstringSource and account context
Customcustomarbitrary JSONA renderer you own
Calculatedcalculatednumber (server-computed)Totals and derived values
Repeating grouprepeating_grouparray of instance objectsGuests, line items, and other "one row per thing" questions

Shared options

Every field has id, kind, and label. Most fields also accept:

OptionTypeBehavior
descriptionstringSupporting copy under the label
requiredbooleanRejects an empty answer when true
placeholderstringHint text where the renderer has a text control
visibleIfCondition[]Shows the field only when every condition matches

Field IDs are response keys. Keep them stable after launch, even when the label changes. Hidden or unreachable fields are removed before server validation, so a skipped required field doesn't block a valid conditional path.

Content blocks

heading, paragraph, and divider are layout blocks, not fields. They can use visibleIf, but they never create an answer in a response.

Minimal field example

In the dashboard

  1. Open a form in the editor.
  2. Select Add block and choose a field type.
  3. Set the label and any type-specific options.
  4. Publish the draft before public forms use the change.

In code

ts
import { defineForm } from "@usefillo/core";

const contact = defineForm({
  id: "contact",
  pages: [{
    id: "main",
    blocks: [
      { id: "email", kind: "email", label: "Work email", required: true },
    ],
  }],
});

Updated

Was this page helpful?