# Content types

> Content types provide the structure for authors to create entries within Uniform Content.

Source: https://docs.uniform.app/docs/guides/models/content-types

**Content types** represent the structure for individual pieces of content stored within Uniform. For example, a `blog post` could have a single-line text input for `title`, a multi-line text input for `summary`, a date picker for `publish date`, and a rich text editor for `body`. Each of those elements is referred to as a [**field**](https://docs.uniform.app/docs/guides/models/content-types/fields).

> **Organize and find your content types:**
>
> Use [favorites](https://docs.uniform.app/docs/guides/content-organization/favorites) to bookmark the content types and block types you use most, [My recents](https://docs.uniform.app/docs/guides/content-organization/my-recents) to return to ones you recently worked on, and [search, filter, and sort](https://docs.uniform.app/docs/guides/content-organization/search-filter-sort) to find a specific one.

## Create a content type

1. In Uniform, open your project.
2. Navigate to **Experience > Content Types**.

   ![Content Types view with Create new or Add content type menu (Content type and Block type options).](https://docs.uniform.app/images/guides/content-types/create-content-type.png)
3. Click **Create new** (when you have no content types yet) or **Add content type** (when the list already has items), then select **Content type**. For a block type, select **Block type** instead (see [Blocks](https://docs.uniform.app/docs/guides/models/blocks)).
4. On the **General** tab, enter the following values:

   | Field | Description | Is required? |
   | --- | --- | --- |
   | Content Type Name | Name that describes the content type or its purpose. | Required |
   | Public ID | Unique identifier for the content type, available to developers. Cannot be changed after the content type is created. | Required |
   | Autogenerate data types | If selected, data types for the content type will be automatically generated. |  |
   | Icon | The icon displayed next to the content type and any entries created from it. This helps users identify the type at a glance. |  |
   | Description | A brief description of what the content type is for to help authors understand how entries created from it will be used. |  |
   | Workflow | Optionally assign a workflow to manage the content creation and publishing process for entries of this content type. Only available if you have defined workflows in your project. |  |
5. Click **Save and close** to create the content type (or **Save** from the ⋮ menu to save and stay in the editor).

   ![Example: Add a 'Movie' content type.](https://docs.uniform.app/images/guides/content-types/add-content-type.png)

> **Use an AI coding assistant:**
>
> The [`uniform-content-modeling`](https://github.com/uniformdev/agent-skills/tree/main/skills/uniform-content-modeling) agent skill teaches coding assistants such as Claude Code, Codex, Cursor, and Copilot content modeling best practices: fields, validations, naming, references, and classification. Use it to create content types, migrate content from another CMS, or review an existing model. To install it, see [Uniform agent skills](https://docs.uniform.app/docs/guides/ai/agent-skills).

## Fields

[Fields](https://docs.uniform.app/docs/guides/models/content-types/fields) are the individual pieces that make up a content type. To add a field:

Your content type needs to have at least one field. Check our [fields guide](https://docs.uniform.app/docs/guides/models/content-types/fields#add-a-field) for more information on how to add fields to your content type.

## Entry settings

Content types include several configuration options that control how entries behave and are managed within your project.

### Slug settings

Slugs provide human-readable URL identifiers for your entries.

**Enable and require slugs**: You can choose to enable slug generation for entries of this content type. When enabled, you can also make slugs required, ensuring every entry has a URL-friendly identifier.

**Slug uniqueness**: Control how unique slugs must be across your content:

- **None**: No uniqueness requirement - multiple entries can have the same slug
- **Within the type**: Slugs must be unique among entries of the same content type
- **Global**: Slugs must be unique across all entries in your project

**Slug validations**: Use regular expressions to define custom validation rules for the slug format.

### Permissions

> **Warning:**
>
> Permission overrides at the content type level are deprecated and will be replaced in a future release with centralized role-based policies.

You can override team permissions for each role at the content type level to set read, write, create and delete permissions.

### Previews

You can configure how content authors can preview entries of this content type before publishing.

Each content type can have multiple entry previews defined.

An entry preview links to a dynamic composition that is used as the detail page for the entry. The dynamic inputs are set to the entry fields. Most commonly this is the slug of the entry.

![Entry previews of a content type](https://docs.uniform.app/images/guides/content-types/content-type-previews-list.png)

#### Add or edit an entry preview

Follow these steps to configure a preview for your content type:

1. **Open the preview configuration**:

   - To add a new preview: Click **Add preview** to open the preview configuration drawer
   - To edit an existing preview: Click the name of the preview you want to modify
2. **Name your preview**: Enter a descriptive name for the preview. This name appears in the preview dropdown menu when authors are editing entries, so choose something that clearly identifies the preview context (e.g., "Product detail page" or "Blog post preview").
3. **Select the target project map node**: Choose the project map node that will display the entry. This should be a dynamic node configured to accept entry data as dynamic path segments. Typically, this is your content detail page template.
4. **Configure dynamic path mapping**: Set up how entry data maps to the composition's dynamic segments:

   - **JSON pointer syntax**: Use JSON pointer notation to reference entry data. The syntax follows the pattern `${#jptr:/entry/path/to/field}`
   - **Common examples**:

     - Entry slug: `${#jptr:/entry/_slug}`
     - Field values: `${#jptr:/entry/fields/fieldName/value}`
     - Slug on a reference field: `${#jptr:/entry/fields/referenceFieldName/value/entry/_slug}`

   > **Tip:**
   >
   > **Quick setup**: Enable **"Use entry slug"** to automatically use the entry's slug when no custom mapping is specified. This works well for most content detail pages.

   To find the correct JSON path for your entry data, navigate to any entry of this content type and select **View Source → Edgehanced** to see the available data structure.
5. **Save the preview**: Click **Accept** to save your preview configuration. The preview will be available to content authors when editing entries of this type.

![Edit an entry preview](https://docs.uniform.app/images/guides/content-types/content-type-previews-edit.png)
