FireweaveClient, not on the OpenFeature client.
OpenFeature and the wire protocol still say flagKey. The product name is control point (ADR-0007). Do not pass controlPointKey.
Compliance floor: OpenFeature specification v0.8.0.
OpenFeature vs FireWeave-native
You can use only OpenFeature, only the FireWeave client, or both against the same runtime.
Providers
Document the actual Java pin (1.15.1). An older brief mentioned 1.21.0; that version does not exist on Maven Central.
Install and register
As of 2026-08-17:@fireweaveai/sdk npm latest is 2.1.0, @fireweaveai/web-sdk is on npm at 2.1.0, and pip install 'fireweave[openfeature]' is valid (PyPI 0.1.0). Go and Java remain unpublished — install those from a checkout. See Quickstart and packages. CHANGELOG/docs previously described 2.1.0 as unpublished.
- Node
- Python
- Go
- Java
- Web
Peer:
@openfeature/server-sdk. The provider wraps a FireweaveRuntime.FireweaveProviderOptions:Evaluate
Every getter takesflagKey, a default, and evaluation context. Evaluation never throws: failures return your default with an errorCode. Inspect *Details when the value looks like the default.
errorCode = TYPE_MISMATCH.
Supported types
Targeting context
Identity is caller-owned. SettargetingKey to a stable identifier (the OpenFeature targetingKey is the cohort key). The SDK never invents an ID. See Targeting.
OpenFeature merges context layers per spec §3.2.3 — later wins:
INVALID_CONTEXT. A missing targetingKey when required returns TARGETING_KEY_MISSING.
Reserved attribute names: targetingKey, kind, and the fireweave.* namespace. Group targeting uses fireweave.groups / fireweave.groupProperties (plain groups / groupProperties alias). Other fireweave.* keys are InvalidContext.
Transaction context (spec §3.3) is usable where your OpenFeature SDK ships it. No FireWeave API depends on it.
Lifecycle
Registering the provider initializes the shared runtime (idempotent if aFireweaveClient already initialized it).
The OpenFeature SDK synthesizes
PROVIDER_READY / PROVIDER_ERROR from the provider’s initialize outcome.
Web: if the initial prefetch loses a 5 s ceiling, the runtime enters STALE (not READY) and the provider emits Stale. Reads return defaults with reason STALE. onContextChange prefetches again and emits ConfigurationChanged only for keys whose decisions moved.
Node: default lazyReady: true means setProviderAndWait does not wait unless you pass lazyReady: false.
Shut down with OpenFeature.close() / api.shutdown() / of.Shutdown() — that calls the provider close path. See Initialize, ready, shutdown for flush differences (Java close() does not flush the client exposure queue).
Domains
Providers are domain-safe. Provider state lives in the shared runtime:domainScoped.
Side effects
OpenFeature evaluate is side-effect-free by default.sendExposure / send_exposure / SendExposure defaults to false in every language. Exposures are an explicit FireWeave API, or a per-call / provider opt-in.
What is not implemented
- Tracking (OpenFeature spec §6) — planned, not present. Do not call
track. - Product hooks — empty provider-hook list (Go reserved-key guard excepted).
- Python multi-provider — compatible where OpenFeature ships it on Node; untested on Python.
- Guardrails — stub on
FireweaveClient, not an OpenFeature feature.
Next
Configuration and auth
FW_API_URL, FW_PROJECT_API_KEY, and language exceptionsErrors
15-kind taxonomy and OpenFeature code map
Testing
InMemoryAdapter behind a real OpenFeature client
Package index
Pins, peers, and publish state