Documentation/contributor-guide/features.md
This document provides an overview of etcd features and general development guidelines for adding and deprecating them. The project maintainers can override these guidelines per the need of the project following the project governance.
The etcd features fall into three stages, experimental, stable, and unsafe.
Any new feature is usually added as an experimental feature. An experimental feature is characterized as below:
A stable feature is characterized as below:
Unsafe features are rare and listed under the Unsafe feature: section in the etcd usage documentation. By default, they are disabled. They should be used with caution following documentation. An unsafe feature can be removed in the next minor or major release without following the feature deprecation policy.
Any new enhancements to the etcd are typically added as an experimental feature. The general development requirements are listed below. They can be somewhat flexible depending on the scope of the feature and review discussions and will evolve over time.
type/feature and experimental.experimental e.g. --experimental-feature-name.It is important that experimental features don't get stuck in that stage. They should be revisited and moved to the stable stage following the graduation steps as described here.
Decide if an experimental feature is ready for graduation to the stable stage.
type/feature and experimental labels.If an experimental feature is found ready for graduation to the stable stage, open a Pull Request (PR) with the following changes.
--experimental prefix.At least two maintainers must approve the work. Patch releases should not be considered for graduation.
An experimental feature deprecates when it graduates to the stable stage.
DEPRECATED. Use <feature-name> instead.deprecated label in the issue that was initially used to enable the experimental feature.As the project evolves, a stable feature may sometimes need to be deprecated and removed. Such a situation should be handled using the steps below:
To be deprecated in <release>.. If a new feature replaces the To be deprecated feature, then also provide a message saying so. e.g. Use <feature-name> instead..DEPRECATED. If a new feature replaces the deprecated feature, then also provide a message saying so. e.g. DEPRECATED. Use <feature-name> instead..deprecated label in the related issue.Remove the deprecated feature in the following release. Close any related issue(s). At least two maintainers must approve the work. Patch releases should not be considered for deprecation.