Skip to main content

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:

TypeFor
textnames, notes, and free text
numbercounts, measurements, prices
booleana yes / no flag
datea calendar date
urla link
richtextformatted long-form text
computeda 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:

RoleMeaning
titlethe record's display name
subtitlea secondary line under the title
imagethe record's picture
summarya short description
quantitythe count this record is measured in
unitthe 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.