Foredeck
OverviewQuickstartConfig as CodeAPI ReferenceEvaluation SpecExposuresCountersLogsMonitor your servicesSign-in & organizationsAlertingPush notificationsOpenFeature

OpenFeature

Standards-based OpenFeature provider (server + web) backed by @foredeck/sdk-js local evaluation

Prefer the standards-based API? Use @foredeck/openfeature-provider-js — an OpenFeature provider (server + web) for the Foredeck feature-flag platform, backed by @foredeck/sdk-js local evaluation. Evaluations never make a network call; exposure events are batched and flushed by the underlying SDK client.

Install

npm install @foredeck/openfeature-provider-js @foredeck/sdk-js
# plus ONE of:
npm install @openfeature/server-sdk   # Node / server
npm install @openfeature/web-sdk      # browser

Server (Node) usage

import { OpenFeature } from '@openfeature/server-sdk';
import { ForedeckServerProvider } from '@foredeck/openfeature-provider-js/server';

await OpenFeature.setProviderAndWait(
  new ForedeckServerProvider({
    clientOptions: {
      sdkKey: 'fd_server_<account>',
      baseUrl: 'https://exp.example.com',
      eventsUrl: 'https://events.example.com',
    },
  }),
);

const client = OpenFeature.getClient();
const variant = await client.getStringValue('checkout-button', 'control', {
  targetingKey: userId,
});

Web (browser) usage

import { OpenFeature } from '@openfeature/web-sdk';
import { ForedeckWebProvider } from '@foredeck/openfeature-provider-js/web';

OpenFeature.setContext({ targetingKey: userId });
await OpenFeature.setProviderAndWait(new ForedeckWebProvider({ clientOptions: { /* ... */ } }));
const value = OpenFeature.getClient().getStringValue('checkout-button', 'control');

Ruleset updates surface as PROVIDER_CONFIGURATION_CHANGED events (with flagsChanged) on both providers.

Type-mapping contract

Foredeck variations are named strings with an optional JSON config payload. OpenFeature's typed evaluation maps onto that as follows:

OpenFeature typeResolution
stringthe variation config's value when it is a string, else the variation name
booleanthe variation config's value (must be boolean, else TYPE_MISMATCH)
numberthe variation config's value (must be a number, else TYPE_MISMATCH)
objectthe variation config's value when it is an object, else the whole config object

Abnormal outcomes throw typed OpenFeature errors (FLAG_NOT_FOUND, TARGETING_KEY_MISSING, TYPE_MISMATCH, GENERAL), so the OpenFeature client returns your default value. Successful resolutions report variant (the variation name), reason SPLIT (deterministic weighted bucketing), and the bucket number in flagMetadata.bucket.

Exposure logging

No hooks are required: @foredeck/sdk-js enqueues an exposure event on every evaluation (deduped, batched, flushed on an interval and on page hide).