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

# fields.labels()

Pick from the team's labels, organized by group for browsing — the same picker used for the built-in labels base property.

Pick from the team's labels. Maps to editor `{ name: 'str-multi-select', type: 'label' }`.

Renders the same grouped picker as the built-in `labels` base property every document
already has (submenus per label group, plus an ungrouped section) — this builder adds an
**additional**, independently-valued field of the same kind, not a replacement for
`labels`. There is no group-restriction option: like the base-properties field, it always
offers every one of the team's labels.

## Example

```ts
fields.labels({ label: 'Topics' })
// _output: string[]
```

## Options

| Option         | Type      | Required | Description                                                |
| -------------- | --------- | -------- | ----------------------------------------------------------- |
| `label`        | `string`  | Yes      | Label shown to editors in Strife Studio.                    |
| `description`  | `string`  | No       | Tooltip shown to editors.                                   |
| `searchable`   | `boolean` | No       | Include in the team's search index.                         |
| `filterable`   | `boolean` | No       | Allow filtering content lists by this value.                |
| `protected`    | `boolean` | No       | Restrict editing to users with the appropriate permission.  |
| `propertyName` | `string`  | No       | Override the stored property name.                          |

No `options`, no group/scope setting, no `localizable` option.

## Output type

`string[]` — one string per selected label, resolved live from the team's labels: the bare
label name while the label is ungrouped, `"<group name>/<label name>"` while it's grouped
(e.g. `["Färger/Blå", "Changelog"]`). Renaming a label or group updates the value without
republishing. The same value arrives on both paths a site reads it from — the `Content/ByUrl`
index for published content (`selectFields`) and live preview (`useState` / `subscribe` in
`@strifeapp/strife`) — so one handler serves both. The stored value is the array of selected
label ids; a site never sees those. Querying, and the exact rules for grouped names:
[Label groups](https://strife.app/docs/reference/database/label-groups.md#field-level-label-pickers).

## See also

* [`fields.multiSelect()`](https://strife.app/docs/reference/field-reference/fields.multiselect.md) — a flat, ungrouped array-of-values
  picker; use this instead when the choices aren't the team's label taxonomy.
