FeatureFlags: Change alpha/beta language to align with release staging language (#69422)

This commit is contained in:
Ryan McKinley 2023-06-08 09:16:55 -07:00 committed by GitHub
parent 4e1f69d83f
commit 8aae6b679a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 238 additions and 222 deletions

View File

@ -1,7 +1,7 @@
--- ---
aliases: aliases:
- /docs/grafana/latest/setup-grafana/configure-grafana/feature-toggles/ - /docs/grafana/latest/setup-grafana/configure-grafana/feature-toggles/
description: Learn about toggles for experimental and beta features, which you can enable or disable. description: Learn about feature toggles, which you can enable or disable.
title: Configure feature toggles title: Configure feature toggles
weight: 150 weight: 150
--- ---
@ -11,13 +11,13 @@ weight: 150
# Configure feature toggles # Configure feature toggles
You use feature toggles, also known as feature flags, to turn experimental or beta features on and off in Grafana. Although we do not recommend using these features in production, you can turn on feature toggles to try out new functionality in development or test environments. You use feature toggles, also known as feature flags, to enable or disable features in Grafana. You can turn on feature toggles to try out new functionality in development or test environments.
This page contains a list of available feature toggles. To learn how to turn on feature toggles, refer to our [Configure Grafana documentation]({{< relref "../_index.md#feature_toggles" >}}). Feature toggles are also available to Grafana Cloud Advanced customers. If you use Grafana Cloud Advanced, you can open a support ticket and specify the feature toggles and stack for which you want them enabled. This page contains a list of available feature toggles. To learn how to turn on feature toggles, refer to our [Configure Grafana documentation]({{< relref "../_index.md#feature_toggles" >}}). Feature toggles are also available to Grafana Cloud Advanced customers. If you use Grafana Cloud Advanced, you can open a support ticket and specify the feature toggles and stack for which you want them enabled.
## Stable feature toggles ## Feature toggles
Some stable features are enabled by default. You can disable a stable feature by setting the feature flag to "false" in the configuration. Some features are enabled by default. You can disable these feature by setting the feature flag to "false" in the configuration.
| Feature toggle name | Description | Enabled by default | | Feature toggle name | Description | Enabled by default |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
@ -41,7 +41,7 @@ Some stable features are enabled by default. You can disable a stable feature by
| `authenticationConfigUI` | Enables authentication configuration UI | Yes | | `authenticationConfigUI` | Enables authentication configuration UI | Yes |
| `advancedDataSourcePicker` | Enable a new data source picker with contextual information, recently used order and advanced mode | Yes | | `advancedDataSourcePicker` | Enable a new data source picker with contextual information, recently used order and advanced mode | Yes |
## Beta feature toggles ## Preview feature toggles
| Feature toggle name | Description | | Feature toggle name | Description |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@ -67,10 +67,10 @@ Some stable features are enabled by default. You can disable a stable feature by
| `dataSourcePageHeader` | Apply new pageHeader UI in data source edit page | | `dataSourcePageHeader` | Apply new pageHeader UI in data source edit page |
| `sqlDatasourceDatabaseSelection` | Enables previous SQL data source dataset dropdown behavior | | `sqlDatasourceDatabaseSelection` | Enables previous SQL data source dataset dropdown behavior |
## Alpha feature toggles ## Experimental feature toggles
These features are early in their development lifecycle and so are not yet supported in Grafana Cloud. These features are early in their development lifecycle and so are not yet supported in Grafana Cloud.
Alpha features might be changed or removed without prior notice. Experimental features might be changed or removed without prior notice.
| Feature toggle name | Description | | Feature toggle name | Description |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------ | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------ |

View File

@ -9,43 +9,48 @@ type FeatureToggles interface {
IsEnabled(flag string) bool IsEnabled(flag string) bool
} }
// FeatureFlagState indicates the quality level // FeatureFlagStage indicates the quality level
type FeatureFlagState int type FeatureFlagStage int
const ( const (
// FeatureStateUnknown indicates that no state is specified // FeatureStageUnknown indicates that no state is specified
FeatureStateUnknown FeatureFlagState = iota FeatureStageUnknown FeatureFlagStage = iota
// FeatureStateAlpha the feature is in active development and may change at any time // FeatureStageExperimental -- Does this work for Grafana Labs?
FeatureStateAlpha FeatureStageExperimental
// FeatureStateBeta the feature is still in development, but settings will have migrations // FeatureStagePrivatePreview -- Does this work for a limited number of customers?
FeatureStateBeta FeatureStagePrivatePreview
// FeatureStateStable this is a stable feature // FeatureStagePublicPreview -- Does this work for most customers?
FeatureStateStable FeatureStagePublicPreview
// FeatureStateDeprecated the feature will be removed in the future // FeatureStageGeneralAvailability -- Feature is available to all applicable customers
FeatureStateDeprecated FeatureStageGeneralAvailability
// FeatureStageDeprecated the feature will be removed in the future
FeatureStageDeprecated
) )
func (s FeatureFlagState) String() string { func (s FeatureFlagStage) String() string {
switch s { switch s {
case FeatureStateAlpha: case FeatureStageExperimental:
return "alpha" return "experimental"
case FeatureStateBeta: case FeatureStagePrivatePreview:
return "beta" return "privatePreview"
case FeatureStateStable: case FeatureStagePublicPreview:
return "stable" return "preview"
case FeatureStateDeprecated: case FeatureStageGeneralAvailability:
return "GA"
case FeatureStageDeprecated:
return "deprecated" return "deprecated"
case FeatureStateUnknown: case FeatureStageUnknown:
} }
return "unknown" return "unknown"
} }
// MarshalJSON marshals the enum as a quoted json string // MarshalJSON marshals the enum as a quoted json string
func (s FeatureFlagState) MarshalJSON() ([]byte, error) { func (s FeatureFlagStage) MarshalJSON() ([]byte, error) {
buffer := bytes.NewBufferString(`"`) buffer := bytes.NewBufferString(`"`)
buffer.WriteString(s.String()) buffer.WriteString(s.String())
buffer.WriteString(`"`) buffer.WriteString(`"`)
@ -53,7 +58,7 @@ func (s FeatureFlagState) MarshalJSON() ([]byte, error) {
} }
// UnmarshalJSON unmarshals a quoted json string to the enum value // UnmarshalJSON unmarshals a quoted json string to the enum value
func (s *FeatureFlagState) UnmarshalJSON(b []byte) error { func (s *FeatureFlagStage) UnmarshalJSON(b []byte) error {
var j string var j string
err := json.Unmarshal(b, &j) err := json.Unmarshal(b, &j)
if err != nil { if err != nil {
@ -62,19 +67,30 @@ func (s *FeatureFlagState) UnmarshalJSON(b []byte) error {
switch j { switch j {
case "alpha": case "alpha":
*s = FeatureStateAlpha fallthrough
case "experimental":
*s = FeatureStageExperimental
case "privatePreview":
*s = FeatureStagePrivatePreview
case "beta": case "beta":
*s = FeatureStateBeta fallthrough
case "preview":
*s = FeatureStagePublicPreview
case "stable": case "stable":
*s = FeatureStateStable fallthrough
case "ga":
fallthrough
case "GA":
*s = FeatureStageGeneralAvailability
case "deprecated": case "deprecated":
*s = FeatureStateDeprecated *s = FeatureStageDeprecated
default: default:
*s = FeatureStateUnknown *s = FeatureStageUnknown
} }
return nil return nil
} }
@ -82,7 +98,7 @@ func (s *FeatureFlagState) UnmarshalJSON(b []byte) error {
type FeatureFlag struct { type FeatureFlag struct {
Name string `json:"name" yaml:"name"` // Unique name Name string `json:"name" yaml:"name"` // Unique name
Description string `json:"description"` Description string `json:"description"`
State FeatureFlagState `json:"state,omitempty"` Stage FeatureFlagStage `json:"stage,omitempty"`
DocsURL string `json:"docsURL,omitempty"` DocsURL string `json:"docsURL,omitempty"`
// Owner person or team that owns this feature flag // Owner person or team that owns this feature flag

View File

@ -48,8 +48,8 @@ func (fm *FeatureManager) registerFlags(flags ...FeatureFlag) {
} }
// The most recently defined state // The most recently defined state
if add.State != FeatureStateUnknown { if add.Stage != FeatureStageUnknown {
flag.State = add.State flag.Stage = add.Stage
} }
// Only gets more restrictive // Only gets more restrictive

View File

@ -12,51 +12,51 @@ var (
{ {
Name: "trimDefaults", Name: "trimDefaults",
Description: "Use cue schema to remove values that will be applied automatically", Description: "Use cue schema to remove values that will be applied automatically",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaAsCodeSquad, Owner: grafanaAsCodeSquad,
}, },
{ {
Name: "disableEnvelopeEncryption", Name: "disableEnvelopeEncryption",
Description: "Disable envelope encryption (emergency only)", Description: "Disable envelope encryption (emergency only)",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Owner: grafanaAsCodeSquad, Owner: grafanaAsCodeSquad,
}, },
{ {
Name: "live-service-web-worker", Name: "live-service-web-worker",
Description: "This will use a webworker thread to processes events rather than the main thread", Description: "This will use a webworker thread to processes events rather than the main thread",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaAppPlatformSquad, Owner: grafanaAppPlatformSquad,
}, },
{ {
Name: "queryOverLive", Name: "queryOverLive",
Description: "Use Grafana Live WebSocket to execute backend queries", Description: "Use Grafana Live WebSocket to execute backend queries",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaAppPlatformSquad, Owner: grafanaAppPlatformSquad,
}, },
{ {
Name: "panelTitleSearch", Name: "panelTitleSearch",
Description: "Search for dashboards using panel title", Description: "Search for dashboards using panel title",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaAppPlatformSquad, Owner: grafanaAppPlatformSquad,
}, },
{ {
Name: "prometheusAzureOverrideAudience", Name: "prometheusAzureOverrideAudience",
Description: "Experimental. Allow override default AAD audience for Azure Prometheus endpoint", Description: "Experimental. Allow override default AAD audience for Azure Prometheus endpoint",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "publicDashboards", Name: "publicDashboards",
Description: "Enables public access to dashboards", Description: "Enables public access to dashboards",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
}, },
{ {
Name: "publicDashboardsEmailSharing", Name: "publicDashboardsEmailSharing",
Description: "Enables public dashboard sharing to be restricted to only allowed emails", Description: "Enables public dashboard sharing to be restricted to only allowed emails",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
RequiresLicense: true, RequiresLicense: true,
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
HideFromDocs: true, HideFromDocs: true,
@ -64,31 +64,31 @@ var (
{ {
Name: "lokiLive", Name: "lokiLive",
Description: "Support WebSocket streaming for loki (early prototype)", Description: "Support WebSocket streaming for loki (early prototype)",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
}, },
{ {
Name: "featureHighlights", Name: "featureHighlights",
Description: "Highlight Grafana Enterprise features", Description: "Highlight Grafana Enterprise features",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Owner: grafanaAsCodeSquad, Owner: grafanaAsCodeSquad,
}, },
{ {
Name: "migrationLocking", Name: "migrationLocking",
Description: "Lock database during migrations", Description: "Lock database during migrations",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaBackendPlatformSquad, Owner: grafanaBackendPlatformSquad,
}, },
{ {
Name: "storage", Name: "storage",
Description: "Configurable storage for dashboards, datasources, and resources", Description: "Configurable storage for dashboards, datasources, and resources",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaAppPlatformSquad, Owner: grafanaAppPlatformSquad,
}, },
{ {
Name: "exploreMixedDatasource", Name: "exploreMixedDatasource",
Description: "Enable mixed datasource in Explore", Description: "Enable mixed datasource in Explore",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
FrontendOnly: true, FrontendOnly: true,
Expression: "true", // turned on by default Expression: "true", // turned on by default
Owner: grafanaExploreSquad, Owner: grafanaExploreSquad,
@ -96,141 +96,141 @@ var (
{ {
Name: "newTraceViewHeader", Name: "newTraceViewHeader",
Description: "Shows the new trace view header", Description: "Shows the new trace view header",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityTracesAndProfilingSquad, Owner: grafanaObservabilityTracesAndProfilingSquad,
}, },
{ {
Name: "correlations", Name: "correlations",
Description: "Correlations page", Description: "Correlations page",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaExploreSquad, Owner: grafanaExploreSquad,
}, },
{ {
Name: "datasourceQueryMultiStatus", Name: "datasourceQueryMultiStatus",
Description: "Introduce HTTP 207 Multi Status for api/ds/query", Description: "Introduce HTTP 207 Multi Status for api/ds/query",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaPluginsPlatformSquad, Owner: grafanaPluginsPlatformSquad,
}, },
{ {
Name: "traceToMetrics", Name: "traceToMetrics",
Description: "Enable trace to metrics links", Description: "Enable trace to metrics links",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityTracesAndProfilingSquad, Owner: grafanaObservabilityTracesAndProfilingSquad,
}, },
{ {
Name: "newDBLibrary", Name: "newDBLibrary",
Description: "Use jmoiron/sqlx rather than xorm for a few backend services", Description: "Use jmoiron/sqlx rather than xorm for a few backend services",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaBackendPlatformSquad, Owner: grafanaBackendPlatformSquad,
}, },
{ {
Name: "validateDashboardsOnSave", Name: "validateDashboardsOnSave",
Description: "Validate dashboard JSON POSTed to api/dashboards/db", Description: "Validate dashboard JSON POSTed to api/dashboards/db",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
RequiresRestart: true, RequiresRestart: true,
Owner: grafanaAsCodeSquad, Owner: grafanaAsCodeSquad,
}, },
{ {
Name: "autoMigrateOldPanels", Name: "autoMigrateOldPanels",
Description: "Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)", Description: "Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaDatavizSquad, Owner: grafanaDatavizSquad,
}, },
{ {
Name: "disableAngular", Name: "disableAngular",
Description: "Dynamic flag to disable angular at runtime. The preferred method is to set `angular_support_enabled` to `false` in the [security] settings, which allows you to change the state at runtime.", Description: "Dynamic flag to disable angular at runtime. The preferred method is to set `angular_support_enabled` to `false` in the [security] settings, which allows you to change the state at runtime.",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaDatavizSquad, Owner: grafanaDatavizSquad,
}, },
{ {
Name: "prometheusWideSeries", Name: "prometheusWideSeries",
Description: "Enable wide series responses in the Prometheus datasource", Description: "Enable wide series responses in the Prometheus datasource",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "canvasPanelNesting", Name: "canvasPanelNesting",
Description: "Allow elements nesting", Description: "Allow elements nesting",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaDatavizSquad, Owner: grafanaDatavizSquad,
}, },
{ {
Name: "scenes", Name: "scenes",
Description: "Experimental framework to build interactive dashboards", Description: "Experimental framework to build interactive dashboards",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
}, },
{ {
Name: "disableSecretsCompatibility", Name: "disableSecretsCompatibility",
Description: "Disable duplicated secret storage in legacy tables", Description: "Disable duplicated secret storage in legacy tables",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
RequiresRestart: true, RequiresRestart: true,
Owner: hostedGrafanaTeam, Owner: hostedGrafanaTeam,
}, },
{ {
Name: "logRequestsInstrumentedAsUnknown", Name: "logRequestsInstrumentedAsUnknown",
Description: "Logs the path for requests that are instrumented as unknown", Description: "Logs the path for requests that are instrumented as unknown",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: hostedGrafanaTeam, Owner: hostedGrafanaTeam,
}, },
{ {
Name: "dataConnectionsConsole", Name: "dataConnectionsConsole",
Description: "Enables a new top-level page called Connections. This page is an experiment that provides a better experience when you install and configure data sources and other plugins.", Description: "Enables a new top-level page called Connections. This page is an experiment that provides a better experience when you install and configure data sources and other plugins.",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Expression: "true", // turned on by default Expression: "true", // turned on by default
Owner: grafanaPluginsPlatformSquad, Owner: grafanaPluginsPlatformSquad,
}, },
{ {
Name: "topnav", Name: "topnav",
Description: "Enables new top navigation and page layouts", Description: "Enables new top navigation and page layouts",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Expression: "true", // enabled by default Expression: "true", // enabled by default
Owner: grafanaFrontendPlatformSquad, Owner: grafanaFrontendPlatformSquad,
}, },
{ {
Name: "grpcServer", Name: "grpcServer",
Description: "Run the GRPC server", Description: "Run the GRPC server",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaAppPlatformSquad, Owner: grafanaAppPlatformSquad,
}, },
{ {
Name: "entityStore", Name: "entityStore",
Description: "SQL-based entity store (requires storage flag also)", Description: "SQL-based entity store (requires storage flag also)",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
RequiresDevMode: true, RequiresDevMode: true,
Owner: grafanaAppPlatformSquad, Owner: grafanaAppPlatformSquad,
}, },
{ {
Name: "cloudWatchCrossAccountQuerying", Name: "cloudWatchCrossAccountQuerying",
Description: "Enables cross-account querying in CloudWatch datasources", Description: "Enables cross-account querying in CloudWatch datasources",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Expression: "true", // enabled by default Expression: "true", // enabled by default
Owner: awsPluginsSquad, Owner: awsPluginsSquad,
}, },
{ {
Name: "redshiftAsyncQueryDataSupport", Name: "redshiftAsyncQueryDataSupport",
Description: "Enable async query data support for Redshift", Description: "Enable async query data support for Redshift",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: awsPluginsSquad, Owner: awsPluginsSquad,
}, },
{ {
Name: "athenaAsyncQueryDataSupport", Name: "athenaAsyncQueryDataSupport",
Description: "Enable async query data support for Athena", Description: "Enable async query data support for Athena",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: awsPluginsSquad, Owner: awsPluginsSquad,
}, },
{ {
Name: "newPanelChromeUI", Name: "newPanelChromeUI",
Description: "Show updated look and feel of grafana-ui PanelChrome: panel header, icons, and menu", Description: "Show updated look and feel of grafana-ui PanelChrome: panel header, icons, and menu",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
FrontendOnly: true, FrontendOnly: true,
Expression: "true", // enabled by default Expression: "true", // enabled by default
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
@ -238,43 +238,43 @@ var (
{ {
Name: "showDashboardValidationWarnings", Name: "showDashboardValidationWarnings",
Description: "Show warnings when dashboards do not validate against the schema", Description: "Show warnings when dashboards do not validate against the schema",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
}, },
{ {
Name: "mysqlAnsiQuotes", Name: "mysqlAnsiQuotes",
Description: "Use double quotes to escape keyword in a MySQL query", Description: "Use double quotes to escape keyword in a MySQL query",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaBackendPlatformSquad, Owner: grafanaBackendPlatformSquad,
}, },
{ {
Name: "accessControlOnCall", Name: "accessControlOnCall",
Description: "Access control primitives for OnCall", Description: "Access control primitives for OnCall",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaAuthnzSquad, Owner: grafanaAuthnzSquad,
}, },
{ {
Name: "nestedFolders", Name: "nestedFolders",
Description: "Enable folder nesting", Description: "Enable folder nesting",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaBackendPlatformSquad, Owner: grafanaBackendPlatformSquad,
}, },
{ {
Name: "accessTokenExpirationCheck", Name: "accessTokenExpirationCheck",
Description: "Enable OAuth access_token expiration check and token refresh using the refresh_token", Description: "Enable OAuth access_token expiration check and token refresh using the refresh_token",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Owner: grafanaAuthnzSquad, Owner: grafanaAuthnzSquad,
}, },
{ {
Name: "showTraceId", Name: "showTraceId",
Description: "Show trace ids for requests", Description: "Show trace ids for requests",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
}, },
{ {
Name: "emptyDashboardPage", Name: "emptyDashboardPage",
Description: "Enable the redesigned user interface of a dashboard page that includes no panels", Description: "Enable the redesigned user interface of a dashboard page that includes no panels",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
FrontendOnly: true, FrontendOnly: true,
Expression: "true", // enabled by default Expression: "true", // enabled by default
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
@ -282,26 +282,26 @@ var (
{ {
Name: "disablePrometheusExemplarSampling", Name: "disablePrometheusExemplarSampling",
Description: "Disable Prometheus exemplar sampling", Description: "Disable Prometheus exemplar sampling",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "alertingBacktesting", Name: "alertingBacktesting",
Description: "Rule backtesting API for alerting", Description: "Rule backtesting API for alerting",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaAlertingSquad, Owner: grafanaAlertingSquad,
}, },
{ {
Name: "editPanelCSVDragAndDrop", Name: "editPanelCSVDragAndDrop",
Description: "Enables drag and drop for CSV and Excel files", Description: "Enables drag and drop for CSV and Excel files",
FrontendOnly: true, FrontendOnly: true,
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaBiSquad, Owner: grafanaBiSquad,
}, },
{ {
Name: "alertingNoNormalState", Name: "alertingNoNormalState",
Description: "Stop maintaining state of alerts that are not firing", Description: "Stop maintaining state of alerts that are not firing",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
RequiresRestart: false, RequiresRestart: false,
Owner: grafanaAlertingSquad, Owner: grafanaAlertingSquad,
}, },
@ -309,7 +309,7 @@ var (
Name: "logsSampleInExplore", Name: "logsSampleInExplore",
Description: "Enables access to the logs sample feature in Explore", Description: "Enables access to the logs sample feature in Explore",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Expression: "true", // turned on by default Expression: "true", // turned on by default
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
@ -317,7 +317,7 @@ var (
{ {
Name: "logsContextDatasourceUi", Name: "logsContextDatasourceUi",
Description: "Allow datasource to provide custom UI for context view", Description: "Allow datasource to provide custom UI for context view",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
Expression: "true", // turned on by default Expression: "true", // turned on by default
@ -325,88 +325,88 @@ var (
{ {
Name: "lokiQuerySplitting", Name: "lokiQuerySplitting",
Description: "Split large interval queries into subqueries with smaller time intervals", Description: "Split large interval queries into subqueries with smaller time intervals",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
}, },
{ {
Name: "lokiQuerySplittingConfig", Name: "lokiQuerySplittingConfig",
Description: "Give users the option to configure split durations for Loki queries", Description: "Give users the option to configure split durations for Loki queries",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
}, },
{ {
Name: "individualCookiePreferences", Name: "individualCookiePreferences",
Description: "Support overriding cookie preferences per user", Description: "Support overriding cookie preferences per user",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaBackendPlatformSquad, Owner: grafanaBackendPlatformSquad,
}, },
{ {
Name: "onlyExternalOrgRoleSync", Name: "onlyExternalOrgRoleSync",
Description: "Prohibits a user from changing organization roles synced with external auth providers", Description: "Prohibits a user from changing organization roles synced with external auth providers",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaAuthnzSquad, Owner: grafanaAuthnzSquad,
}, },
{ {
Name: "traceqlSearch", Name: "traceqlSearch",
Description: "Enables the 'TraceQL Search' tab for the Tempo datasource which provides a UI to generate TraceQL queries", Description: "Enables the 'TraceQL Search' tab for the Tempo datasource which provides a UI to generate TraceQL queries",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityTracesAndProfilingSquad, Owner: grafanaObservabilityTracesAndProfilingSquad,
}, },
{ {
Name: "prometheusMetricEncyclopedia", Name: "prometheusMetricEncyclopedia",
Description: "Replaces the Prometheus query builder metric select option with a paginated and filterable component", Description: "Replaces the Prometheus query builder metric select option with a paginated and filterable component",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "timeSeriesTable", Name: "timeSeriesTable",
Description: "Enable time series table transformer & sparkline cell type", Description: "Enable time series table transformer & sparkline cell type",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: appO11ySquad, Owner: appO11ySquad,
}, },
{ {
Name: "prometheusResourceBrowserCache", Name: "prometheusResourceBrowserCache",
Description: "Displays browser caching options in Prometheus data source configuration", Description: "Displays browser caching options in Prometheus data source configuration",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "influxdbBackendMigration", Name: "influxdbBackendMigration",
Description: "Query InfluxDB InfluxQL without the proxy", Description: "Query InfluxDB InfluxQL without the proxy",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "clientTokenRotation", Name: "clientTokenRotation",
Description: "Replaces the current in-request token rotation so that the client initiates the rotation", Description: "Replaces the current in-request token rotation so that the client initiates the rotation",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaAuthnzSquad, Owner: grafanaAuthnzSquad,
}, },
{ {
Name: "prometheusDataplane", Name: "prometheusDataplane",
Description: "Changes responses to from Prometheus to be compliant with the dataplane specification. In particular it sets the numeric Field.Name from 'Value' to the value of the `__name__` label when present.", Description: "Changes responses to from Prometheus to be compliant with the dataplane specification. In particular it sets the numeric Field.Name from 'Value' to the value of the `__name__` label when present.",
Expression: "true", Expression: "true",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "lokiMetricDataplane", Name: "lokiMetricDataplane",
Description: "Changes metric responses from Loki to be compliant with the dataplane specification.", Description: "Changes metric responses from Loki to be compliant with the dataplane specification.",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Expression: "true", Expression: "true",
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
}, },
{ {
Name: "dataplaneFrontendFallback", Name: "dataplaneFrontendFallback",
Description: "Support dataplane contract field name change for transformations and field name matchers where the name is different", Description: "Support dataplane contract field name change for transformations and field name matchers where the name is different",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
FrontendOnly: true, FrontendOnly: true,
Expression: "true", Expression: "true",
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
@ -414,19 +414,19 @@ var (
{ {
Name: "disableSSEDataplane", Name: "disableSSEDataplane",
Description: "Disables dataplane specific processing in server side expressions.", Description: "Disables dataplane specific processing in server side expressions.",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaObservabilityMetricsSquad, Owner: grafanaObservabilityMetricsSquad,
}, },
{ {
Name: "alertStateHistoryLokiSecondary", Name: "alertStateHistoryLokiSecondary",
Description: "Enable Grafana to write alert state history to an external Loki instance in addition to Grafana annotations.", Description: "Enable Grafana to write alert state history to an external Loki instance in addition to Grafana annotations.",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaAlertingSquad, Owner: grafanaAlertingSquad,
}, },
{ {
Name: "alertingNotificationsPoliciesMatchingInstances", Name: "alertingNotificationsPoliciesMatchingInstances",
Description: "Enables the preview of matching instances for notification policies", Description: "Enables the preview of matching instances for notification policies",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
FrontendOnly: true, FrontendOnly: true,
Expression: "true", // enabled by default Expression: "true", // enabled by default
Owner: grafanaAlertingSquad, Owner: grafanaAlertingSquad,
@ -434,76 +434,76 @@ var (
{ {
Name: "alertStateHistoryLokiPrimary", Name: "alertStateHistoryLokiPrimary",
Description: "Enable a remote Loki instance as the primary source for state history reads.", Description: "Enable a remote Loki instance as the primary source for state history reads.",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaAlertingSquad, Owner: grafanaAlertingSquad,
}, },
{ {
Name: "alertStateHistoryLokiOnly", Name: "alertStateHistoryLokiOnly",
Description: "Disable Grafana alerts from emitting annotations when a remote Loki instance is available.", Description: "Disable Grafana alerts from emitting annotations when a remote Loki instance is available.",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaAlertingSquad, Owner: grafanaAlertingSquad,
}, },
{ {
Name: "unifiedRequestLog", Name: "unifiedRequestLog",
Description: "Writes error logs to the request logger", Description: "Writes error logs to the request logger",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaBackendPlatformSquad, Owner: grafanaBackendPlatformSquad,
}, },
{ {
Name: "renderAuthJWT", Name: "renderAuthJWT",
Description: "Uses JWT-based auth for rendering instead of relying on remote cache", Description: "Uses JWT-based auth for rendering instead of relying on remote cache",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaAsCodeSquad, Owner: grafanaAsCodeSquad,
}, },
{ {
Name: "pyroscopeFlameGraph", Name: "pyroscopeFlameGraph",
Description: "Changes flame graph to pyroscope one", Description: "Changes flame graph to pyroscope one",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaObservabilityTracesAndProfilingSquad, Owner: grafanaObservabilityTracesAndProfilingSquad,
}, },
{ {
Name: "externalServiceAuth", Name: "externalServiceAuth",
Description: "Starts an OAuth2 authentication provider for external services", Description: "Starts an OAuth2 authentication provider for external services",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
RequiresDevMode: true, RequiresDevMode: true,
Owner: grafanaAuthnzSquad, Owner: grafanaAuthnzSquad,
}, },
{ {
Name: "refactorVariablesTimeRange", Name: "refactorVariablesTimeRange",
Description: "Refactor time range variables flow to reduce number of API calls made when query variables are chained", Description: "Refactor time range variables flow to reduce number of API calls made when query variables are chained",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
}, },
{ {
Name: "useCachingService", Name: "useCachingService",
Description: "When turned on, the new query and resource caching implementation using a wire service inject will be used in place of the previous middleware implementation", Description: "When turned on, the new query and resource caching implementation using a wire service inject will be used in place of the previous middleware implementation",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Owner: grafanaOperatorExperienceSquad, Owner: grafanaOperatorExperienceSquad,
RequiresRestart: true, RequiresRestart: true,
}, },
{ {
Name: "enableElasticsearchBackendQuerying", Name: "enableElasticsearchBackendQuerying",
Description: "Enable the processing of queries and responses in the Elasticsearch data source through backend", Description: "Enable the processing of queries and responses in the Elasticsearch data source through backend",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
}, },
{ {
Name: "authenticationConfigUI", Name: "authenticationConfigUI",
Description: "Enables authentication configuration UI", Description: "Enables authentication configuration UI",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
Expression: "true", Expression: "true",
Owner: grafanaAuthnzSquad, Owner: grafanaAuthnzSquad,
}, },
{ {
Name: "pluginsAPIManifestKey", Name: "pluginsAPIManifestKey",
Description: "Use grafana.com API to retrieve the public manifest key", Description: "Use grafana.com API to retrieve the public manifest key",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaPluginsPlatformSquad, Owner: grafanaPluginsPlatformSquad,
}, },
{ {
Name: "advancedDataSourcePicker", Name: "advancedDataSourcePicker",
Description: "Enable a new data source picker with contextual information, recently used order and advanced mode", Description: "Enable a new data source picker with contextual information, recently used order and advanced mode",
State: FeatureStateStable, Stage: FeatureStageGeneralAvailability,
FrontendOnly: true, FrontendOnly: true,
Expression: "true", // enabled by default Expression: "true", // enabled by default
Owner: grafanaDashboardsSquad, Owner: grafanaDashboardsSquad,
@ -511,7 +511,7 @@ var (
{ {
Name: "faroDatasourceSelector", Name: "faroDatasourceSelector",
Description: "Enable the data source selector within the Frontend Apps section of the Frontend Observability", Description: "Enable the data source selector within the Frontend Apps section of the Frontend Observability",
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
FrontendOnly: true, FrontendOnly: true,
Owner: appO11ySquad, Owner: appO11ySquad,
}, },
@ -519,34 +519,34 @@ var (
Name: "enableDatagridEditing", Name: "enableDatagridEditing",
Description: "Enables the edit functionality in the datagrid panel", Description: "Enables the edit functionality in the datagrid panel",
FrontendOnly: true, FrontendOnly: true,
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaBiSquad, Owner: grafanaBiSquad,
}, },
{ {
Name: "dataSourcePageHeader", Name: "dataSourcePageHeader",
Description: "Apply new pageHeader UI in data source edit page", Description: "Apply new pageHeader UI in data source edit page",
FrontendOnly: true, FrontendOnly: true,
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: enterpriseDatasourcesSquad, Owner: enterpriseDatasourcesSquad,
}, },
{ {
Name: "extraThemes", Name: "extraThemes",
Description: "Enables extra themes", Description: "Enables extra themes",
FrontendOnly: true, FrontendOnly: true,
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaFrontendPlatformSquad, Owner: grafanaFrontendPlatformSquad,
}, },
{ {
Name: "lokiPredefinedOperations", Name: "lokiPredefinedOperations",
Description: "Adds predefined query operations to Loki query editor", Description: "Adds predefined query operations to Loki query editor",
FrontendOnly: true, FrontendOnly: true,
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
Owner: grafanaObservabilityLogsSquad, Owner: grafanaObservabilityLogsSquad,
}, },
{ {
Name: "pluginsFrontendSandbox", Name: "pluginsFrontendSandbox",
Description: "Enables the plugins frontend sandbox", Description: "Enables the plugins frontend sandbox",
State: FeatureStateAlpha, Stage: FeatureStageExperimental,
FrontendOnly: true, FrontendOnly: true,
Owner: grafanaPluginsPlatformSquad, Owner: grafanaPluginsPlatformSquad,
}, },
@ -554,7 +554,7 @@ var (
Name: "sqlDatasourceDatabaseSelection", Name: "sqlDatasourceDatabaseSelection",
Description: "Enables previous SQL data source dataset dropdown behavior", Description: "Enables previous SQL data source dataset dropdown behavior",
FrontendOnly: true, FrontendOnly: true,
State: FeatureStateBeta, Stage: FeatureStagePublicPreview,
Owner: grafanaBiSquad, Owner: grafanaBiSquad,
}, },
} }

View File

@ -49,7 +49,7 @@ func ProvideManagerService(cfg *setting.Cfg, licensing licensing.Licensing) (*Fe
default: default:
flag = &FeatureFlag{ flag = &FeatureFlag{
Name: key, Name: key,
State: FeatureStateUnknown, Stage: FeatureStageUnknown,
} }
mgmt.flags[key] = flag mgmt.flags[key] = flag
} }

View File

@ -1,83 +1,83 @@
Name,State,Owner,requiresDevMode,RequiresLicense,RequiresRestart,FrontendOnly Name,Stage,Owner,requiresDevMode,RequiresLicense,RequiresRestart,FrontendOnly
trimDefaults,beta,@grafana/grafana-as-code,false,false,false,false trimDefaults,preview,@grafana/grafana-as-code,false,false,false,false
disableEnvelopeEncryption,stable,@grafana/grafana-as-code,false,false,false,false disableEnvelopeEncryption,GA,@grafana/grafana-as-code,false,false,false,false
live-service-web-worker,alpha,@grafana/grafana-app-platform-squad,false,false,false,true live-service-web-worker,experimental,@grafana/grafana-app-platform-squad,false,false,false,true
queryOverLive,alpha,@grafana/grafana-app-platform-squad,false,false,false,true queryOverLive,experimental,@grafana/grafana-app-platform-squad,false,false,false,true
panelTitleSearch,beta,@grafana/grafana-app-platform-squad,false,false,false,false panelTitleSearch,preview,@grafana/grafana-app-platform-squad,false,false,false,false
prometheusAzureOverrideAudience,beta,@grafana/observability-metrics,false,false,false,false prometheusAzureOverrideAudience,preview,@grafana/observability-metrics,false,false,false,false
publicDashboards,beta,@grafana/dashboards-squad,false,false,false,false publicDashboards,preview,@grafana/dashboards-squad,false,false,false,false
publicDashboardsEmailSharing,beta,@grafana/dashboards-squad,false,true,false,false publicDashboardsEmailSharing,preview,@grafana/dashboards-squad,false,true,false,false
lokiLive,alpha,@grafana/observability-logs,false,false,false,false lokiLive,experimental,@grafana/observability-logs,false,false,false,false
featureHighlights,stable,@grafana/grafana-as-code,false,false,false,false featureHighlights,GA,@grafana/grafana-as-code,false,false,false,false
migrationLocking,beta,@grafana/backend-platform,false,false,false,false migrationLocking,preview,@grafana/backend-platform,false,false,false,false
storage,alpha,@grafana/grafana-app-platform-squad,false,false,false,false storage,experimental,@grafana/grafana-app-platform-squad,false,false,false,false
exploreMixedDatasource,stable,@grafana/explore-squad,false,false,false,true exploreMixedDatasource,GA,@grafana/explore-squad,false,false,false,true
newTraceViewHeader,alpha,@grafana/observability-traces-and-profiling,false,false,false,true newTraceViewHeader,experimental,@grafana/observability-traces-and-profiling,false,false,false,true
correlations,beta,@grafana/explore-squad,false,false,false,false correlations,preview,@grafana/explore-squad,false,false,false,false
datasourceQueryMultiStatus,alpha,@grafana/plugins-platform-backend,false,false,false,false datasourceQueryMultiStatus,experimental,@grafana/plugins-platform-backend,false,false,false,false
traceToMetrics,alpha,@grafana/observability-traces-and-profiling,false,false,false,true traceToMetrics,experimental,@grafana/observability-traces-and-profiling,false,false,false,true
newDBLibrary,beta,@grafana/backend-platform,false,false,false,false newDBLibrary,preview,@grafana/backend-platform,false,false,false,false
validateDashboardsOnSave,beta,@grafana/grafana-as-code,false,false,true,false validateDashboardsOnSave,preview,@grafana/grafana-as-code,false,false,true,false
autoMigrateOldPanels,beta,@grafana/dataviz-squad,false,false,false,true autoMigrateOldPanels,preview,@grafana/dataviz-squad,false,false,false,true
disableAngular,beta,@grafana/dataviz-squad,false,false,false,true disableAngular,preview,@grafana/dataviz-squad,false,false,false,true
prometheusWideSeries,alpha,@grafana/observability-metrics,false,false,false,false prometheusWideSeries,experimental,@grafana/observability-metrics,false,false,false,false
canvasPanelNesting,alpha,@grafana/dataviz-squad,false,false,false,true canvasPanelNesting,experimental,@grafana/dataviz-squad,false,false,false,true
scenes,alpha,@grafana/dashboards-squad,false,false,false,true scenes,experimental,@grafana/dashboards-squad,false,false,false,true
disableSecretsCompatibility,alpha,@grafana/hosted-grafana-team,false,false,true,false disableSecretsCompatibility,experimental,@grafana/hosted-grafana-team,false,false,true,false
logRequestsInstrumentedAsUnknown,alpha,@grafana/hosted-grafana-team,false,false,false,false logRequestsInstrumentedAsUnknown,experimental,@grafana/hosted-grafana-team,false,false,false,false
dataConnectionsConsole,stable,@grafana/plugins-platform-backend,false,false,false,false dataConnectionsConsole,GA,@grafana/plugins-platform-backend,false,false,false,false
topnav,stable,@grafana/grafana-frontend-platform,false,false,false,false topnav,GA,@grafana/grafana-frontend-platform,false,false,false,false
grpcServer,beta,@grafana/grafana-app-platform-squad,false,false,false,false grpcServer,preview,@grafana/grafana-app-platform-squad,false,false,false,false
entityStore,alpha,@grafana/grafana-app-platform-squad,true,false,false,false entityStore,experimental,@grafana/grafana-app-platform-squad,true,false,false,false
cloudWatchCrossAccountQuerying,stable,@grafana/aws-plugins,false,false,false,false cloudWatchCrossAccountQuerying,GA,@grafana/aws-plugins,false,false,false,false
redshiftAsyncQueryDataSupport,alpha,@grafana/aws-plugins,false,false,false,true redshiftAsyncQueryDataSupport,experimental,@grafana/aws-plugins,false,false,false,true
athenaAsyncQueryDataSupport,alpha,@grafana/aws-plugins,false,false,false,true athenaAsyncQueryDataSupport,experimental,@grafana/aws-plugins,false,false,false,true
newPanelChromeUI,stable,@grafana/dashboards-squad,false,false,false,true newPanelChromeUI,GA,@grafana/dashboards-squad,false,false,false,true
showDashboardValidationWarnings,alpha,@grafana/dashboards-squad,false,false,false,false showDashboardValidationWarnings,experimental,@grafana/dashboards-squad,false,false,false,false
mysqlAnsiQuotes,alpha,@grafana/backend-platform,false,false,false,false mysqlAnsiQuotes,experimental,@grafana/backend-platform,false,false,false,false
accessControlOnCall,beta,@grafana/grafana-authnz-team,false,false,false,false accessControlOnCall,preview,@grafana/grafana-authnz-team,false,false,false,false
nestedFolders,beta,@grafana/backend-platform,false,false,false,false nestedFolders,preview,@grafana/backend-platform,false,false,false,false
accessTokenExpirationCheck,stable,@grafana/grafana-authnz-team,false,false,false,false accessTokenExpirationCheck,GA,@grafana/grafana-authnz-team,false,false,false,false
showTraceId,alpha,@grafana/observability-logs,false,false,false,false showTraceId,experimental,@grafana/observability-logs,false,false,false,false
emptyDashboardPage,stable,@grafana/dashboards-squad,false,false,false,true emptyDashboardPage,GA,@grafana/dashboards-squad,false,false,false,true
disablePrometheusExemplarSampling,stable,@grafana/observability-metrics,false,false,false,false disablePrometheusExemplarSampling,GA,@grafana/observability-metrics,false,false,false,false
alertingBacktesting,alpha,@grafana/alerting-squad,false,false,false,false alertingBacktesting,experimental,@grafana/alerting-squad,false,false,false,false
editPanelCSVDragAndDrop,alpha,@grafana/grafana-bi-squad,false,false,false,true editPanelCSVDragAndDrop,experimental,@grafana/grafana-bi-squad,false,false,false,true
alertingNoNormalState,beta,@grafana/alerting-squad,false,false,false,false alertingNoNormalState,preview,@grafana/alerting-squad,false,false,false,false
logsSampleInExplore,stable,@grafana/observability-logs,false,false,false,true logsSampleInExplore,GA,@grafana/observability-logs,false,false,false,true
logsContextDatasourceUi,stable,@grafana/observability-logs,false,false,false,true logsContextDatasourceUi,GA,@grafana/observability-logs,false,false,false,true
lokiQuerySplitting,alpha,@grafana/observability-logs,false,false,false,true lokiQuerySplitting,experimental,@grafana/observability-logs,false,false,false,true
lokiQuerySplittingConfig,alpha,@grafana/observability-logs,false,false,false,true lokiQuerySplittingConfig,experimental,@grafana/observability-logs,false,false,false,true
individualCookiePreferences,alpha,@grafana/backend-platform,false,false,false,false individualCookiePreferences,experimental,@grafana/backend-platform,false,false,false,false
onlyExternalOrgRoleSync,alpha,@grafana/grafana-authnz-team,false,false,false,false onlyExternalOrgRoleSync,experimental,@grafana/grafana-authnz-team,false,false,false,false
traceqlSearch,alpha,@grafana/observability-traces-and-profiling,false,false,false,true traceqlSearch,experimental,@grafana/observability-traces-and-profiling,false,false,false,true
prometheusMetricEncyclopedia,alpha,@grafana/observability-metrics,false,false,false,true prometheusMetricEncyclopedia,experimental,@grafana/observability-metrics,false,false,false,true
timeSeriesTable,alpha,@grafana/app-o11y,false,false,false,true timeSeriesTable,experimental,@grafana/app-o11y,false,false,false,true
prometheusResourceBrowserCache,alpha,@grafana/observability-metrics,false,false,false,true prometheusResourceBrowserCache,experimental,@grafana/observability-metrics,false,false,false,true
influxdbBackendMigration,alpha,@grafana/observability-metrics,false,false,false,true influxdbBackendMigration,experimental,@grafana/observability-metrics,false,false,false,true
clientTokenRotation,alpha,@grafana/grafana-authnz-team,false,false,false,false clientTokenRotation,experimental,@grafana/grafana-authnz-team,false,false,false,false
prometheusDataplane,stable,@grafana/observability-metrics,false,false,false,false prometheusDataplane,GA,@grafana/observability-metrics,false,false,false,false
lokiMetricDataplane,stable,@grafana/observability-logs,false,false,false,false lokiMetricDataplane,GA,@grafana/observability-logs,false,false,false,false
dataplaneFrontendFallback,stable,@grafana/observability-metrics,false,false,false,true dataplaneFrontendFallback,GA,@grafana/observability-metrics,false,false,false,true
disableSSEDataplane,alpha,@grafana/observability-metrics,false,false,false,false disableSSEDataplane,experimental,@grafana/observability-metrics,false,false,false,false
alertStateHistoryLokiSecondary,alpha,@grafana/alerting-squad,false,false,false,false alertStateHistoryLokiSecondary,experimental,@grafana/alerting-squad,false,false,false,false
alertingNotificationsPoliciesMatchingInstances,stable,@grafana/alerting-squad,false,false,false,true alertingNotificationsPoliciesMatchingInstances,GA,@grafana/alerting-squad,false,false,false,true
alertStateHistoryLokiPrimary,alpha,@grafana/alerting-squad,false,false,false,false alertStateHistoryLokiPrimary,experimental,@grafana/alerting-squad,false,false,false,false
alertStateHistoryLokiOnly,alpha,@grafana/alerting-squad,false,false,false,false alertStateHistoryLokiOnly,experimental,@grafana/alerting-squad,false,false,false,false
unifiedRequestLog,alpha,@grafana/backend-platform,false,false,false,false unifiedRequestLog,experimental,@grafana/backend-platform,false,false,false,false
renderAuthJWT,beta,@grafana/grafana-as-code,false,false,false,false renderAuthJWT,preview,@grafana/grafana-as-code,false,false,false,false
pyroscopeFlameGraph,alpha,@grafana/observability-traces-and-profiling,false,false,false,false pyroscopeFlameGraph,experimental,@grafana/observability-traces-and-profiling,false,false,false,false
externalServiceAuth,alpha,@grafana/grafana-authnz-team,true,false,false,false externalServiceAuth,experimental,@grafana/grafana-authnz-team,true,false,false,false
refactorVariablesTimeRange,beta,@grafana/dashboards-squad,false,false,false,false refactorVariablesTimeRange,preview,@grafana/dashboards-squad,false,false,false,false
useCachingService,stable,@grafana/grafana-operator-experience-squad,false,false,true,false useCachingService,GA,@grafana/grafana-operator-experience-squad,false,false,true,false
enableElasticsearchBackendQuerying,beta,@grafana/observability-logs,false,false,false,false enableElasticsearchBackendQuerying,preview,@grafana/observability-logs,false,false,false,false
authenticationConfigUI,stable,@grafana/grafana-authnz-team,false,false,false,false authenticationConfigUI,GA,@grafana/grafana-authnz-team,false,false,false,false
pluginsAPIManifestKey,alpha,@grafana/plugins-platform-backend,false,false,false,false pluginsAPIManifestKey,experimental,@grafana/plugins-platform-backend,false,false,false,false
advancedDataSourcePicker,stable,@grafana/dashboards-squad,false,false,false,true advancedDataSourcePicker,GA,@grafana/dashboards-squad,false,false,false,true
faroDatasourceSelector,beta,@grafana/app-o11y,false,false,false,true faroDatasourceSelector,preview,@grafana/app-o11y,false,false,false,true
enableDatagridEditing,beta,@grafana/grafana-bi-squad,false,false,false,true enableDatagridEditing,preview,@grafana/grafana-bi-squad,false,false,false,true
dataSourcePageHeader,beta,@grafana/enterprise-datasources,false,false,false,true dataSourcePageHeader,preview,@grafana/enterprise-datasources,false,false,false,true
extraThemes,alpha,@grafana/grafana-frontend-platform,false,false,false,true extraThemes,experimental,@grafana/grafana-frontend-platform,false,false,false,true
lokiPredefinedOperations,alpha,@grafana/observability-logs,false,false,false,true lokiPredefinedOperations,experimental,@grafana/observability-logs,false,false,false,true
pluginsFrontendSandbox,alpha,@grafana/plugins-platform-backend,false,false,false,true pluginsFrontendSandbox,experimental,@grafana/plugins-platform-backend,false,false,false,true
sqlDatasourceDatabaseSelection,beta,@grafana/grafana-bi-squad,false,false,false,true sqlDatasourceDatabaseSelection,preview,@grafana/grafana-bi-squad,false,false,false,true

1 Name State Stage Owner requiresDevMode RequiresLicense RequiresRestart FrontendOnly
2 trimDefaults beta preview @grafana/grafana-as-code false false false false
3 disableEnvelopeEncryption stable GA @grafana/grafana-as-code false false false false
4 live-service-web-worker alpha experimental @grafana/grafana-app-platform-squad false false false true
5 queryOverLive alpha experimental @grafana/grafana-app-platform-squad false false false true
6 panelTitleSearch beta preview @grafana/grafana-app-platform-squad false false false false
7 prometheusAzureOverrideAudience beta preview @grafana/observability-metrics false false false false
8 publicDashboards beta preview @grafana/dashboards-squad false false false false
9 publicDashboardsEmailSharing beta preview @grafana/dashboards-squad false true false false
10 lokiLive alpha experimental @grafana/observability-logs false false false false
11 featureHighlights stable GA @grafana/grafana-as-code false false false false
12 migrationLocking beta preview @grafana/backend-platform false false false false
13 storage alpha experimental @grafana/grafana-app-platform-squad false false false false
14 exploreMixedDatasource stable GA @grafana/explore-squad false false false true
15 newTraceViewHeader alpha experimental @grafana/observability-traces-and-profiling false false false true
16 correlations beta preview @grafana/explore-squad false false false false
17 datasourceQueryMultiStatus alpha experimental @grafana/plugins-platform-backend false false false false
18 traceToMetrics alpha experimental @grafana/observability-traces-and-profiling false false false true
19 newDBLibrary beta preview @grafana/backend-platform false false false false
20 validateDashboardsOnSave beta preview @grafana/grafana-as-code false false true false
21 autoMigrateOldPanels beta preview @grafana/dataviz-squad false false false true
22 disableAngular beta preview @grafana/dataviz-squad false false false true
23 prometheusWideSeries alpha experimental @grafana/observability-metrics false false false false
24 canvasPanelNesting alpha experimental @grafana/dataviz-squad false false false true
25 scenes alpha experimental @grafana/dashboards-squad false false false true
26 disableSecretsCompatibility alpha experimental @grafana/hosted-grafana-team false false true false
27 logRequestsInstrumentedAsUnknown alpha experimental @grafana/hosted-grafana-team false false false false
28 dataConnectionsConsole stable GA @grafana/plugins-platform-backend false false false false
29 topnav stable GA @grafana/grafana-frontend-platform false false false false
30 grpcServer beta preview @grafana/grafana-app-platform-squad false false false false
31 entityStore alpha experimental @grafana/grafana-app-platform-squad true false false false
32 cloudWatchCrossAccountQuerying stable GA @grafana/aws-plugins false false false false
33 redshiftAsyncQueryDataSupport alpha experimental @grafana/aws-plugins false false false true
34 athenaAsyncQueryDataSupport alpha experimental @grafana/aws-plugins false false false true
35 newPanelChromeUI stable GA @grafana/dashboards-squad false false false true
36 showDashboardValidationWarnings alpha experimental @grafana/dashboards-squad false false false false
37 mysqlAnsiQuotes alpha experimental @grafana/backend-platform false false false false
38 accessControlOnCall beta preview @grafana/grafana-authnz-team false false false false
39 nestedFolders beta preview @grafana/backend-platform false false false false
40 accessTokenExpirationCheck stable GA @grafana/grafana-authnz-team false false false false
41 showTraceId alpha experimental @grafana/observability-logs false false false false
42 emptyDashboardPage stable GA @grafana/dashboards-squad false false false true
43 disablePrometheusExemplarSampling stable GA @grafana/observability-metrics false false false false
44 alertingBacktesting alpha experimental @grafana/alerting-squad false false false false
45 editPanelCSVDragAndDrop alpha experimental @grafana/grafana-bi-squad false false false true
46 alertingNoNormalState beta preview @grafana/alerting-squad false false false false
47 logsSampleInExplore stable GA @grafana/observability-logs false false false true
48 logsContextDatasourceUi stable GA @grafana/observability-logs false false false true
49 lokiQuerySplitting alpha experimental @grafana/observability-logs false false false true
50 lokiQuerySplittingConfig alpha experimental @grafana/observability-logs false false false true
51 individualCookiePreferences alpha experimental @grafana/backend-platform false false false false
52 onlyExternalOrgRoleSync alpha experimental @grafana/grafana-authnz-team false false false false
53 traceqlSearch alpha experimental @grafana/observability-traces-and-profiling false false false true
54 prometheusMetricEncyclopedia alpha experimental @grafana/observability-metrics false false false true
55 timeSeriesTable alpha experimental @grafana/app-o11y false false false true
56 prometheusResourceBrowserCache alpha experimental @grafana/observability-metrics false false false true
57 influxdbBackendMigration alpha experimental @grafana/observability-metrics false false false true
58 clientTokenRotation alpha experimental @grafana/grafana-authnz-team false false false false
59 prometheusDataplane stable GA @grafana/observability-metrics false false false false
60 lokiMetricDataplane stable GA @grafana/observability-logs false false false false
61 dataplaneFrontendFallback stable GA @grafana/observability-metrics false false false true
62 disableSSEDataplane alpha experimental @grafana/observability-metrics false false false false
63 alertStateHistoryLokiSecondary alpha experimental @grafana/alerting-squad false false false false
64 alertingNotificationsPoliciesMatchingInstances stable GA @grafana/alerting-squad false false false true
65 alertStateHistoryLokiPrimary alpha experimental @grafana/alerting-squad false false false false
66 alertStateHistoryLokiOnly alpha experimental @grafana/alerting-squad false false false false
67 unifiedRequestLog alpha experimental @grafana/backend-platform false false false false
68 renderAuthJWT beta preview @grafana/grafana-as-code false false false false
69 pyroscopeFlameGraph alpha experimental @grafana/observability-traces-and-profiling false false false false
70 externalServiceAuth alpha experimental @grafana/grafana-authnz-team true false false false
71 refactorVariablesTimeRange beta preview @grafana/dashboards-squad false false false false
72 useCachingService stable GA @grafana/grafana-operator-experience-squad false false true false
73 enableElasticsearchBackendQuerying beta preview @grafana/observability-logs false false false false
74 authenticationConfigUI stable GA @grafana/grafana-authnz-team false false false false
75 pluginsAPIManifestKey alpha experimental @grafana/plugins-platform-backend false false false false
76 advancedDataSourcePicker stable GA @grafana/dashboards-squad false false false true
77 faroDatasourceSelector beta preview @grafana/app-o11y false false false true
78 enableDatagridEditing beta preview @grafana/grafana-bi-squad false false false true
79 dataSourcePageHeader beta preview @grafana/enterprise-datasources false false false true
80 extraThemes alpha experimental @grafana/grafana-frontend-platform false false false true
81 lokiPredefinedOperations alpha experimental @grafana/observability-logs false false false true
82 pluginsFrontendSandbox alpha experimental @grafana/plugins-platform-backend false false false true
83 sqlDatasourceDatabaseSelection beta preview @grafana/grafana-bi-squad false false false true

View File

@ -30,13 +30,13 @@ func TestFeatureToggleFiles(t *testing.T) {
t.Run("check registry constraints", func(t *testing.T) { t.Run("check registry constraints", func(t *testing.T) {
for _, flag := range standardFeatureFlags { for _, flag := range standardFeatureFlags {
if flag.Expression == "true" && flag.State != FeatureStateStable { if flag.Expression == "true" && flag.Stage != FeatureStageGeneralAvailability {
t.Errorf("only stable features can be enabled by default. See: %s", flag.Name) t.Errorf("only stable features can be enabled by default. See: %s", flag.Name)
} }
if flag.RequiresDevMode && flag.State != FeatureStateAlpha { if flag.RequiresDevMode && flag.Stage != FeatureStageExperimental {
t.Errorf("only alpha features can require dev mode. See: %s", flag.Name) t.Errorf("only alpha features can require dev mode. See: %s", flag.Name)
} }
if flag.State == FeatureStateUnknown { if flag.Stage == FeatureStageUnknown {
t.Errorf("standard toggles should not have an unknown state. See: %s", flag.Name) t.Errorf("standard toggles should not have an unknown state. See: %s", flag.Name)
} }
if flag.Description != strings.TrimSpace(flag.Description) { if flag.Description != strings.TrimSpace(flag.Description) {
@ -210,8 +210,8 @@ func generateCSV() string {
w := csv.NewWriter(&buf) w := csv.NewWriter(&buf)
if err := w.Write([]string{ if err := w.Write([]string{
"Name", "Name",
"State", //flag.State.String(), "Stage", //flag.Stage.String(),
"Owner", // string(flag.Owner), "Owner", //string(flag.Owner),
"requiresDevMode", //strconv.FormatBool(flag.RequiresDevMode), "requiresDevMode", //strconv.FormatBool(flag.RequiresDevMode),
"RequiresLicense", //strconv.FormatBool(flag.RequiresLicense), "RequiresLicense", //strconv.FormatBool(flag.RequiresLicense),
"RequiresRestart", //strconv.FormatBool(flag.RequiresRestart), "RequiresRestart", //strconv.FormatBool(flag.RequiresRestart),
@ -223,7 +223,7 @@ func generateCSV() string {
for _, flag := range standardFeatureFlags { for _, flag := range standardFeatureFlags {
if err := w.Write([]string{ if err := w.Write([]string{
flag.Name, flag.Name,
flag.State.String(), flag.Stage.String(),
string(flag.Owner), string(flag.Owner),
strconv.FormatBool(flag.RequiresDevMode), strconv.FormatBool(flag.RequiresDevMode),
strconv.FormatBool(flag.RequiresLicense), strconv.FormatBool(flag.RequiresLicense),
@ -244,7 +244,7 @@ func generateDocsMD() string {
buf := `--- buf := `---
aliases: aliases:
- /docs/grafana/latest/setup-grafana/configure-grafana/feature-toggles/ - /docs/grafana/latest/setup-grafana/configure-grafana/feature-toggles/
description: Learn about toggles for experimental and beta features, which you can enable or disable. description: Learn about feature toggles, which you can enable or disable.
title: Configure feature toggles title: Configure feature toggles
weight: 150 weight: 150
--- ---
@ -254,44 +254,44 @@ weight: 150
# Configure feature toggles # Configure feature toggles
You use feature toggles, also known as feature flags, to turn experimental or beta features on and off in Grafana. Although we do not recommend using these features in production, you can turn on feature toggles to try out new functionality in development or test environments. You use feature toggles, also known as feature flags, to enable or disable features in Grafana. You can turn on feature toggles to try out new functionality in development or test environments.
This page contains a list of available feature toggles. To learn how to turn on feature toggles, refer to our [Configure Grafana documentation]({{< relref "../_index.md#feature_toggles" >}}). Feature toggles are also available to Grafana Cloud Advanced customers. If you use Grafana Cloud Advanced, you can open a support ticket and specify the feature toggles and stack for which you want them enabled. This page contains a list of available feature toggles. To learn how to turn on feature toggles, refer to our [Configure Grafana documentation]({{< relref "../_index.md#feature_toggles" >}}). Feature toggles are also available to Grafana Cloud Advanced customers. If you use Grafana Cloud Advanced, you can open a support ticket and specify the feature toggles and stack for which you want them enabled.
## Stable feature toggles ## Feature toggles
Some stable features are enabled by default. You can disable a stable feature by setting the feature flag to "false" in the configuration. Some features are enabled by default. You can disable these feature by setting the feature flag to "false" in the configuration.
` + writeToggleDocsTable(func(flag FeatureFlag) bool { ` + writeToggleDocsTable(func(flag FeatureFlag) bool {
return flag.State == FeatureStateStable return flag.Stage == FeatureStageGeneralAvailability
}, true) }, true)
buf += ` buf += `
## Beta feature toggles ## Preview feature toggles
` + writeToggleDocsTable(func(flag FeatureFlag) bool { ` + writeToggleDocsTable(func(flag FeatureFlag) bool {
return flag.State == FeatureStateBeta return flag.Stage == FeatureStagePublicPreview
}, false) }, false)
if hasDeprecatedFlags { if hasDeprecatedFlags {
buf += ` buf += `
## Deprecated feature toggles ## Deprecated feature toggles
When stable or beta features are slated for removal, they will be marked as Deprecated first. When features are slated for removal, they will be marked as Deprecated first.
` + writeToggleDocsTable(func(flag FeatureFlag) bool { ` + writeToggleDocsTable(func(flag FeatureFlag) bool {
return flag.State == FeatureStateDeprecated return flag.Stage == FeatureStageDeprecated
}, false) }, false)
} }
buf += ` buf += `
## Alpha feature toggles ## Experimental feature toggles
These features are early in their development lifecycle and so are not yet supported in Grafana Cloud. These features are early in their development lifecycle and so are not yet supported in Grafana Cloud.
Alpha features might be changed or removed without prior notice. Experimental features might be changed or removed without prior notice.
` + writeToggleDocsTable(func(flag FeatureFlag) bool { ` + writeToggleDocsTable(func(flag FeatureFlag) bool {
return flag.State == FeatureStateAlpha && !flag.RequiresDevMode return flag.Stage == FeatureStageExperimental && !flag.RequiresDevMode
}, false) }, false)
buf += ` buf += `