Official OpenFeature-compliant SDKs for Subflag feature flag management.
| Package | Language | Install |
|---|---|---|
| @subflag/openfeature-web-provider | TypeScript/JavaScript | npm install @subflag/openfeature-web-provider |
| @subflag/openfeature-node-provider | TypeScript/JavaScript | npm install @subflag/openfeature-node-provider |
| subflag-openfeature-provider | Ruby | gem install subflag-openfeature-provider |
| @subflag/api-types | TypeScript | npm install @subflag/api-types |
npm install @subflag/openfeature-web-provider @openfeature/web-sdkimport { OpenFeature } from '@openfeature/web-sdk';
import { SubflagWebProvider } from '@subflag/openfeature-web-provider';
const provider = new SubflagWebProvider({
apiUrl: 'https://api.subflag.com',
apiKey: 'sdk-prod-...',
});
await OpenFeature.setProviderAndWait(provider);
const client = OpenFeature.getClient();
// Flags are cached - synchronous evaluation, no network call
const enabled = client.getBooleanValue('new-feature', false);npm install @subflag/openfeature-node-provider @openfeature/server-sdkimport { OpenFeature } from '@openfeature/server-sdk';
import { SubflagNodeProvider } from '@subflag/openfeature-node-provider';
const provider = new SubflagNodeProvider({
apiUrl: 'https://api.subflag.com',
apiKey: 'sdk-prod-...',
});
await OpenFeature.setProviderAndWait(provider);
const client = OpenFeature.getClient();
// Each evaluation makes an API call - always gets latest value
const enabled = await client.getBooleanValue('new-feature', false);gem install subflag-openfeature-provider openfeature-sdkrequire "openfeature/sdk"
require "subflag"
provider = Subflag::Provider.new(
api_url: "https://api.subflag.com",
api_key: "sdk-prod-..."
)
OpenFeature::SDK.configure do |config|
config.set_provider(provider)
end
client = OpenFeature::SDK.build_client
enabled = client.fetch_boolean_value(flag_key: "new-feature", default_value: false)OpenFeature is an open standard for feature flag management, providing:
- Vendor-neutral API — Switch providers without changing application code
- Standardized evaluation — Consistent flag evaluation across platforms
- Ecosystem integration — Works with existing hooks, extensions, and tooling
All providers support the five OpenFeature value types:
| Type | TypeScript | Ruby |
|---|---|---|
| Boolean | getBooleanValue() |
fetch_boolean_value() |
| String | getStringValue() |
fetch_string_value() |
| Integer | getNumberValue() |
fetch_integer_value() |
| Float | getNumberValue() |
fetch_float_value() |
| Object | getObjectValue() |
fetch_object_value() |
- Sign up at subflag.com
- Create a project with environments (dev, staging, production)
- Create feature flags and configure variants
- Generate an API key (Settings → Applications → Create)
- Install an SDK and start evaluating flags
API keys follow the format sdk-{environment}-{app-name}-{random} and are scoped to a specific project and environment.
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test
# Type check
pnpm typecheckpackages/
├── openfeature-web-provider/ # Browser/client-side provider
├── openfeature-node-provider/ # Node.js server provider
├── openfeature-ruby-provider/ # Ruby provider
└── api-types/ # Shared TypeScript types
Contributions are welcome! Please feel free to submit issues and pull requests.
MIT