// To change feature flags, edit:
//  pkg/services/featuremgmt/registry.go
// Then run tests in:
//  pkg/services/featuremgmt/toggles_gen_test.go
// twice to generate and validate the feature flag files
//
// Alternatively, use `make gen-feature-toggles`

package featuremgmt

import (
	"embed"
	"encoding/json"

	featuretoggle "github.com/grafana/grafana/pkg/apis/featuretoggle/v0alpha1"
)

var (
	// Register each toggle here
	standardFeatureFlags = []FeatureFlag{
		{
			Name:              "disableEnvelopeEncryption",
			Description:       "Disable envelope encryption (emergency only)",
			Stage:             FeatureStageGeneralAvailability,
			Owner:             grafanaAsCodeSquad,
			HideFromAdminPage: true,
			AllowSelfServe:    false,
			Expression:        "false",
		},
		{
			Name:         "live-service-web-worker",
			Description:  "This will use a webworker thread to processes events rather than the main thread",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
		},
		{
			Name:         "queryOverLive",
			Description:  "Use Grafana Live WebSocket to execute backend queries",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
		},
		{
			Name:              "panelTitleSearch",
			Description:       "Search for dashboards using panel title",
			Stage:             FeatureStagePublicPreview,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromAdminPage: true,
		},
		{
			Name:              "publicDashboardsEmailSharing",
			Description:       "Enables public dashboard sharing to be restricted to only allowed emails",
			Stage:             FeatureStagePublicPreview,
			Owner:             grafanaSharingSquad,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:         "publicDashboardsScene",
			Description:  "Enables public dashboard rendering using scenes",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaSharingSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:        "lokiExperimentalStreaming",
			Description: "Support new streaming approach for loki (prototype, needs special loki build)",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaObservabilityLogsSquad,
		},
		{
			Name:           "featureHighlights",
			Description:    "Highlight Grafana Enterprise features",
			Stage:          FeatureStageGeneralAvailability,
			Owner:          grafanaAsCodeSquad,
			AllowSelfServe: true,
			Expression:     "false",
		},
		{
			Name:        "storage",
			Description: "Configurable storage for dashboards, datasources, and resources",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaSearchAndStorageSquad,
		},
		{
			Name:           "correlations",
			Description:    "Correlations page",
			Stage:          FeatureStageGeneralAvailability,
			Owner:          grafanaDatavizSquad,
			Expression:     "true", // enabled by default
			AllowSelfServe: true,
		},
		{
			Name:         "autoMigrateOldPanels",
			Description:  "Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "autoMigrateGraphPanel",
			Description:  "Migrate old graph panel to supported time series panel - broken out from autoMigrateOldPanels to enable granular tracking",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "autoMigrateTablePanel",
			Description:  "Migrate old table panel to supported table panel - broken out from autoMigrateOldPanels to enable granular tracking",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "autoMigratePiechartPanel",
			Description:  "Migrate old piechart panel to supported piechart panel - broken out from autoMigrateOldPanels to enable granular tracking",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "autoMigrateWorldmapPanel",
			Description:  "Migrate old worldmap panel to supported geomap panel - broken out from autoMigrateOldPanels to enable granular tracking",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "autoMigrateStatPanel",
			Description:  "Migrate old stat panel to supported stat panel - broken out from autoMigrateOldPanels to enable granular tracking",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			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.",
			Stage:             FeatureStagePublicPreview,
			FrontendOnly:      true,
			Owner:             grafanaDatavizSquad,
			HideFromAdminPage: true,
		},
		{
			Name:              "canvasPanelNesting",
			Description:       "Allow elements nesting",
			Stage:             FeatureStageExperimental,
			FrontendOnly:      true,
			Owner:             grafanaDatavizSquad,
			HideFromAdminPage: true,
		},
		{
			Name:            "disableSecretsCompatibility",
			Description:     "Disable duplicated secret storage in legacy tables",
			Stage:           FeatureStageExperimental,
			RequiresRestart: true,
			Owner:           hostedGrafanaTeam,
		},
		{
			Name:        "logRequestsInstrumentedAsUnknown",
			Description: "Logs the path for requests that are instrumented as unknown",
			Stage:       FeatureStageExperimental,
			Owner:       hostedGrafanaTeam,
		},
		{
			Name:              "grpcServer",
			Description:       "Run the GRPC server",
			Stage:             FeatureStagePublicPreview,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromAdminPage: true,
		},
		{
			Name:           "cloudWatchCrossAccountQuerying",
			Description:    "Enables cross-account querying in CloudWatch datasources",
			Stage:          FeatureStageGeneralAvailability,
			Expression:     "true", // enabled by default
			Owner:          awsDatasourcesSquad,
			AllowSelfServe: true,
		},
		{
			Name:        "showDashboardValidationWarnings",
			Description: "Show warnings when dashboards do not validate against the schema",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaDashboardsSquad,
		},
		{
			Name:        "mysqlAnsiQuotes",
			Description: "Use double quotes to escape keyword in a MySQL query",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaSearchAndStorageSquad,
		},
		{
			Name:        "nestedFolders",
			Description: "Enable folder nesting",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaSearchAndStorageSquad,
			Expression:  "true", // enabled by default
		},
		{
			Name:        "alertingBacktesting",
			Description: "Rule backtesting API for alerting",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAlertingSquad,
		},
		{
			Name:         "editPanelCSVDragAndDrop",
			Description:  "Enables drag and drop for CSV and Excel files",
			FrontendOnly: true,
			Stage:        FeatureStageExperimental,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:           "logsContextDatasourceUi",
			Description:    "Allow datasource to provide custom UI for context view",
			Stage:          FeatureStageGeneralAvailability,
			FrontendOnly:   true,
			Owner:          grafanaObservabilityLogsSquad,
			Expression:     "true", // turned on by default
			AllowSelfServe: true,
		},
		{
			Name:         "lokiShardSplitting",
			Description:  "Use stream shards to split queries into smaller subqueries",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:           "lokiQuerySplitting",
			Description:    "Split large interval queries into subqueries with smaller time intervals",
			Stage:          FeatureStageGeneralAvailability,
			FrontendOnly:   true,
			Owner:          grafanaObservabilityLogsSquad,
			Expression:     "true", // turned on by default
			AllowSelfServe: true,
		},
		{
			Name:         "lokiQuerySplittingConfig",
			Description:  "Give users the option to configure split durations for Loki queries",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:        "individualCookiePreferences",
			Description: "Support overriding cookie preferences per user",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaBackendGroup,
		},
		{
			Name:           "influxdbBackendMigration",
			Description:    "Query InfluxDB InfluxQL without the proxy",
			Stage:          FeatureStageGeneralAvailability,
			FrontendOnly:   true,
			Owner:          grafanaPartnerPluginsSquad,
			Expression:     "true", // enabled by default
			AllowSelfServe: false,
		},
		{
			Name:        "influxqlStreamingParser",
			Description: "Enable streaming JSON parser for InfluxDB datasource InfluxQL query language",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaPartnerPluginsSquad,
		},
		{
			Name:         "influxdbRunQueriesInParallel",
			Description:  "Enables running InfluxDB Influxql queries in parallel",
			Stage:        FeatureStagePrivatePreview,
			FrontendOnly: false,
			Owner:        grafanaPartnerPluginsSquad,
		},
		{
			Name:         "prometheusRunQueriesInParallel",
			Description:  "Enables running Prometheus queries in parallel",
			Stage:        FeatureStagePrivatePreview,
			FrontendOnly: false,
			Owner:        grafanaOSSBigTent,
		},
		{
			Name:        "lokiLogsDataplane",
			Description: "Changes logs responses from Loki to be compliant with the dataplane specification.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaObservabilityLogsSquad,
		},
		{
			Name:           "dataplaneFrontendFallback",
			Description:    "Support dataplane contract field name change for transformations and field name matchers where the name is different",
			Stage:          FeatureStageGeneralAvailability,
			FrontendOnly:   true,
			Expression:     "true",
			Owner:          grafanaObservabilityMetricsSquad,
			AllowSelfServe: true,
		},
		{
			Name:        "disableSSEDataplane",
			Description: "Disables dataplane specific processing in server side expressions.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaObservabilityMetricsSquad,
		},
		{
			Name:        "alertStateHistoryLokiSecondary",
			Description: "Enable Grafana to write alert state history to an external Loki instance in addition to Grafana annotations.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAlertingSquad,
		},
		{
			Name:        "alertStateHistoryLokiPrimary",
			Description: "Enable a remote Loki instance as the primary source for state history reads.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAlertingSquad,
		},
		{
			Name:        "alertStateHistoryLokiOnly",
			Description: "Disable Grafana alerts from emitting annotations when a remote Loki instance is available.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAlertingSquad,
		},
		{
			Name:              "unifiedRequestLog",
			Description:       "Writes error logs to the request logger",
			Stage:             FeatureStageGeneralAvailability,
			Owner:             grafanaBackendGroup,
			Expression:        "true",
			HideFromAdminPage: true,
		},
		{
			Name:              "renderAuthJWT",
			Description:       "Uses JWT-based auth for rendering instead of relying on remote cache",
			Stage:             FeatureStagePublicPreview,
			Owner:             grafanaAsCodeSquad,
			HideFromAdminPage: true,
		},
		{
			Name:              "refactorVariablesTimeRange",
			Description:       "Refactor time range variables flow to reduce number of API calls made when query variables are chained",
			Stage:             FeatureStagePublicPreview,
			Owner:             grafanaDashboardsSquad,
			HideFromAdminPage: true, // Non-feature, used to test out a bug fix that impacts the performance of template variables.
		},
		{
			Name:         "faroDatasourceSelector",
			Description:  "Enable the data source selector within the Frontend Apps section of the Frontend Observability",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        appO11ySquad,
		},
		{
			Name:         "enableDatagridEditing",
			Description:  "Enables the edit functionality in the datagrid panel",
			FrontendOnly: true,
			Stage:        FeatureStagePublicPreview,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "extraThemes",
			Description:  "Enables extra themes",
			FrontendOnly: true,
			Stage:        FeatureStageExperimental,
			Owner:        grafanaFrontendPlatformSquad,
		},
		{
			Name:         "lokiPredefinedOperations",
			Description:  "Adds predefined query operations to Loki query editor",
			FrontendOnly: true,
			Stage:        FeatureStageExperimental,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:        "pluginsFrontendSandbox",
			Description: "Enables the plugins frontend sandbox",
			Stage:       FeatureStagePrivatePreview,
			Owner:       grafanaPluginsPlatformSquad,
		},
		{
			Name:         "frontendSandboxMonitorOnly",
			Description:  "Enables monitor only in the plugin frontend sandbox (if enabled)",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaPluginsPlatformSquad,
		},
		{
			Name:         "pluginsDetailsRightPanel",
			Description:  "Enables right panel for the plugins details page",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaPluginsPlatformSquad,
		},
		{
			Name:              "sqlDatasourceDatabaseSelection",
			Description:       "Enables previous SQL data source dataset dropdown behavior",
			FrontendOnly:      true,
			Stage:             FeatureStagePublicPreview,
			Owner:             grafanaDatavizSquad,
			HideFromAdminPage: true,
		},
		{
			Name:           "recordedQueriesMulti",
			Description:    "Enables writing multiple items from a single query within Recorded Queries",
			Stage:          FeatureStageGeneralAvailability,
			Expression:     "true",
			Owner:          grafanaObservabilityMetricsSquad,
			AllowSelfServe: false,
		},
		{
			Name:         "logsExploreTableVisualisation",
			Description:  "A table visualisation for logs in Explore",
			Stage:        FeatureStageGeneralAvailability,
			Expression:   "true", // enabled by default,
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:        "awsDatasourcesTempCredentials",
			Description: "Support temporary security credentials in AWS plugins for Grafana Cloud customers",
			Stage:       FeatureStageExperimental,
			Owner:       awsDatasourcesSquad,
		},
		{
			Name:           "transformationsRedesign",
			Description:    "Enables the transformations redesign",
			Stage:          FeatureStageGeneralAvailability,
			FrontendOnly:   true,
			Expression:     "true", // enabled by default
			Owner:          grafanaObservabilityMetricsSquad,
			AllowSelfServe: true,
		},
		{
			Name:         "mlExpressions",
			Description:  "Enable support for Machine Learning in server-side expressions",
			Stage:        FeatureStageExperimental,
			FrontendOnly: false,
			Owner:        grafanaAlertingSquad,
		},
		{
			Name:         "traceQLStreaming",
			Description:  "Enables response streaming of TraceQL queries of the Tempo data source",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaObservabilityTracesAndProfilingSquad,
			Expression:   "false",
		},
		{
			Name:         "metricsSummary",
			Description:  "Enables metrics summary queries in the Tempo data source",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityTracesAndProfilingSquad,
		},
		{
			Name:            "datasourceAPIServers",
			Description:     "Expose some datasources as apiservers.",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true, // changes the API routing
		},
		{
			Name:            "grafanaAPIServerWithExperimentalAPIs",
			Description:     "Register experimental APIs with the k8s API server, including all datasources",
			Stage:           FeatureStageExperimental,
			RequiresRestart: true,
			RequiresDevMode: true,
			Owner:           grafanaAppPlatformSquad,
		},
		{
			Name:            "provisioning",
			Description:     "Next generation provisioning... and git",
			Stage:           FeatureStageExperimental,
			RequiresRestart: true,
			Owner:           grafanaAppPlatformSquad,
		},
		{
			Name:            "grafanaAPIServerEnsureKubectlAccess",
			Description:     "Start an additional https handler and write kubectl options",
			Stage:           FeatureStageExperimental,
			RequiresDevMode: true,
			RequiresRestart: true,
			Owner:           grafanaAppPlatformSquad,
		},
		{
			Name:            "featureToggleAdminPage",
			Description:     "Enable admin page for managing feature toggles from the Grafana front-end. Grafana Cloud only.",
			Stage:           FeatureStageExperimental,
			FrontendOnly:    false,
			Owner:           grafanaOperatorExperienceSquad,
			RequiresRestart: true,
			HideFromDocs:    true,
		},
		{
			Name:        "awsAsyncQueryCaching",
			Description: "Enable caching for async queries for Redshift and Athena. Requires that the datasource has caching and async query support enabled",
			Stage:       FeatureStageGeneralAvailability,
			Expression:  "true", // enabled by default
			Owner:       awsDatasourcesSquad,
		},
		{
			Name:        "permissionsFilterRemoveSubquery",
			Description: "Alternative permission filter implementation that does not use subqueries for fetching the dashboard folder",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaBackendGroup,
		},
		{
			Name:            "configurableSchedulerTick",
			Description:     "Enable changing the scheduler base interval via configuration option unified_alerting.scheduler_tick_interval",
			Stage:           FeatureStageExperimental,
			FrontendOnly:    false,
			Owner:           grafanaAlertingSquad,
			RequiresRestart: true,
			HideFromDocs:    true,
		},
		{
			Name:            "alertingNoDataErrorExecution",
			Description:     "Changes how Alerting state manager handles execution of NoData/Error",
			Stage:           FeatureStageGeneralAvailability,
			FrontendOnly:    false,
			Owner:           grafanaAlertingSquad,
			RequiresRestart: true,
			Expression:      "true", // enabled by default
		},
		{
			Name:         "angularDeprecationUI",
			Description:  "Display Angular warnings in dashboards and panels",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaPluginsPlatformSquad,
			Expression:   "true", // Enabled by default
		},
		{
			Name:         "dashgpt",
			Description:  "Enable AI powered features in dashboards",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:         "aiGeneratedDashboardChanges",
			Description:  "Enable AI powered features for dashboards to auto-summary changes when saving",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
		},
		{
			Name:            "reportingRetries",
			Description:     "Enables rendering retries for the reporting feature",
			Stage:           FeatureStagePublicPreview,
			FrontendOnly:    false,
			Owner:           grafanaSharingSquad,
			RequiresRestart: true,
		},
		{
			Name:        "sseGroupByDatasource",
			Description: "Send query to the same datasource in a single request when using server side expressions. The `cloudWatchBatchQueries` feature toggle should be enabled if this used with CloudWatch.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaObservabilityMetricsSquad,
		},
		{
			Name:            "libraryPanelRBAC",
			Description:     "Enables RBAC support for library panels",
			Stage:           FeatureStageExperimental,
			FrontendOnly:    false,
			Owner:           grafanaDashboardsSquad,
			RequiresRestart: true,
		},
		{
			Name:         "lokiRunQueriesInParallel",
			Description:  "Enables running Loki queries in parallel",
			Stage:        FeatureStagePrivatePreview,
			FrontendOnly: false,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:         "wargamesTesting",
			Description:  "Placeholder feature flag for internal testing",
			Stage:        FeatureStageExperimental,
			FrontendOnly: false,
			Owner:        hostedGrafanaTeam,
		},
		{
			Name:              "alertingInsights",
			Description:       "Show the new alerting insights landing page",
			FrontendOnly:      true,
			Stage:             FeatureStageGeneralAvailability,
			Owner:             grafanaAlertingSquad,
			Expression:        "true", // enabled by default
			AllowSelfServe:    false,
			HideFromAdminPage: true, // This is moving away from being a feature toggle.
		},
		{
			Name:        "externalCorePlugins",
			Description: "Allow core plugins to be loaded as external",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaPluginsPlatformSquad,
		},
		{
			Name:         "pluginsAPIMetrics",
			Description:  "Sends metrics of public grafana packages usage by plugins",
			FrontendOnly: true,
			Stage:        FeatureStageExperimental,
			Owner:        grafanaPluginsPlatformSquad,
		},
		{
			Name:              "externalServiceAccounts",
			Description:       "Automatic service account and token setup for plugins",
			HideFromAdminPage: true,
			Stage:             FeatureStagePublicPreview,
			Owner:             identityAccessTeam,
		},
		{
			Name:         "panelMonitoring",
			Description:  "Enables panel monitoring through logs and measurements",
			Stage:        FeatureStageGeneralAvailability,
			Expression:   "true", // enabled by default
			Owner:        grafanaDatavizSquad,
			FrontendOnly: true,
		},
		{
			Name:              "enableNativeHTTPHistogram",
			Description:       "Enables native HTTP Histograms",
			Stage:             FeatureStageExperimental,
			FrontendOnly:      false,
			Owner:             grafanaBackendServicesSquad,
			HideFromAdminPage: true,
			AllowSelfServe:    false,
			RequiresRestart:   true,
		},
		{
			Name:              "disableClassicHTTPHistogram",
			Description:       "Disables classic HTTP Histogram (use with enableNativeHTTPHistogram)",
			Stage:             FeatureStageExperimental,
			FrontendOnly:      false,
			Owner:             grafanaBackendServicesSquad,
			HideFromAdminPage: true,
			AllowSelfServe:    false,
			RequiresRestart:   true,
		},
		{
			Name:         "formatString",
			Description:  "Enable format string transformer",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:            "kubernetesPlaylists",
			Description:     "Use the kubernetes API in the frontend for playlists, and route /api/playlist requests to k8s",
			Stage:           FeatureStageGeneralAvailability,
			Owner:           grafanaAppPlatformSquad,
			Expression:      "true",
			RequiresRestart: true, // changes the API routing
		},
		{
			Name:            "kubernetesSnapshots",
			Description:     "Routes snapshot requests from /api to the /apis endpoint",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true, // changes the API routing
		},
		{
			Name:         "kubernetesDashboards",
			Description:  "Use the kubernetes API in the frontend for dashboards",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaAppPlatformSquad,
			FrontendOnly: true,
		},
		{
			Name:        "kubernetesRestore",
			Description: "Allow restoring objects in k8s",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAppPlatformSquad,
		},
		{
			Name:        "kubernetesClientDashboardsFolders",
			Description: "Route the folder and dashboard service requests to k8s",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAppPlatformSquad,
		},
		{
			Name:            "datasourceQueryTypes",
			Description:     "Show query type endpoints in datasource API servers (currently hardcoded for testdata, expressions, and prometheus)",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true, // changes the API routing
		},
		{
			Name:            "queryService",
			Description:     "Register /apis/query.grafana.app/ -- will eventually replace /api/ds/query",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true, // Adds a route at startup
		},
		{
			Name:            "queryServiceRewrite",
			Description:     "Rewrite requests targeting /ds/query to the query service",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true, // changes the API routing
		},
		{
			Name:         "queryServiceFromUI",
			Description:  "Routes requests to the new query service",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaAppPlatformSquad,
			FrontendOnly: true, // and can change at startup
		},
		{
			Name:        "cloudWatchBatchQueries",
			Description: "Runs CloudWatch metrics queries as separate batches",
			Stage:       FeatureStagePublicPreview,
			Owner:       awsDatasourcesSquad,
		},
		{
			Name:            "recoveryThreshold",
			Description:     "Enables feature recovery threshold (aka hysteresis) for threshold server-side expression",
			Stage:           FeatureStageGeneralAvailability,
			FrontendOnly:    false,
			Owner:           grafanaAlertingSquad,
			RequiresRestart: true,
			Expression:      "true",
		},
		{
			Name:         "lokiStructuredMetadata",
			Description:  "Enables the loki data source to request structured metadata from the Loki server",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: false,
			Owner:        grafanaObservabilityLogsSquad,
			Expression:   "true",
		},
		{
			Name:         "cachingOptimizeSerializationMemoryUsage",
			Description:  "If enabled, the caching backend gradually serializes query responses for the cache, comparing against the configured `[caching]max_value_mb` value as it goes. This can can help prevent Grafana from running out of memory while attempting to cache very large query responses.",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaOperatorExperienceSquad,
			FrontendOnly: false,
		},
		{
			Name:         "prometheusCodeModeMetricNamesSearch",
			Description:  "Enables search for metric names in Code Mode, to improve performance when working with an enormous number of metric names",
			FrontendOnly: true,
			Stage:        FeatureStageExperimental,
			Owner:        grafanaOSSBigTent,
		},
		{
			Name:         "addFieldFromCalculationStatFunctions",
			Description:  "Add cumulative and window functions to the add field from calculation transformation",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:        "alertmanagerRemoteSecondary",
			Description: "Enable Grafana to sync configuration and state with a remote Alertmanager.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAlertingSquad,
		},
		{
			Name:        "alertmanagerRemotePrimary",
			Description: "Enable Grafana to have a remote Alertmanager instance as the primary Alertmanager.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAlertingSquad,
		},
		{
			Name:        "alertmanagerRemoteOnly",
			Description: "Disable the internal Alertmanager and only use the external one defined.",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAlertingSquad,
		},
		{
			Name:            "annotationPermissionUpdate",
			Description:     "Change the way annotation permissions work by scoping them to folders and dashboards.",
			Stage:           FeatureStageGeneralAvailability,
			RequiresDevMode: false,
			Expression:      "true", // enabled by default
			Owner:           identityAccessTeam,
		},
		{
			Name:         "extractFieldsNameDeduplication",
			Description:  "Make sure extracted field names are unique in the dataframe",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "dashboardSceneForViewers",
			Description:  "Enables dashboard rendering using Scenes for viewer roles",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:         "dashboardSceneSolo",
			Description:  "Enables rendering dashboards using scenes for solo panels",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:         "dashboardScene",
			Description:  "Enables dashboard rendering using scenes for all roles",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:         "dashboardNewLayouts",
			Description:  "Enables experimental new dashboard layouts",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
		},
		{
			Name:         "panelFilterVariable",
			Description:  "Enables use of the `systemPanelFilterVar` variable to filter panels in a dashboard",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaDashboardsSquad,
			HideFromDocs: true,
		},
		{
			Name:         "pdfTables",
			Description:  "Enables generating table data as PDF in reporting",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: false,
			Owner:        grafanaSharingSquad,
		},
		{
			Name:           "ssoSettingsApi",
			Description:    "Enables the SSO settings API and the OAuth configuration UIs in Grafana",
			Stage:          FeatureStageGeneralAvailability,
			Expression:     "true",
			AllowSelfServe: true,
			FrontendOnly:   false,
			Owner:          identityAccessTeam,
		},
		{
			Name:         "canvasPanelPanZoom",
			Description:  "Allow pan and zoom in canvas panel",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "logsInfiniteScrolling",
			Description:  "Enables infinite scrolling for the Logs panel in Explore and Dashboards",
			Stage:        FeatureStageGeneralAvailability,
			Expression:   "true",
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:         "exploreMetrics",
			Description:  "Enables the new Grafana Metrics Drilldown core app",
			Stage:        FeatureStageGeneralAvailability,
			Expression:   "true", // enabled by default
			FrontendOnly: true,
			Owner:        grafanaObservabilityMetricsSquad,
		},
		{
			Name:         "alertingSimplifiedRouting",
			Description:  "Enables users to easily configure alert notifications by specifying a contact point directly when editing or creating an alert rule",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: false,
			Owner:        grafanaAlertingSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:         "logRowsPopoverMenu",
			Description:  "Enable filtering menu displayed when text of a log line is selected",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Expression:   "true",
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:         "pluginsSkipHostEnvVars",
			Description:  "Disables passing host environment variable to plugin processes",
			Stage:        FeatureStageExperimental,
			FrontendOnly: false,
			Owner:        grafanaPluginsPlatformSquad,
		},
		{
			Name:         "tableSharedCrosshair",
			Description:  "Enables shared crosshair in table panel",
			FrontendOnly: true,
			Stage:        FeatureStageExperimental,
			Owner:        grafanaDatavizSquad,
		},
		{
			Name:         "regressionTransformation",
			Description:  "Enables regression analysis transformation",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
		},
		{
			// this is mainly used as a way to quickly disable query hints as a safeguard for our infrastructure
			Name:           "lokiQueryHints",
			Description:    "Enables query hints for Loki",
			Stage:          FeatureStageGeneralAvailability,
			FrontendOnly:   true,
			Expression:     "true",
			Owner:          grafanaObservabilityLogsSquad,
			AllowSelfServe: false,
		},
		{
			Name:              "kubernetesFeatureToggles",
			Description:       "Use the kubernetes API for feature toggle management in the frontend",
			Stage:             FeatureStageExperimental,
			FrontendOnly:      true,
			Owner:             grafanaOperatorExperienceSquad,
			AllowSelfServe:    false,
			HideFromAdminPage: true,
		},
		{
			Name:              "cloudRBACRoles",
			Description:       "Enabled grafana cloud specific RBAC roles",
			Stage:             FeatureStagePublicPreview,
			Owner:             identityAccessTeam,
			HideFromDocs:      true,
			AllowSelfServe:    true,
			HideFromAdminPage: true,
			RequiresRestart:   true,
		},
		{
			Name:           "alertingQueryOptimization",
			Description:    "Optimizes eligible queries in order to reduce load on datasources",
			Stage:          FeatureStageGeneralAvailability,
			Owner:          grafanaAlertingSquad,
			AllowSelfServe: false,
			Expression:     "false",
		},
		{
			Name:         "newFolderPicker",
			Description:  "Enables the nested folder picker without having nested folders enabled",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaFrontendPlatformSquad,
			FrontendOnly: true,
		},
		{
			Name:              "jitterAlertRulesWithinGroups",
			Description:       "Distributes alert rule evaluations more evenly over time, including spreading out rules within the same group",
			FrontendOnly:      false,
			Stage:             FeatureStagePublicPreview,
			Owner:             grafanaAlertingSquad,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: false,
			RequiresRestart:   true,
		},
		{
			Name:        "onPremToCloudMigrations",
			Description: "Enable the Grafana Migration Assistant, which helps you easily migrate on-prem resources, such as dashboards, folders, and data source configurations, to your Grafana Cloud stack.",
			Stage:       FeatureStagePublicPreview,
			Owner:       grafanaOperatorExperienceSquad,
			Expression:  "true",
		},
		{
			Name:         "alertingSaveStatePeriodic",
			Description:  "Writes the state periodically to the database, asynchronous to rule evaluation",
			Stage:        FeatureStagePrivatePreview,
			FrontendOnly: false,
			Owner:        grafanaAlertingSquad,
		},
		{
			Name:         "alertingSaveStateCompressed",
			Description:  "Enables the compressed protobuf-based alert state storage",
			Stage:        FeatureStagePublicPreview,
			FrontendOnly: false,
			Owner:        grafanaAlertingSquad,
			Expression:   "false",
		},
		{
			Name:              "scopeApi",
			Description:       "In-development feature flag for the scope api using the app platform.",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaAppPlatformSquad,
			HideFromAdminPage: true,
			Expression:        "false",
		},
		{
			Name:        "promQLScope",
			Description: "In-development feature that will allow injection of labels into prometheus queries.",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaOSSBigTent,
			Expression:  "true",
		},
		{
			Name:        "logQLScope",
			Description: "In-development feature that will allow injection of labels into loki queries.",
			Stage:       FeatureStagePrivatePreview,
			Owner:       grafanaObservabilityLogsSquad,
			Expression:  "false",
		},
		{
			Name:         "sqlExpressions",
			Description:  "Enables using SQL and DuckDB functions as Expressions.",
			Stage:        FeatureStageExperimental,
			FrontendOnly: false,
			Owner:        grafanaDatasourcesCoreServicesSquad,
		},
		{
			Name:         "nodeGraphDotLayout",
			Description:  "Changed the layout algorithm for the node graph",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityTracesAndProfilingSquad,
		},
		{
			Name:         "groupToNestedTableTransformation",
			Description:  "Enables the group to nested table transformation",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaDatavizSquad,
			Expression:   "true", // enabled by default,
		},
		{
			Name:        "newPDFRendering",
			Description: "New implementation for the dashboard-to-PDF rendering",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaSharingSquad,
			Expression:  "true", // enabled by default,
		},
		{
			Name:           "tlsMemcached",
			Description:    "Use TLS-enabled memcached in the enterprise caching feature",
			Stage:          FeatureStageGeneralAvailability,
			Owner:          grafanaOperatorExperienceSquad,
			Expression:     "true",
			AllowSelfServe: false, // the non-tls implementation is slated for removal
		},
		{
			Name:            "kubernetesAggregator",
			Description:     "Enable grafana's embedded kube-aggregator",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true,
		},
		{
			Name:            "expressionParser",
			Description:     "Enable new expression parser",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true,
		},
		{
			Name:              "groupByVariable",
			Description:       "Enable groupBy variable support in scenes dashboards",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaDashboardsSquad,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "scopeFilters",
			Description:       "Enables the use of scope filters in Grafana",
			FrontendOnly:      false,
			Stage:             FeatureStageExperimental,
			Owner:             grafanaDashboardsSquad,
			RequiresRestart:   false,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:           "ssoSettingsSAML",
			Description:    "Use the new SSO Settings API to configure the SAML connector",
			Stage:          FeatureStagePublicPreview,
			Owner:          identityAccessTeam,
			AllowSelfServe: true,
		},
		{
			Name:              "oauthRequireSubClaim",
			Description:       "Require that sub claims is present in oauth tokens.",
			Stage:             FeatureStageExperimental,
			Owner:             identityAccessTeam,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "newDashboardWithFiltersAndGroupBy",
			Description:       "Enables filters and group by variables on all new dashboards. Variables are added only if default data source supports filtering.",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaDashboardsSquad,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:           "cloudWatchNewLabelParsing",
			Description:    "Updates CloudWatch label parsing to be more accurate",
			Stage:          FeatureStageGeneralAvailability,
			Expression:     "true", // enabled by default
			Owner:          awsDatasourcesSquad,
			FrontendOnly:   false,
			AllowSelfServe: false,
		},
		{
			Name:        "accessActionSets",
			Description: "Introduces action sets for resource permissions. Also ensures that all folder editors and admins can create subfolders without needing any additional permissions.",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       identityAccessTeam,
			Expression:  "true", // enabled by default
		},
		{
			Name:            "disableNumericMetricsSortingInExpressions",
			Description:     "In server-side expressions, disable the sorting of numeric-kind metrics by their metric name or labels.",
			Stage:           FeatureStageExperimental,
			FrontendOnly:    false,
			Owner:           grafanaOSSBigTent,
			RequiresRestart: true,
		},
		{
			Name:              "grafanaManagedRecordingRules",
			Description:       "Enables Grafana-managed recording rules.",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaAlertingSquad,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:           "queryLibrary",
			Description:    "Enables Query Library feature in Explore",
			Stage:          FeatureStageExperimental,
			Owner:          grafanaFrontendPlatformSquad,
			FrontendOnly:   false,
			AllowSelfServe: false,
		},
		{
			Name:         "logsExploreTableDefaultVisualization",
			Description:  "Sets the logs table as default visualisation in logs explore",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaObservabilityLogsSquad,
			FrontendOnly: true,
		},
		{
			Name:         "newDashboardSharingComponent",
			Description:  "Enables the new sharing drawer design",
			Stage:        FeatureStageGeneralAvailability,
			Owner:        grafanaSharingSquad,
			FrontendOnly: true,
			Expression:   "true", // enabled by default
		},
		{
			Name:         "alertingListViewV2",
			Description:  "Enables the new alert list view design",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaAlertingSquad,
			FrontendOnly: true,
		},
		{
			Name:              "dashboardRestore",
			Description:       "Enables deleted dashboard restore feature",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromAdminPage: true,
			Expression:        "false", // enabled by default
		},
		{
			Name:              "alertingDisableSendAlertsExternal",
			Description:       "Disables the ability to send alerts to an external Alertmanager datasource.",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaAlertingSquad,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "preserveDashboardStateWhenNavigating",
			Description:       "Enables possibility to preserve dashboard variables and time range when navigating between dashboards",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaDashboardsSquad,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:         "alertingCentralAlertHistory",
			Description:  "Enables the new central alert history.",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaAlertingSquad,
			FrontendOnly: true,
		},
		{
			Name:        "pluginProxyPreserveTrailingSlash",
			Description: "Preserve plugin proxy trailing slash.",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaPluginsPlatformSquad,
			Expression:  "false", // disabled by default
		},
		{
			Name:        "azureMonitorPrometheusExemplars",
			Description: "Allows configuration of Azure Monitor as a data source that can provide Prometheus exemplars",
			Stage:       FeatureStagePublicPreview,
			Owner:       grafanaPartnerPluginsSquad,
		},
		{
			Name:        "pinNavItems",
			Description: "Enables pinning of nav items",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaFrontendPlatformSquad,
			Expression:  "true", // enabled by default
		},
		{
			Name:              "authZGRPCServer",
			Description:       "Enables the gRPC server for authorization",
			Stage:             FeatureStageExperimental,
			Owner:             identityAccessTeam,
			HideFromAdminPage: true,
			HideFromDocs:      true,
		},
		{
			Name:            "ssoSettingsLDAP",
			Description:     "Use the new SSO Settings API to configure LDAP",
			Stage:           FeatureStagePublicPreview,
			Owner:           identityAccessTeam,
			AllowSelfServe:  true,
			RequiresRestart: true,
		},
		{
			Name:        "failWrongDSUID",
			Description: "Throws an error if a datasource has an invalid UIDs",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaPluginsPlatformSquad,
		},
		{
			Name:              "zanzana",
			Description:       "Use openFGA as authorization engine.",
			Stage:             FeatureStageExperimental,
			Owner:             identityAccessTeam,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "reloadDashboardsOnParamsChange",
			Description:       "Enables reload of dashboards on scopes, time range and variables changes",
			FrontendOnly:      false,
			Stage:             FeatureStageExperimental,
			Owner:             grafanaDashboardsSquad,
			RequiresRestart:   false,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "enableScopesInMetricsExplore",
			Description:       "Enables the scopes usage in Metrics Explore",
			FrontendOnly:      false,
			Stage:             FeatureStageExperimental,
			Owner:             grafanaDashboardsSquad,
			RequiresRestart:   false,
			AllowSelfServe:    false,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:            "alertingApiServer",
			Description:     "Register Alerting APIs with the K8s API server",
			Stage:           FeatureStageGeneralAvailability,
			Owner:           grafanaAlertingSquad,
			RequiresRestart: true,
			Expression:      "true",
		},
		{
			Name:        "cloudWatchRoundUpEndTime",
			Description: "Round up end time for metric queries to the next minute to avoid missing data",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       awsDatasourcesSquad,
			Expression:  "true",
		},
		{
			Name:        "prometheusAzureOverrideAudience",
			Description: "Deprecated. Allow override default AAD audience for Azure Prometheus endpoint. Enabled by default. This feature should no longer be used and will be removed in the future.",
			Stage:       FeatureStageDeprecated,
			Owner:       grafanaPartnerPluginsSquad,
			Expression:  "true", // Enabled by default for now
		}, {
			Name:         "alertingFilterV2",
			Description:  "Enable the new alerting search experience",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaAlertingSquad,
			HideFromDocs: true,
		},
		{
			Name:            "dataplaneAggregator",
			Description:     "Enable grafana dataplane aggregator",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true,
		},
		{
			Name:        "newFiltersUI",
			Description: "Enables new combobox style UI for the Ad hoc filters variable in scenes architecture",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaDashboardsSquad,
			Expression:  "true", // enabled by default
		},
		{
			Name:        "lokiSendDashboardPanelNames",
			Description: "Send dashboard and panel names to Loki when querying",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaObservabilityLogsSquad,
		},
		{
			Name:         "alertingPrometheusRulesPrimary",
			Description:  "Uses Prometheus rules as the primary source of truth for ruler-enabled data sources",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaAlertingSquad,
			FrontendOnly: true,
		},
		{
			Name:         "exploreLogsShardSplitting",
			Description:  "Used in Logs Drilldown to split queries into multiple queries based on the number of shards",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:         "exploreLogsAggregatedMetrics",
			Description:  "Used in Logs Drilldown to query by aggregated metrics",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:         "exploreLogsLimitedTimeRange",
			Description:  "Used in Logs Drilldown to limit the time range",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:         "homeSetupGuide",
			Description:  "Used in Home for users who want to return to the onboarding flow or quickly find popular config pages",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        growthAndOnboarding,
		},
		{
			Name:              "appPlatformGrpcClientAuth",
			Description:       "Enables the gRPC client to authenticate with the App Platform by using ID & access tokens",
			Stage:             FeatureStageExperimental,
			Owner:             identityAccessTeam,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:        "appSidecar",
			Description: "Enable the app sidecar feature that allows rendering 2 apps at the same time",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaFrontendPlatformSquad,
		},
		{
			Name:         "groupAttributeSync",
			Description:  "Enable the groupsync extension for managing Group Attribute Sync feature",
			Stage:        FeatureStagePrivatePreview,
			Owner:        identityAccessTeam,
			HideFromDocs: true,
		},
		{
			Name:         "alertingQueryAndExpressionsStepMode",
			Description:  "Enables step mode for alerting queries and expressions",
			Stage:        FeatureStageGeneralAvailability,
			Owner:        grafanaAlertingSquad,
			FrontendOnly: true,
			Expression:   "true",
		},
		{
			Name:           "improvedExternalSessionHandling",
			Description:    "Enables improved support for OAuth external sessions. After enabling this feature, users might need to re-authenticate themselves.",
			Stage:          FeatureStagePublicPreview,
			Owner:          identityAccessTeam,
			AllowSelfServe: true,
		},
		{
			Name:        "useSessionStorageForRedirection",
			Description: "Use session storage for handling the redirection after login",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       identityAccessTeam,
			Expression:  "true",
		},
		{
			Name:        "rolePickerDrawer",
			Description: "Enables the new role picker drawer design",
			Stage:       FeatureStageExperimental,
			Owner:       identityAccessTeam,
		},
		{
			Name:              "unifiedStorageSearch",
			Description:       "Enable unified storage search",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "unifiedStorageSearchSprinkles",
			Description:       "Enable sprinkles on unified storage search",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "unifiedStorageSearchPermissionFiltering",
			Description:       "Enable permission filtering on unified storage search",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:              "managedDualWriter",
			Description:       "Pick the dual write mode from database configs",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:        "pluginsSriChecks",
			Description: "Enables SRI checks for plugin assets",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaPluginsPlatformSquad,
		},
		{
			Name:        "unifiedStorageBigObjectsSupport",
			Description: "Enables to save big objects in blob storage",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaSearchAndStorageSquad,
		},
		{
			Name:        "timeRangeProvider",
			Description: "Enables time pickers sync",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaFrontendPlatformSquad,
		},
		{
			Name:        "prometheusUsesCombobox",
			Description: "Use new combobox component for Prometheus query editor",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaOSSBigTent,
		},
		{
			Name:        "userStorageAPI",
			Description: "Enables the user storage API",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaPluginsPlatformSquad,
			Expression:  "true", // enabled by default
		},
		{
			Name:        "azureMonitorDisableLogLimit",
			Description: "Disables the log limit restriction for Azure Monitor when true. The limit is enabled by default.",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaPartnerPluginsSquad,
			Expression:  "false",
		},
		{
			Name:        "preinstallAutoUpdate",
			Description: "Enables automatic updates for pre-installed plugins",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaPluginsPlatformSquad,
			Expression:  "true", // enabled by default
		},
		{
			Name:            "playlistsReconciler",
			Description:     "Enables experimental reconciler for playlists",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaAppPlatformSquad,
			RequiresRestart: true,
		},
		{
			Name:              "passwordlessMagicLinkAuthentication",
			Description:       "Enable passwordless login via magic link authentication",
			Stage:             FeatureStageExperimental,
			Owner:             identityAccessTeam,
			HideFromDocs:      true,
			HideFromAdminPage: true,
			AllowSelfServe:    false,
		},
		{
			Name:         "exploreMetricsRelatedLogs",
			Description:  "Display Related Logs in Grafana Metrics Drilldown",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaObservabilityMetricsSquad,
			FrontendOnly: true,
			HideFromDocs: false,
		},
		{
			Name:         "prometheusSpecialCharsInLabelValues",
			Description:  "Adds support for quotes and special characters in label values for Prometheus queries",
			FrontendOnly: true,
			Stage:        FeatureStageExperimental,
			Owner:        grafanaOSSBigTent,
		},
		{
			Name:            "enableExtensionsAdminPage",
			Description:     "Enables the extension admin page regardless of development mode",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaPluginsPlatformSquad,
			RequiresRestart: true,
		},
		{
			Name:        "enableSCIM",
			Description: "Enables SCIM support for user and group management",
			Stage:       FeatureStageExperimental,
			Owner:       identityAccessTeam,
		},
		{
			Name:         "crashDetection",
			Description:  "Enables browser crash detection reporting to Faro.",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaObservabilityTracesAndProfilingSquad,
			FrontendOnly: true,
		},
		{
			Name:        "jaegerBackendMigration",
			Description: "Enables querying the Jaeger data source without the proxy",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaOSSBigTent,
		},
		{
			Name:        "reportingUseRawTimeRange",
			Description: "Uses the original report or dashboard time range instead of making an absolute transformation",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaSharingSquad,
			Expression:  "true", // enabled by default
		},
		{
			Name:         "alertingUIOptimizeReducer",
			Description:  "Enables removing the reducer from the alerting UI when creating a new alert rule and using instant query",
			Stage:        FeatureStageGeneralAvailability,
			FrontendOnly: true,
			Owner:        grafanaAlertingSquad,
			Expression:   "true", // enabled by default
		},
		{
			Name:        "azureMonitorEnableUserAuth",
			Description: "Enables user auth for Azure Monitor datasource only",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaPartnerPluginsSquad,
			Expression:  "true", // Enabled by default for now
		},
		{
			Name:         "alertingNotificationsStepMode",
			Description:  "Enables simplified step mode in the notifications section",
			Stage:        FeatureStageGeneralAvailability,
			Owner:        grafanaAlertingSquad,
			FrontendOnly: true,
			Expression:   "true",
		},
		{
			Name:            "useV2DashboardsAPI",
			Description:     "Use the v2 kubernetes API in the frontend for dashboards",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaDashboardsSquad,
			RequiresRestart: true, // changes the API routing
		},
		{
			Name:         "feedbackButton",
			Description:  "Enables a button to send feedback from the Grafana UI",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaOperatorExperienceSquad,
			HideFromDocs: true,
		},
		{
			Name:              "unifiedStorageSearchUI",
			Description:       "Enable unified storage search UI",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSearchAndStorageSquad,
			HideFromDocs:      true,
			HideFromAdminPage: true,
		},
		{
			Name:        "elasticsearchCrossClusterSearch",
			Description: "Enables cross cluster search in the Elasticsearch datasource",
			Stage:       FeatureStagePublicPreview,
			Owner:       awsDatasourcesSquad,
		},
		{
			Name:         "unifiedHistory",
			Description:  "Displays the navigation history so the user can navigate back to previous pages",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaFrontendPlatformSquad,
			FrontendOnly: true,
		},
		{
			Name:        "lokiLabelNamesQueryApi",
			Description: "Defaults to using the Loki `/labels` API instead of `/series`",
			Stage:       FeatureStageGeneralAvailability,
			Owner:       grafanaObservabilityLogsSquad,
			Expression:  "true",
		},
		{
			Name:        "investigationsBackend",
			Description: "Enable the investigations backend API",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaAppPlatformSquad,
			Expression:  "false",
		},
		{
			Name:        "k8SFolderCounts",
			Description: "Enable folder's api server counts",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaSearchAndStorageSquad,
			Expression:  "false",
		},
		{
			Name:        "k8SFolderMove",
			Description: "Enable folder's api server move",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaSearchAndStorageSquad,
			Expression:  "false",
		},
		{
			Name:           "improvedExternalSessionHandlingSAML",
			Description:    "Enables improved support for SAML external sessions. Ensure the NameID format is correctly configured in Grafana for SAML Single Logout to function properly.",
			Stage:          FeatureStagePublicPreview,
			Owner:          identityAccessTeam,
			AllowSelfServe: true,
		},
		{
			Name:           "teamHttpHeadersMimir",
			Description:    "Enables LBAC for datasources for Mimir to apply LBAC filtering of metrics to the client requests for users in teams",
			Stage:          FeatureStageExperimental,
			FrontendOnly:   false,
			AllowSelfServe: false,
			Owner:          identityAccessTeam,
		},
		{
			Name:         "ABTestFeatureToggleA",
			Description:  "Test feature toggle to see how cohorts could be set up AB testing",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaSharingSquad,
			Expression:   "false",
			HideFromDocs: true,
		},
		{
			Name:         "templateVariablesUsesCombobox",
			Description:  "Use new combobox component for template variables",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaFrontendPlatformSquad,
			FrontendOnly: true,
		},
		{
			Name:         "ABTestFeatureToggleB",
			Description:  "Test feature toggle to see how cohorts could be set up AB testing",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaSharingSquad,
			Expression:   "false",
			HideFromDocs: true,
		},
		{
			Name:        "grafanaAdvisor",
			Description: "Enables Advisor app",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaPluginsPlatformSquad,
		},
		{
			Name:        "elasticsearchImprovedParsing",
			Description: "Enables less memory intensive Elasticsearch result parsing",
			Stage:       FeatureStageExperimental,
			Owner:       awsDatasourcesSquad,
		},
		{
			Name:            "exploreMetricsUseExternalAppPlugin",
			Description:     "Use the externalized Metrics Drilldown (formerly known as Explore Metrics) app plugin",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaObservabilityMetricsSquad,
			FrontendOnly:    true,
			RequiresRestart: true,
			HideFromDocs:    true,
		},
		{
			Name:            "datasourceConnectionsTab",
			Description:     "Shows defined connections for a data source in the plugins detail page",
			Stage:           FeatureStageExperimental,
			Owner:           grafanaPluginsPlatformSquad,
			RequiresDevMode: false,
			FrontendOnly:    true,
		},
		{
			Name:              "fetchRulesUsingPost",
			Description:       "Use a POST request to list rules by passing down the namespaces user has access to",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaAlertingSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
		},
		{
			Name:              "alertingConversionAPI",
			Description:       "Enable the alerting conversion API",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaAlertingSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
		},
		{
			Name:              "alertingAlertmanagerExtraDedupStage",
			Description:       "enables extra deduplication stage in alertmanager that checks that timestamps of the pipeline and the current state are matching",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaAlertingSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
			RequiresRestart:   true,
		},
		{
			Name:              "alertingAlertmanagerExtraDedupStageStopPipeline",
			Description:       "works together with alertingAlertmanagerExtraDedupStage, if enabled, it will stop the pipeline if the timestamps are not matching. Otherwise, it will emit a warning",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaAlertingSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
			RequiresRestart:   true,
		},
		{
			Name:         "newLogsPanel",
			Description:  "Enables the new logs panel in Explore",
			Stage:        FeatureStageExperimental,
			FrontendOnly: true,
			Owner:        grafanaObservabilityLogsSquad,
		},
		{
			Name:              "grafanaconThemes",
			Description:       "Enables the temporary themes for GrafanaCon",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaFrontendPlatformSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
			RequiresRestart:   true,
		},
		{
			Name:        "pluginsCDNSyncLoader",
			Description: "Load plugins from CDN synchronously",
			Stage:       FeatureStageExperimental,
			Owner:       grafanaPluginsPlatformSquad,
		},
		{
			Name:         "alertingJiraIntegration",
			Description:  "Enables the new Jira integration for contact points in cloud alert managers.",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaAlertingSquad,
			FrontendOnly: true,
			HideFromDocs: true,
		},
		{
			Name:              "alertingRuleVersionHistoryRestore",
			Description:       "Enables the alert rule version history restore feature",
			FrontendOnly:      true,
			Stage:             FeatureStageGeneralAvailability,
			Owner:             grafanaAlertingSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
			Expression:        "true", // enabled by default
		},
		{
			Name:              "newShareReportDrawer",
			Description:       "Enables the report creation drawer in a dashboard",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSharingSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
		},
		{
			Name:              "rendererDisableAppPluginsPreload",
			Description:       "Disable pre-loading app plugins when the request is coming from the renderer",
			Stage:             FeatureStageExperimental,
			Owner:             grafanaSharingSquad,
			HideFromAdminPage: true,
			HideFromDocs:      true,
			FrontendOnly:      true,
		},
		{
			Name:         "assetSriChecks",
			Description:  "Enables SRI checks for Grafana JavaScript assets",
			Stage:        FeatureStageExperimental,
			Owner:        grafanaFrontendOpsWG,
			FrontendOnly: true,
		},
	}
)

//go:embed toggles_gen.json
var f embed.FS

// Get the cached feature list (exposed as a k8s resource)
func GetEmbeddedFeatureList() (featuretoggle.FeatureList, error) {
	features := featuretoggle.FeatureList{}
	body, err := f.ReadFile("toggles_gen.json")
	if err == nil {
		err = json.Unmarshal(body, &features)
	}
	return features, err
}
