The Five Field Types Worth Knowing
Loom has 20 field types in total (see the Field Type Catalogue for the full table). In practice, five carry most of the weight. Learn these and you can model 80% of real applications.
1. text — short strings
The default for anything that fits in 255 characters: names, codes, slugs, single-line descriptions.
- name: company_name
type: text
required: true
searchable: true
Generates VARCHAR(255) in MySQL, string in Go, <input type="text"> in HTML.
2. select — fixed enums
Anything from a small list. Frappe's pattern of using strings (not integers) for enum values keeps SQL queries readable.
- name: status
type: select
default: "draft"
options:
- label: Draft
value: draft
- label: Sent
value: sent
- label: Paid
value: paid
color: green
The optional color per-option drives badge colours in the generated UI.
3. link — references to other Threads
The Loom equivalent of a foreign key. Stored as CHAR(36) (UUID) in MySQL, *uuid.UUID in Go.
- name: customer_id
type: link
target: Customer # required: PascalCase model name
required: true
The target Thread must exist. The generated UI renders an autocomplete picker; the API accepts the linked record's UUID.
4. decimal — money and measurements
Anything where floating-point representation errors would matter. Loom's default precision is DECIMAL(15,4) — fifteen total digits, four after the point — which covers prices up to ~10 trillion with sub-cent precision.
- name: amount
type: decimal
required: true
min: 0
The min and max constraints validate at API time and become validate:"min=N,max=N" tags on the generated Go struct.
5. markdown — long-form content
When you need formatting (notes, blog posts, internal documentation). Stored as LONGTEXT; the UI renders an editor with preview.
- name: notes
type: markdown
Choose markdown over textarea whenever the content might benefit from formatting; choose textarea for plain multi-line text without expectations.
What about the other fifteen?
| If you need… | Use |
|---|---|
| Email addresses (with format validation) | email |
| Phone numbers | phone |
| URLs | url |
| Whole numbers | integer |
| True/false | boolean |
| Calendar dates without time | date |
| Date + time | datetime |
| Single-pick from a small set, rendered as radios | radio |
| Multi-pick from a list | multiselect |
| File uploads (any format) | attach |
| Image uploads (with thumbnail rendering) | image |
| Arbitrary structured data | json |
| Code / config snippets with syntax highlight | code |
Auto-generated UUID (in addition to the implicit id column) |
uuid |
The full reference is at Reference → Field Type Catalogue, which includes the exact Go and SQL types for each.