Skip to content

subflag/sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Subflag SDKs

npm @subflag/openfeature-web-provider npm @subflag/openfeature-node-provider gem subflag-openfeature-provider

Official OpenFeature-compliant SDKs for Subflag feature flag management.

Packages

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

Quick Start

Web/Browser (React, Vue, vanilla JS)

npm install @subflag/openfeature-web-provider @openfeature/web-sdk
import { 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);

Node.js/Server (Express, Fastify, etc.)

npm install @subflag/openfeature-node-provider @openfeature/server-sdk
import { 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);

Ruby (Rails, Sinatra, etc.)

gem install subflag-openfeature-provider openfeature-sdk
require "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)

What is OpenFeature?

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

Supported Flag Types

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()

Getting Started with Subflag

  1. Sign up at subflag.com
  2. Create a project with environments (dev, staging, production)
  3. Create feature flags and configure variants
  4. Generate an API key (Settings → Applications → Create)
  5. 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.

Documentation

Development

# Install dependencies
pnpm install

# Build all packages
pnpm build

# Run tests
pnpm test

# Type check
pnpm typecheck

Project Structure

packages/
├── openfeature-web-provider/     # Browser/client-side provider
├── openfeature-node-provider/    # Node.js server provider
├── openfeature-ruby-provider/    # Ruby provider
└── api-types/                    # Shared TypeScript types

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published