---
title: Edit tabs
slug: cms-13/docs/edit-tabs
docTags: 
createdAt: 2026-07-30T20:22:01.166Z
---

:::hint{type="info"}
**Note**
This topic is for CMS administrators and developers with administrative access rights.
:::

The **Edit Tabs** function lets administrators manage how properties are organized in CMS. Tabs group related content type properties into sections in the **All Properties** editing view, helping editors find and fill in related fields.

From **Settings** > **Edit Tabs**, perform the following actions:

- Add, edit, and delete tabs.
- Define the display order of tabs.
- Apply access levels to control tab visibility.
- Sort the list by a column header. Available columns: **Name**, **Display Name**, **Sort Index**, **Requires Access Level**, and **From Code** (whether the tab was created in code or in the UI).

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/BOfxZEx-TaDV-_iDEj6aw_faf35f4346375040a93d5af22a5f37ef86495260a5ef9204583cfe23bca499a2-image.png)

## Tab name validation in CMS 13

Tab name validation prevents invalid identifiers from breaking startup in CMS 13. Review this rule before defining tabs in code or in the UI to avoid registration failures.

:::hint{type="danger"}
**Warning**
CMS 13 enforces strict validation on tab identifiers. Tab **Name** values must start with a letter and contain only letters, digits, and underscores. Spaces, hyphens, and other special characters are not permitted. Names must be at least 2 characters. Names that do not conform to this rule fail validation and prevent the tab from being registered.
:::

Use the **Display Name** field (or the `[Display(Name = "...")]` attribute in code) to provide a human-readable label for the tab. The **Name** field is an internal identifier only and is never shown directly to editors.

**Valid tab definition in code**

```csharp
[TabDefinition]
[Display(Name = "SEO Settings", Order = 100)]
public class SeoSettingsTab : TabDefinition
{
    // Name (identifier): "SeoSettings" (letters, digits, and underscores only)
    // Display name: "SEO Settings" (set via [Display(Name = ...)])
}
```

**Invalid name with a hyphen**

```csharp
// This will fail CMS 13 validation at startup
[TabDefinition]
[Display(Name = "SEO Settings")]
public class SeoSettingsTab : TabDefinition
{
    public SeoSettingsTab() { Name = "Seo-Settings"; }
    // Name "Seo-Settings" contains a hyphen
}
```

## Create a tab

Create a tab to group related properties into a labeled section in the **All Properties** view. Editors locate fields faster, and administrators control which roles see each section.

1. Go to **Settings** > **Edit Tabs**.
2. Click **Create Tab**.

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/UwbAPip1awlL4P5yrPAz2_1a4124e2eb84843ff3b75eef2c8dceacb804fed991835d736e0b558dedcb6e8b-image.png)

:::Paragraph{listStyleType="disc" indent="2"}
**Name** – Enter the name of the tab.
:::

:::Paragraph{listStyleType="disc" indent="2"}
**Display Name** – Enter how the tab name is displayed.
:::

:::Paragraph{listStyleType="disc" indent="2"}
**Sort Index** – Specify the index value for the tab. The lower the value, the further left the tab displays.
:::

:::Paragraph{listStyleType="disc" indent="2"}
**Requires Access Level** – Select the access level an editor must have to see the tab. This value corresponds to the editor's access level for the page.
:::

3. Click **Create**. The new tab displays in the tab list.

The new tab displays as an option in the **Property Group** setting of a content type.

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/-zR8XGrB4TKhK09FVrlu9_0be47e1ca33c5b25adb99db5beb1582712a51e254a1496573dc700bf0adffaf4-image.png)

The new tab displays in the **All Properties** view. If the **Sort Index** is set to 0, the tab displays to the left of the other tabs.

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/V3yqJTf-v1XFAo6sfb8Ag_5404a545e40e8326dd6bd845e91a9ad8ae4a28fba8a167743b0b8369d1d44f18-image.png)

## Edit a tab

Edit a tab to change its display name, sort order, or required access level.

1. Go to **Settings** > **Edit Tabs**.
2. Click **More** (...) next to the tab and select **Edit**.
3. Update the tab fields:
   - **Name** – The internal identifier for the tab.
   - **Display Name** – The label editors see in the **All Properties** view.
   - **Sort Index** – The display position of the tab. Lower values place the tab further left.
   - **Requires Access Level** – The minimum access level an editor must have to see the tab.
4. Click **Save**.

:::hint{type="info"}
**Note**
Tabs defined in code (`From Code` = Yes) cannot be edited from the UI. Update code-defined tabs in your content model code and redeploy.
:::

## Delete a tab

Delete a tab to remove it from the **All Properties** view. If properties reference the tab, reassign them to a different tab before deletion completes.

1. Go to **Settings** > **Edit Tabs**.
2. Click **More** (...) next to the tab and select **Delete**.
3. If no properties reference the tab, the tab is deleted immediately.
4. If properties reference the tab, a confirmation dialog displays. Select a replacement tab from the list to reassign the properties, then confirm the deletion.

:::hint{type="danger"}
**Warning**
System tabs (Content, Settings) and tabs defined in code cannot be deleted from the UI.
:::

## Automatic migration and the `G_` prefix

Automatic migration renames legacy tab identifiers that contain spaces or special characters during a CMS 13 upgrade. The migration prevents startup failures and signals which tab references in code must be updated.

:::hint{type="danger"}
**Warning**
When upgrading an existing implementation to CMS 13, tab records already stored in the database with names containing spaces or special characters fail CMS 13 name validation. To prevent a hard startup failure, the automatic migration process renames non-conforming tab identifiers by prepending a `G_` prefix and removing invalid characters.
:::

For example, a tab previously named `SEO Settings` is migrated to `G_SEOSettings` in the database. The **Display Name** is preserved and continues to display correctly in the UI. Any code that references the old tab name by its identifier (for example, via `[PropertyTabAssignment("SEO Settings")]` or equivalent) breaks after migration and must be updated to use the new prefixed name.

### Post-upgrade checklist for tab identifiers

1. Review all tab definitions in code and confirm **Name** values start with a letter and contain only letters, digits, and underscores (no spaces, hyphens, or other special characters).
2. Check **Settings** > **Edit Tabs** after upgrading for any tabs with a `G_` prefix. These were auto-migrated and their identifiers have changed.
3. Update all `[PropertyTabAssignment]` usages, tab group assignments, and any other references to the old identifier to use the new `G_`-prefixed name, or rename the tab to a clean alphanumeric identifier and update references accordingly.
4. Redeploy and verify that all properties display on the correct tabs in the editing interface.
