Référence
Types de champ Chaque type de champ que vous pouvez déclarer sur un objet — ce qu'il stocke, les options qu'il accepte, comment il apparaît dans REST, la Console et l'AI Builder.
48 types de champ intégrés, regroupés par famille. Le schéma Zod complet se trouve dans
packages/spec/src/data/field.zod.ts — cette page en est un résumé pratique.
Propriété Type Valeur par défaut Objectif namestring (snake_case) — Identifiant machine — segment de chemin REST, colonne SQL labelstring — Libellé d'affichage dans la Console typeFieldType — Voir les tableaux de types ci-dessous requiredboolean falseContrainte NOT NULL uniqueboolean falseIndex unique searchableboolean falseIndexé pour /api/v1/search multipleboolean falseStocke un tableau de valeurs defaultValueunknown — Valeur initiale (littéral ou CEL) columnNamestring = name Remplace la colonne physique en base de données hiddenboolean falseMasquer dans les vues Console par défaut readonlyboolean falseDésactiver dans les formulaires systemboolean falseInjecté automatiquement (id, created_at, …) indexboolean falseCréer un index en base de données externalIdboolean falseÉligible à l'upsert via clé externe inlineHelpTextstring — Infobulle / texte d'aide conditionalRequiredprédicat P — Requis lorsque le CEL est vrai trackHistoryboolean falseAffiche les changements de valeur sous forme d'entrées lisibles sur la timeline d'activité de l'enregistrement (ADR-0052)
Type À utiliser pour Options clés textchaînes courtes maxLength, minLengthtextareamulti-ligne maxLengthemaile-mail format validé ; mis en minuscules urlURL format validé phonetéléphone E.164 passwordsecrets à sens unique haché par le sous-système d'authentification ; jamais renvoyé par GET secretsecrets réversibles (clés d'API, jetons, mots de passe de base de données) chiffré au repos via le fournisseur de cryptographie, stocké comme référence opaque, masqué à la lecture. Fail-closed — sans fournisseur configuré, les écritures lèvent une erreur plutôt que de persister du texte en clair markdowncorps en markdown rendu dans l'aperçu de la Console htmlHTML assaini DOMPurify à l'écriture richtextWYSIWYG éditeur Console + JSON sérialisé
Type À utiliser pour Options clés numbernombres à virgule flottante min, max, precision, scalecurrencymontants currencyConfig: { precision, currencyMode: 'fixed' | 'dynamic', defaultCurrency }percent0–100 % min, max, scale
integer et decimal ne sont pas des types distincts — utilisez number avec
scale: 0 pour un entier, precision+scale pour un décimal fixe.
Type Stocke Remarques datedate calendaire sans fuseau horaire datetimeinstant UTC timeheure d'horloge sans date
Type Remarques booleanCase à cocher toggleIdentique à boolean, interface à interrupteur
Type Remarques selectChoix unique — options déclarées en ligne ou référencées depuis une picklist multiselectPlusieurs choix, stockés sous forme de tableau radioAlias d'interface pour select avec rendu en boutons radio checkboxesAlias d'interface pour multiselect avec rendu en cases à cocher
Forme des options :
options : [
{ value: 'low' , label: 'Low' },
{ value: 'high' , label: 'High' , color: '#e02' },
{ value: 'urgent' , label: 'Urgent' , color: '#c00' }
]
Type Cardinalité Sémantique lookupplusieurs-à-un Référence souple ; supprimer le parent ne supprime pas l'enfant par défaut master_detailplusieurs-à-un, en cascade L'enfant ne peut exister sans parent ; les permissions héritent du parent treeauto-référence Hiérarchique (parent_id sur le même objet)
Options courantes :
{
type : 'lookup' ,
reference : 'account' , // target object name
referenceFilters : [ 'status:active' ], // narrow the lookup picker
deleteBehavior : 'set_null' // 'set_null' | 'cascade' | 'restrict'
}
Type Ce qu'il fait Option clé formulaValeur dérivée, évaluée à la lecture ou au recalcul expression: F\record.qty * record.unit_price`` — voir CEL summaryAgrégation sur une relation enfant summaryOperations: { object, field, function } (count | sum | avg | min | max)autonumberNuméro d'affichage auto-incrémenté format (par ex. TKT-{0000}), startAt
Exemple de formule :
{
name : 'profit_margin' ,
type : 'formula' ,
expression : F `(record.revenue - record.cost) / record.revenue * 100`
}
Type À utiliser pour Option clé imagepièces jointes image fileAttachmentConfig (voir ci-dessous)filetout fichier identique avatarphotos de profil recadrage carré, valeurs par défaut sensées videotéléversements vidéo durée + capture de miniature audioaudio aperçu en forme d'onde
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' ] }
}
Type Stocke Remarques jsonJSON arbitraire Stocké en JSONB sur Postgres compositesous-enregistrement avec champs nommés Structure en ligne, pas une table séparée repeatertableau de valeurs composites Un-à-plusieurs sans objet enfant
Type Remarques locationlat/long + précision addressrue / ville / région / code postal / pays codechamp de code source — language, theme, lineNumbers colorcolorFormat: 'hex' | 'rgb' | 'rgba' | 'hsl', presetColors[]rating1–N étoiles — max, icon slidernombre borné avec interface à curseur signaturesignature dessinée, stockée sous forme d'image qrcodeaffiche la valeur sous forme de QR ou code-barres (EAN / UPC / Code128) progresspourcentage dérivé affiché sous forme de barre tagstableau de tags libres avec autocomplétion vectorcolonne d'embedding — vectorConfig: { dimensions, distanceMetric: 'cosine' | 'euclidean', indexed, indexType: 'hnsw' | 'ivfflat' }
Champ Type Remarques idtext (ULID) clé primaire created_atdatetime heure d'insertion UTC updated_atdatetime heure de dernière écriture UTC created_bylookup → user qui a inséré updated_bylookup → user qui a écrit en dernier versioninteger jeton de concurrence optimiste
Vous ne déclarez pas ces champs — désactivez-les par objet avec
ObjectSpec.systemFields: false (rarement une bonne idée).
*.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`