---
summary: Define your data shape with content types; field types determine validation
  and editor UI.
title: Content types & fields
path: concepts/content-types-and-fields
status: published
---

# Content types & fields

Content modelling in ScaiCMS is two layers:

1. A **content type** is a named schema (e.g. `blog-post`, `case-study`).
2. Each content type has many **field definitions**: `body`, `hero_image`,
   `tags`, etc.

A piece of content (a `Content` row) is then "an instance of a content type"
with field values keyed by field definition slug.

## Field types

The built-in field types cover most needs:

| Type | Editor | Use for |
|---|---|---|
| `text` | textarea | Plain text |
| `richtext` | WYSIWYG | Body copy with formatting |
| `markdown` | Markdown editor with preview | Technical content |
| `number` | numeric input | Counts, ratings |
| `boolean` | checkbox | Toggles |
| `date` / `datetime` | date pickers | Scheduling, timestamps |
| `select` | dropdown (single/multi) | Enums |
| `asset` | `AssetPicker` | Upload-and-pick |
| `blocks` | `BlocksEditor` | Structured page sections |
| `json` | mono textarea | Free-form structured data |
| `slug`, `email`, `url` | typed inputs | Validation |
| `relation` | (UI WIP) | Reference another content item |

See the [field-types reference](/docs/scaicms/reference/field-types) for the
exact validation rules and admin UI per type.

## Content blocks (`blocks` field)

The `blocks` field stores an ordered array of typed sections, each with its
own data schema, e.g.:

```json
[
  {"type": "text_image", "data": {"title": "...", "content": "...", "image": "<asset-id>"}},
  {"type": "values_grid", "data": {"title": "...", "items": [...]}}
]
```

Block types are declared in the **template pack's manifest** — not in admin
code. This is what lets you ship a completely new theme with new block types
without touching the backend or admin. See [Template packs](/docs/scaicms/concepts/template-packs).

## When to use `markdown` vs `richtext` vs `blocks`

- **`markdown`** — engineering-oriented content, agent-authored copy, docs
  pages.
- **`richtext`** — marketing prose that needs WYSIWYG editing.
- **`blocks`** — layout-aware content (landing pages, mixed media). Better
  than rich-text once you start nesting components.
