A babel transform for managing feature flags

Downloads in past


0.3.17 years ago9 years agoMinified + gzip package size for babel-plugin-feature-flags in KB


Build Status
This plugin is for Babel 6. If you need to support Babel 5 use the 0.2.x releases.
A babel plugin that implements feature flags for enabling and disabling features. This plugin is intended to be followed by a dead code elimination pass (Uglify, babel-plugin-dead-code-elimination, etc.) to remove any unreachable code.
Feature flags are implemented by looking for call expressions like isEnabled('my-feature') and checking if the feature is enabled/disabled/disabled in a feature map that is passed through the plugin options. If the feature is known to be enabled or disabled then the call expression is replace with a boolean literal (true or false respectively). If the feature is dynamic, than the call expression is left alone.


Given the .babelrc
  "plugins": [["feature-flags", {
    "import": {
        "module": "my-features"
    "features": {
        "new-feature": "disabled"

the JavaScript file
import isEnabled from 'my-features';

if (isEnabled('new-feature')) {
  // code

will be transformed to
import isEnabled from 'my-features';

if (false) {
  // code


Here are the options that you can pass to the babel plugin.
  • options.import.module String: The name of the module that the feature function is imported from.
  • String (Optional): The name of the export that the feature function is imported from. Defaults to "default".
  • options.features Map(String -> 'enabled' | 'disabled' | 'dynamic'): An object whose keys are the names of features and whose values determine whether the feature is enabled/disabled/dynamic.