| name |
string |
optional |
Machine name (snake_case) |
| label |
string |
optional |
Human readable label |
| type |
Enum<'text' | 'textarea' | 'email' | 'url' | 'phone' | 'password' | 'secret' | 'markdown' | 'html' | 'richtext' | 'number' | 'currency' | 'percent' | 'date' | 'datetime' | 'time' | 'boolean' | 'toggle' | 'select' | 'multiselect' | 'radio' | 'checkboxes' | 'lookup' | 'master_detail' | 'tree' | 'user' | 'image' | 'file' | 'avatar' | 'video' | 'audio' | 'formula' | 'summary' | 'autonumber' | 'composite' | 'repeater' | 'record' | 'location' | 'address' | 'code' | 'json' | 'color' | 'rating' | 'slider' | 'signature' | 'qrcode' | 'progress' | 'tags' | 'vector'> |
✅ |
Field Data Type |
| description |
string |
optional |
Tooltip/Help text |
| format |
string |
optional |
Format string (e.g. email, phone) |
| required |
boolean |
optional |
Is required |
| searchable |
boolean |
optional |
Is searchable |
| multiple |
boolean |
optional |
Allow multiple values (Stores as Array/JSON). Applicable for select, lookup, file, image. |
| unique |
boolean |
optional |
Is unique constraint |
| defaultValue |
any |
optional |
Default value |
| maxLength |
number |
optional |
Max character length |
| minLength |
number |
optional |
Min character length |
| precision |
number |
optional |
Total digits |
| scale |
number |
optional |
Decimal places |
| min |
number |
optional |
Minimum value |
| max |
number |
optional |
Maximum value |
| options |
{ label: string; value: string; color?: string; default?: boolean; … }[] |
optional |
Static options for select/multiselect |
| reference |
string |
optional |
Target object name (snake_case) for lookup/master_detail fields. Required for relationship types. Used by $expand to resolve foreign key IDs into full objects. |
| deleteBehavior |
Enum<'set_null' | 'cascade' | 'restrict'> |
optional |
What happens if referenced record is deleted |
| inlineEdit |
boolean | Enum<'grid' | 'form'> |
optional |
Edit these child records inline within the parent's form (atomic master-detail). true = auto-pick grid/form by child shape; 'grid' = editable line-item grid; 'form' = list + per-row full form. |
| inlineTitle |
string |
optional |
Title for the inline master-detail grid |
| inlineColumns |
any[] |
optional |
Explicit columns for the inline grid (derived from the child object when omitted) |
| inlineAmountField |
string |
optional |
Numeric child field summed for the inline grid total |
| relatedList |
boolean | 'primary' |
optional |
Show this child collection as a related list on the parent's detail page (read-side mirror of inlineEdit). false = suppress; true/absent = shown (stacked under the shared "Related" tab); 'primary' = core relationship, promoted to its own tab. Prominence intent, not a layout switch (ADR-0085). |
| relatedListTitle |
string |
optional |
Title for the detail-page related list |
| relatedListColumns |
any[] |
optional |
Explicit columns for the detail-page related list (derived from the child object when omitted) |
| displayField |
string |
optional |
Field shown as each candidate's label in the picker/popover (defaults to the referenced object's name/title). |
| descriptionField |
string |
optional |
Secondary field shown under the label in the quick-select popover. |
| lookupColumns |
string | { field: string; label?: string; width?: string; type?: string }[] |
optional |
Explicit columns for the record-picker table; auto-derived from the referenced object when omitted. |
| lookupPageSize |
integer |
optional |
Rows per page in the record-picker dialog (default 10). |
| lookupFilters |
{ field: string; operator: Enum<'eq' | 'ne' | 'gt' | 'lt' | 'gte' | 'lte' | 'contains' | 'in' | 'notIn'>; value: any }[] |
optional |
Base filters restricting which records are selectable (e.g. only active). The structured, picker-honoured lookup filter. |
| dependsOn |
string | { field: string; param?: string }[] |
optional |
Declares that this field's available values depend on the value of other field(s) on the same record — the form gates the field until they are set and re-evaluates as they change. For lookup/master_detail it scopes the candidate query (string = same local/remote key; {field,param} when the remote filter key differs — the {field,param} form is lookup-only). For select/multiselect/radio the actual per-option rule lives in each option's visibleWhen; list the referenced fields here (string form) so the option list gates and refreshes with the parent. |
| allowCreate |
boolean |
optional |
Allow inline quick-create from the record picker: when no match exists the user can create a record from the typed text (optimistic dataSource.create with the display field). Best for simple objects whose only required field is the display field. |
| expression |
string | { dialect: Enum<'cel' | 'js' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object } |
optional |
Formula expression (CEL). e.g. Frecord.amount * 0.1 |
| returnType |
Enum<'number' | 'text' | 'boolean' | 'date'> |
optional |
Inferred value type of a formula field (number/text/boolean/date) |
| summaryOperations |
{ object: string; field: string; function: Enum<'count' | 'sum' | 'min' | 'max' | 'avg'>; relationshipField?: string; … } |
optional |
Roll-up summary definition. The engine recomputes the value when child records are inserted/updated/deleted. |
| language |
string |
optional |
Programming language for syntax highlighting (e.g., javascript, python, sql) |
| step |
number |
optional |
Step increment for slider (default: 1) |
| currencyConfig |
{ precision?: integer; currencyMode?: Enum<'dynamic' | 'fixed'>; defaultCurrency?: string } |
optional |
Configuration for currency field type |
| dimensions |
integer |
optional |
Vector dimensionality (e.g., 1536 for OpenAI embeddings) |
| trackHistory |
boolean |
optional |
Render this field's value changes as human-readable entries on the record activity timeline (ADR-0052 §5b). Opt-in per field. |
| group |
string |
optional |
Field group name for organizing fields in forms and layouts (e.g., "contact_info", "billing", "system") |
| visibleWhen |
string | { dialect: Enum<'cel' | 'js' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object } |
optional |
Predicate (CEL) — field is shown only when TRUE (else hidden). e.g. Precord.type == 'invoice' |
| readonlyWhen |
string | { dialect: Enum<'cel' | 'js' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object } |
optional |
Predicate (CEL) — field is read-only when TRUE. e.g. Precord.status == 'paid' |
| requiredWhen |
string | { dialect: Enum<'cel' | 'js' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object } |
optional |
Predicate (CEL) — field is required when TRUE. Canonical name for conditionalRequired. |
| conditionalRequired |
string | { dialect: Enum<'cel' | 'js' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object } |
optional |
Predicate (CEL) — field is required when TRUE. Alias of requiredWhen. |
| widget |
string |
optional |
Form widget override — names a registered field component (resolved as field:<widget>) to render this field instead of the type default. Degrades to the type renderer when unregistered. e.g. "object-ref", "filter-condition", "recipient-picker". |
| hidden |
boolean |
optional |
Hidden from default UI |
| readonly |
boolean |
optional |
Read-only — never editable in forms, AND server-enforced on BOTH write paths: a non-system write to this field is silently dropped from the payload on UPDATE (#2948/#3003) and on INSERT (#3043; a create can no longer directly seed e.g. approval_status: "approved"), symmetric with readonlyWhen. A stripped INSERT field still falls back to its defaultValue; system-context writes (import, seed replay, migration) are exempt. |
| requiredPermissions |
string[] |
optional |
[ADR-0066 D3] Capabilities required to read/edit this field (mask on read, deny on write; AND-gate). |
| system |
boolean |
optional |
Auto-injected system/audit field (e.g. created_at, updated_by, organization_id). Tools that surface system fields separately from author-declared business fields should branch on this flag. |
| sortable |
boolean |
optional |
Whether field is sortable in list views |
| inlineHelpText |
string |
optional |
Help text displayed below the field in forms |
| autonumberFormat |
string |
optional |
Auto-number format: literal text + {0000} counter, {YYYY}/{MM}/{DD}/{YYYYMMDD} date tokens (business tz), and {field_name} interpolation. Counter resets per rendered prefix (e.g. AD{YYYYMMDD}``{0000} resets daily). |
| externalId |
boolean |
optional |
Is external ID for upsert operations |