0.0
The project is in a healthy, maintained state
Rails integration for Subflag feature flags. Get typed values (boolean, string, integer, double, object) with user targeting. Includes generators, view helpers, and ActiveRecord context integration.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 2.0
>= 6.1
~> 13.0
~> 3.12
~> 1.50
~> 3.18

Runtime

 Project Readme

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