--- stage: none group: unassigned info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments --- # Deprecating GitLab features This page includes information about how and when to remove or make breaking changes to GitLab features. ## Terminology **Deprecation**: - Required before ending support for a feature or removing a feature. - Feature not recommended for use. - Development restricted to Priority 1 / Severity 1 bug fixes. - Will be removed in a future major release. - Begins after a deprecation announcement outlining an end-of-support or removal date. - Ends after the end-of-support date or removal date has passed. **End of Support**: - Optional step before removal. - Feature usage strongly discouraged. - No support or fixes provided. - No longer tested internally. - Will be removed in a future major release. - Begins after an end-of-support date has passed. - Ends after all relevant code has been removed. [Announcing an End of Support period](https://about.gitlab.com/handbook/marketing/blog/release-posts/#announcing-an-end-of-support-period) should only be used in special circumstances and is not recommended for general use. Most features should be deprecated and then removed. **Removal**: - Feature usage impossible. - Happens in a major release in line with our [semantic versioning policy](../../policy/maintenance.md). - Begins after removal date has passed. ![Deprecation, End of Support, Removal process](img/deprecation_removal_process.png) **Breaking change**: A "breaking change" is any change that requires users to make a corresponding change to their code, settings, or workflow. "Users" might be humans, API clients, or even code classes that "use" another class. Examples of breaking changes include: - Removing a user-facing feature without a replacement/workaround. - Changing the definition of an existing API (by doing things like re-naming query parameters or changing routes). - Removing a public method from a code class. A breaking change can be considered major if it affects many users, or represents a significant change in behavior. ## When can a feature be deprecated? Deprecations should be announced on the [Deprecated feature removal schedule](../../update/deprecations.md). Do not include the deprecation announcement in the merge request that introduces a code change for the deprecation. Use a separate MR to create a deprecation entry. For steps to create a deprecation entry, see [Deprecations](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecations). ## How are Community Contributions to a deprecated feature handled? Development on deprecated features is restricted to Priority 1 / Severity 1 bug fixes. Any community contributions to deprecated features are unlikely to be prioritized during milestone planning. However, at GitLab, we [give agency](https://about.gitlab.com/handbook/values/#give-agency) to our team members. So, a member of the team associated with the contribution may decide to review and merge it at their discretion. ## When can a feature be removed/changed? Generally, feature or configuration can be removed/changed only on major release. It also should be [deprecated in advance](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecations). For API removals, see the [GraphQL](../../api/graphql/index.md#deprecation-and-removal-process) and [GitLab API](../../api/index.md#compatibility-guidelines) guidelines. For configuration removals, see the [Omnibus deprecation policy](../../administration/package_information/deprecation_policy.md). For versioning and upgrade details, see our [Release and Maintenance policy](../../policy/maintenance.md). ## Update the deprecations and removals documentation pages The [deprecations](../../update/deprecations.md) and [removals](../../update/removals.md) documentation is generated from the YAML files located in [`gitlab/data/`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/data). To update the deprecations and removals pages when an entry is added, edited, or removed: 1. From the command line, navigate to your local clone of the [`gitlab-org/gitlab`](https://gitlab.com/gitlab-org/gitlab) project. 1. Create, edit, or remove the YAML file under [deprecations](https://gitlab.com/gitlab-org/gitlab/-/tree/master/data/deprecations) or [removals](https://gitlab.com/gitlab-org/gitlab/-/tree/master/data/removals). 1. Compile the deprecation or removals documentation with the appropriate command: - For deprecations: ```shell bin/rake gitlab:docs:compile_deprecations ``` - For removals: ```shell bin/rake gitlab:docs:compile_removals ``` 1. If needed, you can verify the docs are up to date with: - For deprecations: ```shell bin/rake gitlab:docs:check_deprecations ``` - For removals: ```shell bin/rake gitlab:docs:check_removals ``` 1. Commit the updated documentation and push the changes. 1. Create a merge request using the [Deprecations](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/merge_request_templates/Deprecations.md) or [Removals](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/merge_request_templates/Removals.md) templates. Related Handbook pages: - - ## Update the related documentation When features are deprecated and removed, [update the related documentation](../documentation/versions.md#deprecations-and-removals).