Skip to main content
FireWeave ships an OpenFeature provider in all five packages. OpenFeature is the portable evaluation API. FireWeave extensions — releases, exposures, signals, targets, and capabilities — live on 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 Tracking (spec §6) is not implemented. There is no track API. Record assignment with exposures.record / flush or opt-in sendExposure (default false). Record results with signals.recordOutcome.

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.
FireWeave ships no product hooks except Go’s reserved-key guard hook. User-registered OpenFeature hooks work unmodified.

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.
Peer: @openfeature/server-sdk. The provider wraps a FireweaveRuntime.
FireweaveProviderOptions:

Evaluate

Every getter takes flagKey, a default, and evaluation context. Evaluation never throws: failures return your default with an errorCode. Inspect *Details when the value looks like the default.
A type mismatch between the stored value and the getter returns the default with errorCode = TYPE_MISMATCH.

Supported types

Node / Web: integers beyond ±(2^53−1) are not lossless (single number resolver). Java: values outside Integer range resolve as TYPE_MISMATCH + default — never silent truncation. Cross-language integer reliability is guaranteed within ±(2^53−1).

Targeting context

Identity is caller-owned. Set targetingKey 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:
FireWeave does not re-merge. The provider receives the already-merged context. FireWeave then enforces context bounds before any network call: 128 attributes, 256-byte keys, 4 KiB values, nesting depth 6, 64 KiB serialized. Violations return the default with 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.
registerTarget / identify exist on Node, Python, and Web only. Go and Java have no registration API. Pass attributes on each evaluate call in those languages.

Lifecycle

Registering the provider initializes the shared runtime (idempotent if a FireweaveClient 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:
Do not share one runtime across conflicting credential sets. Use one runtime per backend project. FireWeave does not declare 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 exceptions

Errors

15-kind taxonomy and OpenFeature code map

Testing

InMemoryAdapter behind a real OpenFeature client

Package index

Pins, peers, and publish state
Last modified on August 18, 2026