Skip to main content

OpenFeature Integration

All FeatureSignals server SDKs include an OpenFeature provider, giving you a vendor-neutral API for feature flag evaluation.

What is OpenFeature?

OpenFeature is an open standard for feature flag management. By using OpenFeature, your application code doesn't depend on any specific feature flag vendor — you can switch providers without changing your evaluation code.

Go

import (
fs "github.com/featuresignals/sdk-go"
"github.com/open-feature/go-sdk/openfeature"
)

// Create the FeatureSignals client
client := fs.NewClient("fs_srv_...", "production",
fs.WithBaseURL("http://localhost:8080"),
)
defer client.Close()
<-client.Ready()

// Register as OpenFeature provider
provider := fs.NewProvider(client)
openfeature.SetProviderAndWait(provider)

// Use OpenFeature API
ofClient := openfeature.NewClient("my-app")
enabled, _ := ofClient.BooleanValue(
context.Background(),
"my-flag",
false,
openfeature.NewEvaluationContext("user-123", nil),
)

Node.js

import { FeatureSignalsClient, FeatureSignalsProvider } from '@featuresignals/node';

const fsClient = new FeatureSignalsClient('fs_srv_...', {
envKey: 'production',
baseURL: 'http://localhost:8080',
});

await fsClient.waitForReady();

const provider = new FeatureSignalsProvider(fsClient);

// Use the provider's resolution methods directly
const result = provider.resolveBooleanEvaluation('my-flag', false);
// result: { value: true, reason: 'CACHED' }

Python

from featuresignals import FeatureSignalsProvider, ClientOptions

provider = FeatureSignalsProvider(
"fs_srv_...",
ClientOptions(env_key="production", base_url="http://localhost:8080"),
)

provider.client.wait_for_ready()

# Use resolution methods
result = provider.resolve_boolean_evaluation("my-flag", False)
# result.value, result.reason

# Shutdown
provider.shutdown()

Resolution Methods

provider.resolve_boolean_evaluation(key, default_value)
provider.resolve_string_evaluation(key, default_value)
provider.resolve_integer_evaluation(key, default_value)
provider.resolve_float_evaluation(key, default_value)
provider.resolve_object_evaluation(key, default_value)

Java

import com.featuresignals.sdk.*;

var options = new ClientOptions("production")
.baseURL("http://localhost:8080");

try (var provider = new FeatureSignalsProvider("fs_srv_...", options)) {
provider.getClient().waitForReady(5000);

var result = provider.resolveBooleanEvaluation("my-flag", false, null);
// result.value(), result.reason()
}

Resolution Details

All providers return resolution details with:

FieldDescription
valueThe resolved flag value
reasonCACHED (success) or ERROR (failure)
errorCodeFLAG_NOT_FOUND or TYPE_MISMATCH (on error)

Error Handling

Error CodeMeaning
FLAG_NOT_FOUNDThe flag key doesn't exist in the cache
TYPE_MISMATCHThe flag value doesn't match the requested type

When an error occurs, the default value is returned.