> From the [Strife developer docs](https://strife.app/docs/reference/field-reference). Every page is listed in [llms.txt](https://strife.app/docs/llms.txt).

# Field Reference

Every fields.* builder from @strifeapp/schema, with its full option set, output type, and wire-format mapping — the code-first counterpart to the Studio-UI Fields reference.

This section documents every `fields.*` builder exported by `@strifeapp/schema` — the code-first counterpart to [Fields](https://strife.app/docs/reference/fields.md), which documents the same editors from Strife Studio's UI. Use this section when you're writing a [Schema](https://strife.app/docs/reference/cli/schemas.md) and want the complete option set for a specific builder; use the Studio Fields reference when you're looking at a template built by hand in Strife Studio and want to know what an editor does.

Each page follows the same shape: a minimal example, the full options table (sourced directly from the builder's TypeScript signature), the inferred output type, and any notes worth knowing — including a few places where the code-first builder's options don't (yet) cover everything the underlying Strife Studio editor supports.

## Common options

Every builder takes `label` (required) and, unless noted on its own page, most also accept:

| Option         | Type      | Description                                                                            |
| -------------- | --------- | -------------------------------------------------------------------------------------- |
| `description`  | `string`  | Shown as a tooltip/hint to editors in Strife Studio.                                   |
| `searchable`   | `boolean` | Include this field's value in the team's search index.                                 |
| `filterable`   | `boolean` | Allow filtering content lists by this field's value.                                   |
| `protected`    | `boolean` | Restrict editing to users with the appropriate permission.                             |
| `propertyName` | `string`  | Override the stored property name. Defaults to the field's key in the `fields` object. |
| `localizable`  | `boolean` | Only present on builders where a per-locale value makes sense — see the table below.   |

A few builders are exceptions to this common set — `hint` and `tabs` are structural/UI-only and skip most of it, and `serp` skips `searchable`/`filterable`. Each page's own table is the source of truth; don't assume every option on this page applies everywhere.

`localizable` is available on exactly these ten builders: `text`, `paragraph`, `number`, `date`, `slug`, `html`, `image`, `link`, `serp`, and `chapters`. Every other builder either doesn't expose it (a boolean or a selected option isn't the kind of value that varies by locale) or is structural (`hint`, `tabs`).

## All builders

| Builder                                                 | Output type                        | Localizable |
| ------------------------------------------------------- | ---------------------------------- | ----------- |
| [`fields.text()`](https://strife.app/docs/reference/field-reference/fields.text.md)                       | `string`                           | Yes         |
| [`fields.paragraph()`](https://strife.app/docs/reference/field-reference/fields.paragraph.md)             | `string`                           | Yes         |
| [`fields.number()`](https://strife.app/docs/reference/field-reference/fields.number.md)                   | `number`                           | Yes         |
| [`fields.switch()`](https://strife.app/docs/reference/field-reference/fields.switch.md)                   | `boolean`                          | No          |
| [`fields.toggle()`](https://strife.app/docs/reference/field-reference/fields.toggle.md)                   | `boolean`                          | No          |
| [`fields.date()`](https://strife.app/docs/reference/field-reference/fields.date.md)                       | `string` (ISO-8601)                | Yes         |
| [`fields.slug()`](https://strife.app/docs/reference/field-reference/fields.slug.md)                       | `string`                           | Yes         |
| [`fields.html()`](https://strife.app/docs/reference/field-reference/fields.html.md)                       | `string` (HTML)                    | Yes         |
| [`fields.json()`](https://strife.app/docs/reference/field-reference/fields-json.md)                       | `unknown`                          | No          |
| [`fields.slider()`](https://strife.app/docs/reference/field-reference/fields.slider.md)                   | `number`                           | No          |
| [`fields.file()`](https://strife.app/docs/reference/field-reference/fields.file.md)                       | `FileValue`                        | No          |
| [`fields.video()`](https://strife.app/docs/reference/field-reference/fields.video.md)                     | `unknown`                          | No          |
| [`fields.image()`](https://strife.app/docs/reference/field-reference/fields.image.md)                     | `Image`                            | Yes         |
| [`fields.imageGroup()`](https://strife.app/docs/reference/field-reference/fields.imagegroup.md)           | `ImageGroup`                       | No          |
| [`fields.chapters()`](https://strife.app/docs/reference/field-reference/fields.chapters.md)               | `unknown[]`                        | Yes         |
| [`fields.contentTemplate()`](https://strife.app/docs/reference/field-reference/fields.contenttemplate.md) | `unknown`                          | No          |
| [`fields.collection()`](https://strife.app/docs/reference/field-reference/fields.collection.md) ⚠         | `CollectionDefinition`             | No          |
| [`fields.repeatable()`](https://strife.app/docs/reference/field-reference/fields.repeatable.md)           | `string[]` / `number[]` / `Link[]` | No          |
| [`fields.select()`](https://strife.app/docs/reference/field-reference/fields.select.md)                   | `{value, name}[]`                  | No          |
| [`fields.multiSelect()`](https://strife.app/docs/reference/field-reference/fields.multiselect.md)         | `value[]`                          | No          |
| [`fields.multiInput()`](https://strife.app/docs/reference/field-reference/fields.multiinput.md)           | `string[]` / `number[]`            | No          |
| [`fields.tableInput()`](https://strife.app/docs/reference/field-reference/fields.tableinput.md)           | `Record<string, unknown>[]`        | No          |
| [`fields.assets()`](https://strife.app/docs/reference/field-reference/fields.assets.md)                   | `Asset[]`                          | No          |
| [`fields.radioGroup()`](https://strife.app/docs/reference/field-reference/fields.radiogroup.md)           | literal union                      | No          |
| [`fields.link()`](https://strife.app/docs/reference/field-reference/fields.link.md)                       | `Link`                             | Yes         |
| [`fields.serp()`](https://strife.app/docs/reference/field-reference/fields.serp.md)                       | `Serp`                             | Yes         |
| [`fields.reference()`](https://strife.app/docs/reference/field-reference/fields.reference.md)             | `Target[]` (read)                  | No          |
| [`fields.references()`](https://strife.app/docs/reference/field-reference/fields.references.md)           | `Target[]` (read)                  | No          |
| [`fields.hint()`](https://strife.app/docs/reference/field-reference/fields.hint.md)                       | `never` (no data)                  | No          |
| [`fields.tabs()`](https://strife.app/docs/reference/field-reference/fields.tabs.md)                       | `never` (structural)               | No          |

> [!NOTE]
> This reference is generated from `@strifeapp/schema`'s TypeScript source, so it only documents options the DSL actually implements today. A few Studio-UI editor capabilities noted on the pages above (⚠, and a couple more called out on individual pages) aren't reachable from `defineType`/`fields.*` yet — the per-field pages call these out explicitly rather than implying parity that doesn't exist.
