Creature Features
Dead simple feature flags
Creature-Features allows feature flags based on json configuration files and supports true/false, custom rules, and weighted checks.
Install
npm install creature-features --save
Configure
directory and files
- 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
Example File
{
"FeatureOne": true,
"FeatureTwo": true,
"FeatureThree": false
}
Usage
const features = require('creature-features')();
if (features.FeatureOne) {
} else {
}
Rules Based
{
"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')();
if (features.RuleForEmailFeature(user.email)) {
} else {
}
if (features.RuleForEmailAndRoleFeature({ email: user.email, role: user.account.role })) {
} else {
}
Weight Based
{
"FeatureOne": true,
"FeatureTwo": true,
"PercentBasedFiftyFifty": {
"range": [50, 50]
},
"PercentBasedOneThird": {
"range": [33, 67]
},
}
const features = require('creature-features')();
if (features.PercentBasedFiftyFifty) {
}
if (features.PercentBasedOneThird) {
}
In Webpack
const features = require('creature-features')();
const webpack = require('webpack');
const featureFlags = new webpack.DefinePlugin({
FEATURES: features
});
module.exports = {
plugins: [featureFlags],
...
if (FEATURES.FeatureOne) { }
Why?
Advanced Usage
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'});