flowbits
v1.0.0
Published
Feature flags, percentage rollouts, A/B variants, and targeting rules for Node.js
Maintainers
Readme
flowbits
Feature flags for Node.js: on/off toggles, percentage rollouts, A/B variants, user overrides, and targeting rules.
Zero runtime dependencies. Node 18+.
Package name: flowbits (unscoped — install with npm install flowbits)
Install
npm install flowbitsQuick start
import { createClient } from "flowbits";
const flags = createClient({
flags: {
darkMode: true,
checkoutV2: {
enabled: true,
percentage: 25,
variants: { control: 50, new: 50 },
rules: [
{
when: { field: "plan", op: "eq", value: "pro" },
percentage: 100,
variant: "new",
},
],
overrides: {
"user_ada": true,
},
},
},
});
flags.isEnabled("darkMode"); // true
flags.evaluate("checkoutV2", { id: "user_ada", plan: "free" });
// { key: "checkoutV2", enabled: true, variant: null, reason: "override" }
flags.variant("checkoutV2", { id: "user_42", plan: "pro" });
// "new"Flag shapes
// Simple on/off
{ betaBanner: true }
// Rollout + variants + rules
{
searchRewrite: {
enabled: true,
percentage: 10, // % of users who get the flag
defaultVariant: "control",
variants: { control: 1, treatment: 1 },
rules: [
{
when: { all: [
{ field: "country", op: "in", value: ["US", "CA"] },
{ field: "age", op: "gte", value: 18 },
]},
percentage: 100,
variant: "treatment",
},
],
overrides: {
"staff_1": { enabled: true, variant: "treatment" },
},
},
}Targeting operators
eq neq gt gte lt lte in nin contains startsWith endsWith exists regex between
Combine with all, any, and not.
API
| Method | Purpose |
| --- | --- |
| createClient(config) / new Flowbits(config) | Create a client |
| isEnabled(key, context) | Boolean check |
| variant(key, context, fallback?) | A/B variant name |
| evaluate(key, context) | Full result + reason |
| all(context) | Evaluate every flag |
| define / remove / load / merge | Manage flags at runtime |
| bucket / inRollout / assignVariant | Low-level hashing helpers |
Subject id is taken from context.id, context.userId, context.key, or context.subject.
License
MIT
