doc/user/project/labels.md
{{< details >}}
{{< /details >}}
Labels organize and track work across GitLab features. As projects grow from small teams to large organizations, labels help you track and manage increasing volumes of work. Labels:
Use three types of labels in GitLab:
{{< history >}}
realtime_labels, disabled by default.realtime_labels removed.{{< /history >}}
You can assign labels to any issue, merge request, or epic.
Changed labels are immediately visible to other users, without refreshing the page, on the following:
To assign or unassign a label:
Alternatively, to unassign a label, select the X on the label you want to unassign.
You can also assign and unassign labels with quick actions:
/label./unlabel./relabel.To view the project's labels:
Or:
The list of labels includes both the labels created in the project and all labels created in the project's ancestor groups. For each label, you can see the project or group path where it was created.
To view the group's labels:
Or:
The list includes all labels created only in the group. It does not list any labels created in the group's projects.
{{< history >}}
{{< /history >}}
Prerequisites:
To create a project label:
{{< history >}}
{{< /history >}}
You can also create a new project label from an issue or merge request. Labels you create this way belong to the same project as the issue or merge request.
Prerequisites:
To do so:
To create a group label:
{{< details >}}
{{< /details >}}
{{< history >}}
{{< /history >}}
You can also create a new group label from an epic. Labels you create this way belong to the same group as the epic.
Prerequisites:
To do so:
{{< history >}}
{{< /history >}}
Prerequisites:
To edit a project label:
To edit a group label:
{{< history >}}
{{< /history >}}
[!warning] If you delete a label, it is permanently deleted. All references to the label are removed from the system and you cannot undo the deletion.
Prerequisites:
To delete a project label:
To delete a group label:
In the top bar, select Search or go to and find your group.
Select Manage > Labels.
Either:
Select Delete.
{{< history >}}
labels_archive. Disabled by default.labels_archive so it can be turned on and off for a group in GitLab 18.7.labels_archive removed.{{< /history >}}
You can archive labels that are no longer actively used but need to be preserved for historical perspective and search purposes.
For example, you might archive
release labels like Q4-25 after a release is complete, keeping them available
for searches while removing them from the label selection dropdown list.
When you archive a label:
Prerequisites:
To archive a label:
The label is archived and deprioritized.
To view archived labels:
Prerequisites:
To unarchive a label:
{{< history >}}
{{< /history >}}
You might want to make a project label available for other projects in the same group. Then, you can promote the label to a group label.
If other projects in the same group have a label with the same title, they are all merged with the new group label. If a group label with the same title exists, it is also merged.
[!warning] Promoting a label is a permanent action and cannot be reversed.
Prerequisites:
To promote a project label to a group label:
All issues, merge requests, issue board lists, issue board filters, and label subscriptions with the old labels are assigned to the new group label.
The new group label has the same ID as the previous project label.
{{< history >}}
{{< /history >}}
It's not possible to directly promote a group label to the parent group. To achieve this, use the following workaround.
Prerequisites:
To "promote" the label to the parent group:
In the parent group, create a label with the same name as the original one. You should make it a different color so you don't mistake the two while you're doing this.
In the subgroup, view its labels. You should see the two labels and where they come from:
Next to the subgroup label (the old one), select Issues, Merge requests, or Epics.
Add the new label to issues, merge requests, and epics that have the old label. To do it faster, use bulk editing.
In the subgroup or the parent group, delete the label that belongs to the lower-level group.
You should now have a label in the parent group that is named the same as the old one, and added to the same issues, MRs, and epics.
{{< history >}}
{{< /history >}}
If a project or its parent group has no labels, you can generate a default set of project labels from the label list page.
Prerequisites:
To add the default labels to the project:
The following labels are created:
bugconfirmedcriticaldiscussiondocumentationenhancementsuggestionsupport{{< details >}}
{{< /details >}}
Teams can use scoped labels to annotate issues, merge requests, and epics with mutually exclusive labels. By preventing certain labels from being used together, you can create more complex workflows.
A scoped label uses a double-colon (::) syntax in its title, for example: workflow::in-review.
An issue, merge request, or epic cannot have two scoped labels, of the form key::value,
with the same key. If you add a new label with the same key but a different value,
the previous key label is replaced with the new label.
To filter issue, merge request, or epic lists by a given scope, enter
<scope>::* in the searched label name.
For example, filtering by the platform::* label returns issues that have platform::iOS,
platform::Android, or platform::Linux labels.
[!note] Filtering by scoped labels not available on the issues or merge requests dashboard pages.
Example 1. Updating issue priority:
priority::low label.priority::high label.priority::low label.Example 2. You want a custom field in issues to track the operating system platform that your features target, where each issue should only target one platform.
You create three labels:
platform::iOSplatform::Androidplatform::LinuxIf you assign any of these labels to an issue automatically removes any other existing label that
starts with platform::.
Example 3. You can use scoped labels to represent the workflow states of your teams.
Suppose you have the following labels:
workflow::developmentworkflow::reviewworkflow::deployedIf an issue already has the label workflow::development and a developer wants to show that the
issue is now under review, they assign the workflow::review, and the workflow::development label
is removed.
The same happens when you move issues across label lists in an issue board. With scoped labels, team members not working in an issue board can also advance workflow states consistently in issues themselves.
For a video explanation, see:
<div class="video-fallback"> See the video: <a href="https://www.youtube.com/watch?v=4BCBby6du3c">Use scoped labels for custom fields and custom workflows</a>. </div> <figure class="video-container"> <iframe src="https://www.youtube-nocookie.com/embed/4BCBby6du3c" frameborder="0" allowfullscreen> </iframe> </figure>You can create a label with a nested scope by using multiple double colons :: when creating
it. In this case, everything before the last :: is the scope.
For example, if your project has these labels:
workflow::backend::reviewworkflow::backend::developmentworkflow::frontend::reviewAn issue can't have both workflow::backend::review and workflow::backend::development
labels at the same time, because they both share the same scope: workflow::backend.
On the other hand, an issue can have both workflow::backend::review and workflow::frontend::review
labels at the same time, because they both have different scopes: workflow::frontend and workflow::backend.
You can subscribe to a label to receive notifications whenever the label is assigned to an issue, merge request, or epic.
To subscribe to a label:
{{< history >}}
{{< /history >}}
Labels can have relative priorities, which are used when you sort issue and merge request lists by label priority and priority.
When prioritizing labels, you must do it from a project. It's not possible to do it from the group label list.
[!note] Priority sorting is based on the highest priority label only. Issue 14523 considers changing this.
Prerequisites:
To prioritize a label:
This label now appears at the top of the label list, under Prioritized Labels.
To change the relative priority of these labels, drag them up and down the list. The labels higher in the list get higher priority.
To learn what happens when you sort by priority or label priority, see sorting and ordering issue lists.
{{< details >}}
{{< /details >}}
{{< history >}}
enforce_locked_labels_on_merge. This feature is beta. Disabled by default.{{< /history >}}
[!flag] The availability of this feature is controlled by a feature flag. For more information, see the history. This feature is available for testing, but not ready for production use.
To comply with certain auditing requirements, you can set a label to be locked. When a merge request with locked labels gets merged, nobody can remove them from the MR.
When you add locked labels to issues or epics, they behave like regular labels.
Prerequisites:
[!warning] After you set a label as locked, nobody can undo it or delete the label.
To set a label to get locked on merge:
{{< details >}}
{{< /details >}}
- Introduced in GitLab 18.11.
GitLab records audit events when you create, update, or delete project and group labels. Use these events to track label changes for debugging or compliance purposes.
The following label actions generate audit events:
label_created: A project or group label is created.label_updated: A project or group label is updated. When the title changes,
the audit message includes the old and new title
(for example, Changed label title from Foo to Bar).
For other field changes, the message is generic
(for example, Updated label Foo).label_deleted: A project or group label is deleted.[!note] Labels that GitLab creates automatically, for example during Jira imports, do not generate audit events. Only labels created through direct user action are audited.