Fields and field types
A field is one value a record carries. Fields come from two places: the ones a module ships with a kind, and the ones you add yourself. They behave the same on a record; they differ in where their definition lives.
Native fields
A module declares a kind's built-in fields in its manifest. A native field has a
name, a type, and sometimes a role that tells the platform what the field
means. Native field types are text, number, boolean, date, image-path,
url, and object (a free-form JSON blob the kernel treats as opaque and
renderers show as keys).
Custom fields
You add a custom field to any kind whenever you want to track something the module did not ship. A custom field's definition is stored per workspace, its value is stored on the record, and its type is one of:
| Type | For |
|---|---|
text | names, notes, and free text |
number | counts, measurements, prices |
boolean | a yes / no flag |
date | a calendar date |
url | a link |
richtext | formatted long-form text |
computed | a read-only value from a template (see below) |
A text field can carry a list of choices, which turns it into a dropdown, so
a status or category picks from a fixed set. A number field can carry a unit
(mm, g, in); the unit is free text that the units vocabulary resolves at
render time, and it is what size-aware features read rather than the field's name.
A computed field holds a template instead of a stored value; it has its own page,
Computed fields. Linking a record to
another record is a relation field, covered under
Relationships.
Renderers
A custom field can name a renderer that controls how its value is drawn on detail
pages and list rows. The built-in renderers are text, color-hex, image-url,
url-link, year, boolean, code, markdown, and qr. A field with no
renderer draws as plain text.
Field roles
A role gives a field a job the platform can key off, independent of what the field is called. The roles are:
| Role | Meaning |
|---|---|
title | the record's display name |
subtitle | a secondary line under the title |
image | the record's picture |
summary | a short description |
quantity | the count this record is measured in |
unit | the unit that quantity is counted in |
Roles are why an action written for "anything with a quantity" works across
modules: the action matches on the quantity role, so it applies to a part, a
consumable, or any kind that declared a quantity field, no matter the field's
name. Actions declare which kinds they apply to using kinds, roles, or
traits; see
wires for where that matters.
Relabelling without migrating
You can rename, hide, or reorder a kind's native fields for your workspace without
changing what is stored. The value stays under its original name; only the label
and its place in the form change. So "call the sku field Part number" is a
presentation change resolved at load time, not a data migration.