Shared Experiments
Feature flagging SDK wrapping OpenFeature for the Substrate project.
For detailed usage documentation, see the Shared Experiments documentation on the docs site.
Contributing
Prerequisites
- Node.js 20+ and Yarn
- Understanding of OpenFeature concepts
- Familiarity with feature flags and experimentation
Commands
# Build the package
nx build shared-experiments
# Run tests
nx test shared-experiments
# Lint the package
nx lint shared-experiments
Project Structure
packages/shared-experiments/
├── src/
│ ├── lib/
│ │ ├── experiments.ts # Core feature-flag helpers
│ │ ├── env-provider.ts # Environment variable provider
│ │ └── unleash-provider.ts # Unleash provider
│ └── index.ts # Package exports
├── docs/ # Documentation (built to docs site)
└── README.md # This file
Key Exports
The package provides simple wrappers around the OpenFeature server SDK:
setProvider(provider, clientName?)– Register a feature-flag providersetContext(context)– Set shared evaluation contextgetClient(name?)– Get an OpenFeature clientgetBooleanFlag(key, default, context?, clientName?)– Evaluate a boolean flaggetStringFlag(key, default, context?, clientName?)– Evaluate a string flaggetNumberFlag(key, default, context?, clientName?)– Evaluate a numeric flaggetObjectFlag(key, default, context?, clientName?)– Evaluate an object flaggetBooleanFlagDetails(key, default, context?, clientName?)– Boolean flag with detailsgetStringFlagDetails(key, default, context?, clientName?)– String flag with detailsgetNumberFlagDetails(key, default, context?, clientName?)– Number flag with detailsshutdown()– Close OpenFeature and release resources
Providers
EnvProvider– Resolve flags fromFEATURE_FLAG_*environment variablesUnleashProvider– Connect to an Unleash servercreateUnleashProvider()– Factory that reads Unleash config from env vars (UNLEASH_API_URL,UNLEASH_API_KEY,UNLEASH_APP_NAME)
Usage Example
import { setProvider, setContext, getBooleanFlag } from "shared-experiments";
// 1. Set a provider (e.g. flagd, LaunchDarkly, etc.)
await setProvider(myProvider);
// 2. Optionally set global context
setContext({ targetingKey: "user-123", plan: "pro" });
// 3. Evaluate flags
const darkMode = await getBooleanFlag("dark-mode", false);
Related Documentation
- Root README – Substrate overview
- OpenFeature Docs