npm version Build Status Coverage Status
Creature-Features allows feature flags based on json configuration files and supports true/false, custom rules, and weighted checks.
npm install creature-features --save
- features
-- default.json (default settings)
-- development.json (settings for development environment)
-- development.{named}.json (settings for individual development environment)
-- test.json (settings for test)
-- production.json (settigns for production)
-- {any other environment}.json
{
"FeatureOne": true,
"FeatureTwo": true,
"FeatureThree": false
}const features = require('creature-features')(); // Default behavior if (features.FeatureOne) { // do something new } else { // do the old thing }
{
"FeatureOne": true,
"FeatureTwo": true,
"RuleForEmailFeature": {
"parameters": "email",
"check": "email.indexOf('test') > -1"
},
"RuleForEmailAndRoleFeature": {
"parameters": "email,role",
"check": "email.indexOf('test') > -1 && role ==='admin'"
}
}const features = require('creature-features')(); // Default behavior if (features.RuleForEmailFeature(user.email)) { // do something new } else { // do the old thing } if (features.RuleForEmailAndRoleFeature({ email: user.email, role: user.account.role })) { // do something new } else { // do the old thing }
{
"FeatureOne": true,
"FeatureTwo": true,
"PercentBasedFiftyFifty": {
"range": [50, 50]
},
"PercentBasedOneThird": {
"range": [33, 67]
},
}const features = require('creature-features')(); // Roughly 50% of the the time this will be true if (features.PercentBasedFiftyFifty) { // do something new } // Roughly 33% of the the time this will be true if (features.PercentBasedOneThird) { // do something new }
const features = require('creature-features')(); const webpack = require('webpack'); const featureFlags = new webpack.DefinePlugin({ FEATURES: features }); module.exports = { plugins: [featureFlags], ... // in a ui file if (FEATURES.FeatureOne) { }
const creature = require('creature-features'); const prodFeatures = creature('production'); const locationFeatures = creature({location: './my-location/for-features'}); const bothFeatures = creature({location: './my-location/for-features', env: 'staging'});