mirror of https://github.com/grafana/grafana.git
2.4 KiB
2.4 KiB
Feature toggle guide
This guide helps you to add your feature behind a feature flag, code that lets you enable or disable a feature without redeploying Grafana.
Steps to adding a feature toggle
- Define the feature toggle in registry.go. To see what each feature stage means, look at the related comments. If you are a community member, use the CODEOWNERS file to determine which team owns the package you are updating.
- Run the Go tests mentioned at the top of this file. This generates all the additional files needed:
toggles_gen
for the backend,grafana-data
for the frontend, and docs. To run the test, runmake gen-feature-toggles
.
How to use the toggle in your code
Once your feature toggle is defined, you can then wrap your feature around a check if the feature flag is enabled on that Grafana instance.
Examples:
- Backend: Use the
IsEnabled
function and pass in your feature toggle.
Frontend
Use the new OpenFeature-based feature flag client for all new feature flags. There are some differences compared to the legacy config.featureToggles
system:
- Feature flag initialisation is async, but will be finished by the time the UI is rendered. This means you cannot get the value of a feature flag at the 'top level' of a module/file
- Call
evaluateBooleanFlag("flagName")
from@grafana/runtime/internal
instead to get the value of a feature flag - Feature flag values may change over the lifetime of the session. Do not store the value in a variable that is used for longer than a single render - always call
evaluateBooleanFlag
lazily when you use the value.
e.g.
import { evaluateBooleanFlag } from '@grafana/runtime/internal';
// BAD - Don't do this. The feature toggle will not evaluate correctly
const isEnabled = evaluateBooleanFlag('newPreferences', false);
function makeAPICall() {
// GOOD - The feature toggle should be called after app initialisation
if (evaluateBooleanFlag('newPreferences', false)) {
// do new things
}
}
Enabling toggles in development
Add the feature toggle to the feature_toggle section in your custom.ini, for example:
[feature_toggles]
localeFormatPreference=true