Render value changes as human-readable entries on the record activity timeline (ADR-0052)
Removed in 16.0: columnName (the physical column is always the field name;
external/federated objects map columns via external.columnMap) and the
field-level index boolean (declare indexes in the object's indexes[] array).
hashed by the auth subsystem; never returned by GET
secret
reversible secrets (API keys, tokens, DB passwords)
encrypted at rest via the crypto provider, stored as an opaque ref, masked on read. Fail-closed — with no provider configured, writes throw rather than persist cleartext
The old string-array referenceFilters was removed in 16.0 — the record picker
only honours the structured lookupFilters form. Supported operator values:
eq, ne, gt, lt, gte, lte, contains, in, notIn.
{ type: 'file', multiple: true, // store an array of attachments accept: ['image/png', 'image/jpeg'], // MIME types / extensions maxSize: 10_000_000 // bytes}
The nested fileAttachmentConfig object was removed in 16.0 — it was never
read by the runtime. Use the flat multiple / accept / maxSize properties.
Storage is configured per deployment (see Configure → Storage), not per field.
renders the value as a QR or barcode (EAN / UPC / Code128)
progress
derived percent rendered as a bar
tags
free-form tag array with autocomplete
vector
embedding column — flat dimensions (e.g. 1536 for OpenAI embeddings). The nested vectorConfig (distanceMetric/indexed/indexType) was removed in 16.0 — it was never read
*.object.ts (field spec) │ ├─► Postgres / MySQL / SQLite column + index + constraint ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) └─► Audit: change-tracked if `trackHistory: true`