// Module included in the following assemblies:
//
// assembly-using-the-cluster-operator.adoc

[id='ref-operator-cluster-feature-gate-releases-{context}']
= Feature gate releases

[role="_abstract"]
Feature gates have three stages of maturity:

* Alpha — typically disabled by default
* Beta — typically enabled by default
* General Availability (GA) — typically always enabled

Alpha stage features might be experimental or unstable, subject to change, or not sufficiently tested for production use.
Beta stage features are well tested and their functionality is not likely to change.
GA stage features are stable and should not change in the future.
Alpha and beta stage features are removed if they do not prove to be useful.

* The `ControlPlaneListener` feature gate moved to GA stage in Strimzi 0.32. It is now permanently enabled and cannot be disabled.
* The `ServiceAccountPatching` feature gate moved to GA stage in Strimzi 0.30. It is now permanently enabled and cannot be disabled.
* The `UseStrimziPodSets` feature gate moved to GA stage in Strimzi 0.35 and the support for StatefulSets is completely removed. It is now permanently enabled and cannot be disabled.
* The `StableConnectIdentities` feature gate moved to GA stage in Strimzi 0.39.
  It is now permanently enabled and cannot be disabled.
* The `KafkaNodePools` feature gate moved to GA stage in Strimzi 0.41.
  It is now permanently enabled and cannot be disabled.
  To use `KafkaNodePool` resources, you still need to use the `strimzi.io/node-pools: enabled` annotation on the `Kafka` custom resources.
* The `UnidirectionalTopicOperator` feature gate moved to GA stage in Strimzi 0.41.
  It is now permanently enabled and cannot be disabled.
* The `UseKRaft` feature gate moved to GA stage in Strimzi 0.42.
  It is now permanently enabled and cannot be disabled.
  To use KRaft (ZooKeeper-less Apache Kafka), you still need to use the `strimzi.io/kraft: enabled` annotation on the `Kafka` custom resources or migrate from an existing ZooKeeper-based cluster.
* The `ContinueReconciliationOnManualRollingUpdateFailure` feature was introduced in Strimzi 0.41 and moved to beta stage in Strimzi 0.44.0.
  It is now enabled by default, but can be disabled if needed.

NOTE: Feature gates might be removed when they reach GA. This means that the feature was incorporated into the Strimzi core features and can no longer be disabled.

.Feature gates and the Strimzi versions when they moved to alpha, beta, or GA
[cols="4*",options="header",stripes="none",separator=¦]
|===

¦Feature gate
¦Alpha
¦Beta
¦GA

¦`ControlPlaneListener`
¦0.23
¦0.27
¦0.32

¦`ServiceAccountPatching`
¦0.24
¦0.27
¦0.30

¦`UseStrimziPodSets`
¦0.28
¦0.30
¦0.35

¦`UseKRaft`
¦0.29
¦0.40
¦0.42

¦`StableConnectIdentities`
¦0.34
¦0.37
¦0.39

¦`KafkaNodePools`
¦0.36
¦0.39
¦0.41

¦`UnidirectionalTopicOperator`
¦0.36
¦0.39
¦0.41

¦`ContinueReconciliationOnManualRollingUpdateFailure`
¦0.41
¦0.44
¦0.47 (planned)

|===

If a feature gate is enabled, you may need to disable it before upgrading or downgrading from a specific Strimzi version (or first upgrade / downgrade to a version of Strimzi where it can be disabled).
The following table shows which feature gates you need to disable when upgrading or downgrading Strimzi versions.

.Feature gates to disable when upgrading or downgrading Strimzi
[cols="3*",options="header",stripes="none",separator=¦]
|===

¦Disable Feature gate
¦Upgrading from Strimzi version
¦Downgrading to Strimzi version

¦`ControlPlaneListener`
¦0.22 and earlier
¦0.22 and earlier

¦`UseStrimziPodSets`
¦-
¦0.27 and earlier

¦`StableConnectIdentities`
¦-
¦0.33 and earlier

|===
