Referenz
Feldtypen Jeder Feldtyp, den du auf einem Objekt deklarieren kannst — was er speichert, welche Optionen er akzeptiert, wie er in REST, Console und im AI Builder erscheint.
48 integrierte Feldtypen, gruppiert nach Familie. Das vollständige Zod-Schema befindet sich in
packages/spec/src/data/field.zod.ts — diese Seite ist eine praktische Zusammenfassung.
Eigenschaft Typ Standard Zweck namestring (snake_case) — Maschinen-Bezeichner — REST-Pfadsegment, SQL-Spalte labelstring — Anzeigebezeichnung in der Console typeFieldType — Siehe Typtabellen unten requiredboolean falseNOT NULL-Beschränkung uniqueboolean falseEindeutiger Index searchableboolean falseIndexiert für /api/v1/search multipleboolean falseSpeichert ein Array von Werten defaultValueunknown — Anfangswert (Literal oder CEL) columnNamestring = name Überschreibt physische DB-Spalte hiddenboolean falseIn Standard-Console-Ansichten ausblenden readonlyboolean falseIn Formularen deaktivieren systemboolean falseAutomatisch eingefügt (id, created_at, …) indexboolean falseErstellt einen DB-Index externalIdboolean falseFür Upsert über externen Schlüssel geeignet inlineHelpTextstring — Tooltip / Hilfetext conditionalRequiredP-Prädikat— Erforderlich, wenn CEL wahr ist trackHistoryboolean falseWertänderungen als menschenlesbare Einträge auf der Aktivitäts-Timeline des Datensatzes darstellen (ADR-0052)
Typ Verwendung für Wichtige Optionen textkurze Zeichenketten maxLength, minLengthtextareamehrzeilig maxLengthemailE-Mail formatvalidiert; kleingeschrieben urlURL formatvalidiert phoneTelefon E.164 passwordeinseitige Geheimnisse vom Auth-Subsystem gehasht; nie von GET zurückgegeben secretumkehrbare Geheimnisse (API-Schlüssel, Token, DB-Passwörter) im Ruhezustand über den Krypto-Provider verschlüsselt, als opake Referenz gespeichert, beim Lesen maskiert. Fail-closed — ohne konfigurierten Provider werfen Schreibvorgänge einen Fehler, statt Klartext zu speichern markdownMarkdown-Inhalt in Console-Vorschau gerendert htmlbereinigtes HTML DOMPurify beim Schreiben richtextWYSIWYG Console-Editor + serialisiertes JSON
Typ Verwendung für Wichtige Optionen numberGleitkommazahlen min, max, precision, scalecurrencyGeld currencyConfig: { precision, currencyMode: 'fixed' | 'dynamic', defaultCurrency }percent0–100 % min, max, scale
integer und decimal sind keine eigenen Typen — verwende number mit
scale: 0 für Ganzzahlen, precision+scale für feste Dezimalstellen.
Typ Speichert Hinweise dateKalenderdatum keine Zeitzone datetimeZeitpunkt UTC timeUhrzeit kein Datum
Typ Hinweise booleanKontrollkästchen toggleWie boolean, Schalter-UI
Typ Hinweise selectEinzelauswahl — Optionen inline deklariert oder aus einer Auswahlliste referenziert multiselectMehrfachauswahl, als Array gespeichert radioUI-Alias für select mit Radio-Button-Darstellung checkboxesUI-Alias für multiselect mit Kontrollkästchen-Darstellung
Optionsform:
options : [
{ value: 'low' , label: 'Low' },
{ value: 'high' , label: 'High' , color: '#e02' },
{ value: 'urgent' , label: 'Urgent' , color: '#c00' }
]
Typ Kardinalität Semantik lookupviele-zu-eins Lose Referenz; das Löschen des übergeordneten Datensatzes löscht das untergeordnete standardmäßig nicht master_detailviele-zu-eins, kaskadierend Untergeordneter Datensatz kann ohne übergeordneten nicht existieren; Berechtigungen werden vom übergeordneten geerbt treeSelbstreferenz Hierarchisch (parent_id auf demselben Objekt)
Häufige Optionen:
{
type : 'lookup' ,
reference : 'account' , // target object name
referenceFilters : [ 'status:active' ], // narrow the lookup picker
deleteBehavior : 'set_null' // 'set_null' | 'cascade' | 'restrict'
}
Typ Funktion Wichtige Option formulaAbgeleiteter Wert, beim Lesen oder Neuberechnen ausgewertet expression: F\record.qty * record.unit_price`` — siehe CEL summaryAggregation über eine untergeordnete Beziehung summaryOperations: { object, field, function } (count | sum | avg | min | max)autonumberAutomatisch hochzählende Anzeigenummer format (z. B. TKT-{0000}), startAt
Formel-Beispiel:
{
name : 'profit_margin' ,
type : 'formula' ,
expression : F `(record.revenue - record.cost) / record.revenue * 100`
}
Typ Verwendung für Wichtige Option imageBildanhänge fileAttachmentConfig (siehe unten)filebeliebige Datei dasselbe avatarProfilbilder quadratischer Zuschnitt, sinnvolle Standardwerte videoVideo-Uploads Dauer + Thumbnail-Erfassung audioAudio Wellenform-Vorschau
fileAttachmentConfig : {
maxSize : 10_000_000 , // bytes
allowedTypes : [ 'image/png' , 'image/jpeg' ],
virusScan : true ,
storageProvider : 's3' , // see Configure → Storage
imageValidation : { minWidth : 200 , maxWidth : 4096 , generateThumbnails : [ 'sm' , 'md' , 'lg' ] }
}
Typ Speichert Hinweise jsonbeliebiges JSON Auf Postgres als JSONB gespeichert compositeUnterdatensatz mit benannten Feldern Inline-Struktur, keine separate Tabelle repeaterArray von zusammengesetzten Werten Eins-zu-viele ohne untergeordnetes Objekt
Typ Hinweise locationBreiten-/Längengrad + Genauigkeit addressStraße / Stadt / Region / Postleitzahl / Land codeQuellcode-Feld — language, theme, lineNumbers colorcolorFormat: 'hex' | 'rgb' | 'rgba' | 'hsl', presetColors[]rating1–N Sterne — max, icon sliderbegrenzte Zahl mit Schieberegler-UI signaturegezeichnete Unterschrift, als Bild gespeichert qrcoderendert den Wert als QR-Code oder Barcode (EAN / UPC / Code128) progressabgeleiteter Prozentwert als Balken dargestellt tagsfrei wählbares Tag-Array mit Autovervollständigung vectorEmbedding-Spalte — vectorConfig: { dimensions, distanceMetric: 'cosine' | 'euclidean', indexed, indexType: 'hnsw' | 'ivfflat' }
Feld Typ Hinweise idtext (ULID) Primärschlüssel created_atdatetime UTC-Einfügezeit updated_atdatetime UTC-Zeit der letzten Schreiboperation created_bylookup → user wer eingefügt hat updated_bylookup → user wer zuletzt geschrieben hat versioninteger Token für optimistische Nebenläufigkeit
Diese deklarierst du nicht — deaktiviere sie pro Objekt mit
ObjectSpec.systemFields: false (selten eine gute Idee).
*.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`