Primitives

Deep dive on atomic primitive fields: text, number, boolean, date.

text

A UTF-8 string. The default editor is a single-line input.

{
  "name": "Title",
  "slug": "title",
  "type": "text",
  "config": {
    "required": true,
    "minLength": 1,
    "maxLength": 200
  }
}

For multi-line content, set multiline: true:

{
  "type": "text",
  "config": { "multiline": true, "rows": 4 }
}

For HTML / Markdown content, use richtext instead. For code, use code.

number

A JavaScript number (double-precision float). Use integer: true for integer fields.

{
  "name": "Hit points",
  "slug": "hp",
  "type": "number",
  "config": {
    "integer": true,
    "min": 1,
    "max": 9999,
    "step": 1,
    "required": true
  }
}

boolean

A boolean stored as true or false. The default editor is a switch.

{
  "name": "Published",
  "slug": "published",
  "type": "boolean",
  "config": { "default": false }
}

date

An ISO 8601 timestamp string with millisecond precision. The editor is a date picker with optional time input.

{
  "name": "Published at",
  "slug": "published_at",
  "type": "date",
  "config": {
    "withTime": true,
    "required": false
  }
}

Stored as "2026-05-13T12:34:56.789Z".

Common config across primitives

All primitive types support:

  • required — boolean
  • default — default value if not provided
  • helpText — string, shown under the field in the editor

Type-specific config layers on top of these.