Skip to main content
This is the migration most 2.1 consumers face. ADR-0010 (accepted 2026-08-20) ships as a new package name and a smaller public surface. v1 exposes exactly two capabilities: control-point reads and target registration. If you are still on Node 2.0.0 and import @fireweaveai/sdk/posthog, do 2.0 → 2.1 first, then this page.
@fireweaveai/sdk 2.1.0 is deprecated pointing at @fireweaveai/server-sdk. An unpinned npm install @fireweaveai/sdk is the old surface. Install the new package name.

What breaks

Unchanged on purpose
  • flagKey at the wire, Decision envelopes, conformance fixtures, and capabilities.features.flags
  • The nine-method control-point shape (now including *Details on every language)
  • registerTarget — and it now exists in all seven languages
  • The 15-kind error taxonomy and never-throw-on-evaluate
  • The three wire paths: /v1/flags/evaluate, /v1/capture, /v1/targets/register

1. Rename the Node package

Deno: npm:@fireweaveai/server-sdk.

2. Replace the OpenFeature provider

The provider was a thin delegation layer, not a second evaluation path. The peer dependency was mandatory by accident. Seven languages made a mature OpenFeature SDK per language untenable. OpenFeature compatibility is unbundled, not forbidden. A future optional bridge package is left open. Do not treat this as “OpenFeature is unsupported forever.”
Remove @openfeature/server-sdk / @openfeature/web-sdk / fireweave[openfeature] unless you use OpenFeature for something else. Local-provider helpers are gone:

3. Require mode and pass credentials

Your application may still read FW_API_URL / FW_PROJECT_API_KEY. The SDK will not. Remote without credentials throws Configuration at boot. That is the point: a mistyped production key must not silently become local evaluation, serving every default with a green boot log. mode: 'local' with credentials supplied is also Configuration.

4. Delete the cut namespaces

Guardrails remain a real platform feature in the Fireweave console. The SDK does not evaluate them. The typed stub is gone, so you get a compile error, not UnsupportedCapability. Releases, exposures, and signals remain platform concepts. See those pages for what the words still mean.

5. Per-language package moves

After snippets (from the SDK repo)

Go and Java gained registerTarget in v1. 2.1 docs that said those APIs were absent are stale.

6. What you do not have to rename

client.flags / Flags() / flags() is still the same object as controlPoints. Silent at runtime except in Python (one DeprecationWarning per process). Use controlPoints in new code. Do not rename flagKey, flagMetadata, InMemoryAdapter({ flags }), or features.flags. Those four flag boundaries stay. Do not run a repo-wide flags → controlPoints replace.

7. Browser keys

Web 2.1 documented a pending fw_public_… family. That family has shipped. Scoped to flags:evaluate + events:write. The attest plane rejects it. See Configuration.

Verify

A known-on control point should resolve true with reason TARGETING_MATCH / SPLIT / STATIC. If it resolves the default with ERROR, the remote adapter was never wired — check mode, apiUrl, and apiKey.

Next

Control points

The nine-method surface

OpenFeature

Why the provider was unbundled

Node 2.0 → 2.1

PostHog adapter removal only

Configuration

Required mode and explicit credentials
Last modified on September 11, 2026