Field types
All 14 field types — what each one collects, how it validates, and when to use it.
Deooch Forms has 14 field types. Thirteen collect an answer; the fourteenth, heading, is a section title that collects nothing. Each field carries a label, an optional placeholder and help text, and a required flag.
| Type | Shown as | When to use it |
|---|---|---|
text | Short text | One line of free text — names, job titles, reference numbers. |
textarea | Long text | A multi-line box for anything open-ended: feedback, descriptions, questions. |
email | Validated as an email address before the form will submit. Use this rather than a text field if you plan to reply. | |
phone | Phone | Digits, formatted as the respondent types. |
address | Address | A grouped street / city / region / postcode block instead of one free-text line. |
number | Number | Numeric input only — quantities, ages, budgets. |
select | Dropdown | One answer from a list, collapsed. Best above roughly six options. |
radio | Single choice | One answer from a list, all options visible. Best for two to six options. |
checkbox | Multiple choice | Any number of answers from a list. |
date | Date | A native date picker — no format ambiguity between regions. |
file | File link | A URL pointing at a file the respondent already hosts. |
upload | File upload | The respondent uploads the file itself; it is stored with the response. |
signature | Signature | A drawn signature, for consent and acknowledgement forms. |
heading | Section heading | Display only — collects no answer. Use it to break a long form into named sections. |
Choice fields
select, radio, and checkbox take an options array of strings. radio and select both accept exactly one answer — the difference is whether the options are visible up front. Show them when there are few, collapse them when there are many.
Required fields and validation
Set required: true and the form will not submit without an answer. Type-level validation runs on top of that: email must look like an address, number rejects text, date uses a native picker. Validation runs in the browser and again on the server, so a crafted request cannot slip past it.
Requiring everything is the most common mistake. Every required field is another reason to abandon the form — mark only what you genuinely cannot act without.
Sections
A heading field renders as a section title in the flow of the form. Use them once a form covers more than one topic — Contact details, Your project, Consent. Do not open a form with a heading that repeats its title; the title already renders above the fields.
Ordering
Every field has an order number, which is what the renderer sorts on. In the studio you drag; over MCP you set it explicitly — and since update_form replaces the whole array, send fields back with their orders already correct.