@suaveplan/feature-flags - Provider-agnostic feature flag evaluation with typed flag values, strategy chains, and deterministic bucketing
Summary
Provider-agnostic feature flag evaluation engine for controlling feature rollout without code deploys. The package ships a FlagManager high-level façade, a FlagRegistry backed by any pluggable FlagProvider, and an Evaluator strategy chain. Five composable strategies cover the full rollout playbook: PercentageStrategy (deterministic FNV-1a bucketing for consistent user cohorts), UserTargetStrategy (allowlist), AttributeStrategy (10 comparison operators for segment targeting), ScheduleStrategy (time-window gating), and CompositeStrategy (AND/OR combinator). Built-in providers include MemoryProvider and JsonProvider for file-based flag definitions. Evaluation priority is: flag disabled → in-process override → first matching strategy → default value. This package is for runtime flag evaluation only — it is not a flag management UI or remote config service.
Documentation tree
- [evaluator](./src/core/evaluator/evaluator.md) — _(no submodules)_- [manager](./src/core/manager/flag-manager.md) — _(no submodules)_- [flag-manager](./src/core/manager/flag-manager.md) — _(no submodules)_- [registry](./src/core/registry/flag-registry.md) — _(no submodules)_- [flag-registry](./src/core/registry/flag-registry.md) — _(no submodules)_- [errors](./src/errors/feature-flags-error.md) — _(no submodules)_- [feature-flags-error](./src/errors/feature-flags-error.md) — _(no submodules)_- [json](./src/providers/json/json.md) — _(no submodules)_- [json](./src/providers/json/json.md) — _(no submodules)_- [memory](./src/providers/memory/memory.md) — _(no submodules)_- [memory](./src/providers/memory/memory.md) — _(no submodules)_- [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_- [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_- [composite](./src/strategies/composite/composite.md) — _(no submodules)_- [composite](./src/strategies/composite/composite.md) — _(no submodules)_- [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_- [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_- [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_- [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_- [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_- [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_- [types](./src/types/common.md) — _(no submodules)_- [common](./src/types/common.md) — _(no submodules)_- [utils](./src/utils/hash.md) — _(no submodules)_- [hash](./src/utils/hash.md) — _(no submodules)_- [evaluator](./src/core/evaluator/evaluator.md) — _(no submodules)_- [manager](./src/core/manager/flag-manager.md) — _(no submodules)_- [flag-manager](./src/core/manager/flag-manager.md) — _(no submodules)_- [registry](./src/core/registry/flag-registry.md) — _(no submodules)_- [flag-registry](./src/core/registry/flag-registry.md) — _(no submodules)_- [errors](./src/errors/feature-flags-error.md) — _(no submodules)_- [feature-flags-error](./src/errors/feature-flags-error.md) — _(no submodules)_- [json](./src/providers/json/json.md) — _(no submodules)_- [json](./src/providers/json/json.md) — _(no submodules)_- [memory](./src/providers/memory/memory.md) — _(no submodules)_- [memory](./src/providers/memory/memory.md) — _(no submodules)_- [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_- [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_- [composite](./src/strategies/composite/composite.md) — _(no submodules)_- [composite](./src/strategies/composite/composite.md) — _(no submodules)_- [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_- [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_- [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_- [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_- [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_- [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_- [types](./src/types/common.md) — _(no submodules)_- [common](./src/types/common.md) — _(no submodules)_- [utils](./src/utils/hash.md) — _(no submodules)_- [hash](./src/utils/hash.md) — _(no submodules)_- [evaluator](./src/core/evaluator/evaluator.md) — _(no submodules)_- [manager](./src/core/manager/flag-manager.md) — _(no submodules)_- [flag-manager](./src/core/manager/flag-manager.md) — _(no submodules)_- [registry](./src/core/registry/flag-registry.md) — _(no submodules)_- [flag-registry](./src/core/registry/flag-registry.md) — _(no submodules)_- [errors](./src/errors/feature-flags-error.md) — _(no submodules)_- [feature-flags-error](./src/errors/feature-flags-error.md) — _(no submodules)_- [json](./src/providers/json/json.md) — _(no submodules)_- [json](./src/providers/json/json.md) — _(no submodules)_- [memory](./src/providers/memory/memory.md) — _(no submodules)_- [memory](./src/providers/memory/memory.md) — _(no submodules)_- [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_- [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_- [composite](./src/strategies/composite/composite.md) — _(no submodules)_- [composite](./src/strategies/composite/composite.md) — _(no submodules)_- [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_- [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_- [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_- [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_- [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_- [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_- [types](./src/types/common.md) — _(no submodules)_- [common](./src/types/common.md) — _(no submodules)_- [utils](./src/utils/hash.md) — _(no submodules)_- [hash](./src/utils/hash.md) — _(no submodules)_- [evaluator](./src/core/evaluator/evaluator.md) — _(no submodules)_- [manager](./src/core/manager/flag-manager.md) — _(no submodules)_ - [flag-manager](./src/core/manager/flag-manager.md) — _(no submodules)_- [registry](./src/core/registry/flag-registry.md) — _(no submodules)_ - [flag-registry](./src/core/registry/flag-registry.md) — _(no submodules)_- [errors](./src/errors/feature-flags-error.md) — _(no submodules)_ - [feature-flags-error](./src/errors/feature-flags-error.md) — _(no submodules)_- [json](./src/providers/json/json.md) — _(no submodules)_ - [json](./src/providers/json/json.md) — _(no submodules)_- [memory](./src/providers/memory/memory.md) — _(no submodules)_ - [memory](./src/providers/memory/memory.md) — _(no submodules)_- [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_ - [attribute](./src/strategies/attribute/attribute.md) — _(no submodules)_- [composite](./src/strategies/composite/composite.md) — _(no submodules)_ - [composite](./src/strategies/composite/composite.md) — _(no submodules)_- [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_ - [percentage](./src/strategies/percentage/percentage.md) — _(no submodules)_- [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_ - [schedule](./src/strategies/schedule/schedule.md) — _(no submodules)_- [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_ - [user-target](./src/strategies/user-target/user-target.md) — _(no submodules)_- [types](./src/types/common.md) — _(no submodules)_ - [common](./src/types/common.md) — _(no submodules)_- [utils](./src/utils/hash.md) — _(no submodules)_ - [hash](./src/utils/hash.md) — _(no submodules)_
Overview
@suaveplan/feature-flags provides a complete, enterprise-grade feature flag system with:
FlagManager — high-level façade for flag access (isEnabled, getString, etc.)
FlagRegistry — typed registry backed by a pluggable FlagProvider
Evaluator — strategy chain engine with OTel metrics
- Strategies —
PercentageStrategy, UserTargetStrategy, AttributeStrategy, ScheduleStrategy, CompositeStrategy
- Providers —
MemoryProvider, JsonProvider
- Deterministic bucketing — FNV-1a 32-bit hash for stable percentage rollouts
Installation
Quick Start
Module Map
Evaluation Priority
flag.enabled === false → DISABLED (default value returned)
- In-process override present →
OVERRIDE
- First matching strategy →
STRATEGY
- No match →
DEFAULT