Overview
Tags are flexible, lightweight labels you assign to CXF objects to organize and find them. Unlike Taxonomies, tags are global — they’re shared across every object and aren’t restricted by Template or object type. Tags can be hierarchical (parent-child, with a full path like Technology/AI/Machine Learning) and can be created on the fly as you type. For the mental model, see Core concepts.Where to find it
Tags are managed entirely through the tag picker — there’s no separate admin screen, and you create, organize, and assign tags right there as you type. The picker appears in two places:- on a record, in the Authoring tab, and
- on a Template or Profile, under Default tags.
Properties
A tag has the following properties:| Property | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Display name. Can’t contain a /. |
slug | string | Yes | Unique identifier — letters, numbers, and hyphens only. |
description | string | No | Optional description. |
parent_id | reference | No | Parent tag, for hierarchies. |
visible | boolean | No | Whether the tag is shown to users (default true). |
is_system | boolean | No | Marks a built-in tag, protected from edit and deletion (default false). |
created_at | datetime | Auto | When the tag was created. |
updated_at | datetime | Auto | When the tag was last updated. |
Hierarchies
A tag can have aparent_id, forming a parent-child tree. Each tag exposes a
computed full path — the titles of its ancestors joined with /, for example
Technology/AI/Machine Learning.
Assigning tags
Set an object’stags to a list of tag ids or slugs. An object can hold many
tags at once.
Unknown tags are ignored, not rejected. If you assign a tag id or slug that
doesn’t exist, it’s silently skipped — there’s no validation error. (This is the
opposite of Taxonomies, which reject anything not allowed.)
Tags vs Taxonomies
| Tags | Taxonomies | |
|---|---|---|
| Scope | Global — available everywhere | Restricted per Template or object type |
| Localization | No | Yes (versions) |
| Create on the fly | Yes (type a new tag or path) | No (created explicitly) |
| Unknown on assignment | Silently ignored | Rejected |
| Best for | Flexible, user-generated labels | Controlled classification |
Behaviour & rules
- Multiple per object. An object can hold many tags at once.
titleis required, up to 255 characters, and can’t contain a/.slugis required and unique, using only letters, numbers, and hyphens (no spaces, slashes, or underscores).parent_idmust reference an existing tag, and a tag can’t be its own parent.- Immutable while in use. Once a tag is assigned to any object, its
slugandparent_idcan’t be changed —title,description, andvisiblestill can. - System tags (
is_system) can’t be updated or deleted.
Seeds
Tags travel between environments with Seeds as structural seeds (they aren’t template instances, so instance seeds don’t apply). Each tag is atags item; hierarchies use parent_id, resolved with a
reference helper:
Governance & permissions
- Only a super admin or Master can create, edit, and delete tags.
- System tags (
is_system) are protected from edit and deletion. - A tag that’s in use can’t be deleted.
API access
Assign tags by setting an object’stags to a list of ids or slugs through the
API reference. Tags themselves are created, updated,
and deleted through the API, which also exposes creating a hierarchical chain from
a path string.
Related
Taxonomies
Structured, restricted classification — compared to flexible Tags.
Object types
Which object types support Tags.