2020-04-21 17:09:38 -04:00
---
2020-08-21 14:10:24 -04:00
type: reference, dev
2021-08-05 17:10:12 -04:00
info: For assistance with this Style Guide page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments-to-other-projects-and-subjects.
2020-04-21 17:09:38 -04:00
description: "GitLab development - how to document features deployed behind feature flags"
---
# Document features deployed behind feature flags
2021-07-30 14:09:08 -04:00
GitLab uses [feature flags ](../feature_flags/index.md ) to strategically roll
2020-04-21 17:09:38 -04:00
out the deployment of its own features. The way we document a feature behind a
feature flag depends on its state (enabled or disabled). When the state
changes, the developer who made the change **must update the documentation**
accordingly.
2021-03-09 13:09:41 -05:00
Every feature introduced to the codebase, even if it's behind a feature flag,
must be documented. For context, see the
[latest merge request that updated this guideline ](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47917#note_459984428 ).
2021-08-02 17:09:44 -04:00
When you document feature flags, you must:
- [Add a note at the start of the topic ](#use-a-note-to-describe-the-state-of-the-feature-flag ).
- [Add version history text ](#add-version-history-text ).
2021-07-30 14:09:08 -04:00
## Use a note to describe the state of the feature flag
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
Information about feature flags should be in a **Note** at the start of the topic (just below the version history).
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
The note has three parts, and follows this structure:
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
```markdown
2021-08-05 17:10:12 -04:00
FLAG:
2021-07-30 14:09:08 -04:00
< Self-managed GitLab availability information . > < GitLab.com availability information . >
< This feature is not ready for production use . >
2020-04-21 17:09:38 -04:00
```
2021-07-30 14:09:08 -04:00
### Self-managed GitLab availability information
2020-04-21 17:09:38 -04:00
2021-08-05 17:10:12 -04:00
| If the feature is... | Use this text |
|--------------------------|---------------|
| Available | `On self-managed GitLab, by default this feature is available. To hide the feature, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
| Unavailable | `On self-managed GitLab, by default this feature is not available. To make it available, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
| Available, per-group | `On self-managed GitLab, by default this feature is available. To hide the feature per group, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
| Unavailable, per-group | `On self-managed GitLab, by default this feature is not available. To make it available per group, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
| Available, per-project | `On self-managed GitLab, by default this feature is available. To hide the feature per project or for your entire instance, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
| Unavailable, per-project | `On self-managed GitLab, by default this feature is not available. To make it available per project or for your entire instance, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
| Available, per-user | `On self-managed GitLab, by default this feature is available. To hide the feature per user, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
| Unavailable, per-user | `On self-managed GitLab, by default this feature is not available. To make it available per user, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
### GitLab.com availability information
2020-04-21 17:09:38 -04:00
2021-08-05 17:10:12 -04:00
| If the feature is... | Use this text |
|-------------------------------------|---------------|
| Available | `On GitLab.com, this feature is available.` |
| Available to GitLab.com admins only | `On GitLab.com, this feature is available but can be configured by GitLab.com administrators only.`
| Unavailable | `On GitLab.com, this feature is not available.` |
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
### Optional information
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
If needed, you can add this sentence:
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
`You should not use this feature for production environments.`
2020-08-21 14:10:24 -04:00
2021-07-30 14:09:08 -04:00
## Add version history text
2020-08-21 14:10:24 -04:00
2021-07-30 14:09:08 -04:00
When the state of a flag changes (for example, disabled by default to enabled by default), add the change to the version history.
2020-04-21 17:09:38 -04:00
2021-07-30 14:09:08 -04:00
Possible version history entries are:
2020-08-21 14:10:24 -04:00
```markdown
2021-09-09 11:09:24 -04:00
> - [Introduced](issue-link) in GitLab X.X. [Deployed behind the <flag name> flag](../../administration/feature_flags.md), disabled by default.
2021-08-30 14:10:36 -04:00
> - [Enabled on GitLab.com](issue-link) in GitLab X.X.
> - [Enabled on GitLab.com](issue-link) in GitLab X.X. Available to GitLab.com administrators only.
> - [Enabled on self-managed](issue-link) in GitLab X.X.
2021-09-09 11:09:24 -04:00
> - [Feature flag <flag name> removed](issue-link) in GitLab X.X.
> - [Generally available](issue-link) in GitLab X.X.
2020-08-21 14:10:24 -04:00
```
2021-07-30 14:09:08 -04:00
## Feature flag documentation examples
2020-08-21 14:10:24 -04:00
2021-07-30 14:09:08 -04:00
The following examples show the progression of a feature flag.
2020-08-21 14:10:24 -04:00
2021-07-30 14:09:08 -04:00
```markdown
2021-09-09 11:09:24 -04:00
> Introduced in GitLab 13.7. [Deployed behind the `forti_token_cloud` flag](../../administration/feature_flags.md), disabled by default.
2020-04-21 17:09:38 -04:00
2021-08-05 17:10:12 -04:00
FLAG:
2021-07-30 14:09:08 -04:00
On self-managed GitLab, by default this feature is not available. To make it available,
ask an administrator to [enable the `forti_token_cloud` flag ](../administration/feature_flags.md ).`
The feature is not ready for production use.
2020-08-21 14:10:24 -04:00
```
2021-08-30 14:10:36 -04:00
When the feature is enabled in production, you can update the version history:
2020-08-21 14:10:24 -04:00
2021-07-30 14:09:08 -04:00
```markdown
2021-09-09 11:09:24 -04:00
> - Introduced in GitLab 13.7. [Deployed behind the `forti_token_cloud` flag](../../administration/feature_flags.md), disabled by default.
2021-08-30 14:10:36 -04:00
> - [Enabled on self-managed](https://gitlab.com/issue/etc) GitLab 13.8.
2020-08-21 14:10:24 -04:00
2021-08-05 17:10:12 -04:00
FLAG:
2021-07-30 14:09:08 -04:00
On self-managed GitLab, by default this feature is available. To hide the feature per user,
ask an administrator to [disable the `forti_token_cloud` flag ](../administration/feature_flags.md ).
2020-08-21 14:10:24 -04:00
```
2021-07-30 14:09:08 -04:00
And, when the feature is done and fully available to all users:
2020-08-21 14:10:24 -04:00
2021-07-30 14:09:08 -04:00
```markdown
2021-09-09 11:09:24 -04:00
> - Introduced in GitLab 13.7. [Deployed behind the `forti_token_cloud` flag](../../administration/feature_flags.md), disabled by default.
2021-08-30 14:10:36 -04:00
> - [Enabled on self-managed](https://gitlab.com/issue/etc) GitLab 13.8.
> - [Enabled on GitLab.com](https://gitlab.com/issue/etc) in GitLab 13.9.
> - [Feature flag `forti_token_cloud`](https://gitlab.com/issue/etc) removed in GitLab 14.0.
2021-09-09 11:09:24 -04:00
> - [Generally available](issue-link) in GitLab 14.0.
2020-04-21 17:09:38 -04:00
```