> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireweave.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Official FireWeave SDK documentation.
> Product noun is control point. OpenFeature and the wire protocol use flagKey — do not invent controlPointKey.
> Do not invent APIs, packages, env vars, or endpoints. Guardrails are a typed stub (UnsupportedCapability). OpenFeature Tracking (spec section 6) is not implemented.
> registerTarget and identify exist on Node, Python, and Web only. Go and Java have no target-registration API on master.
> sendExposure defaults to false. Java close() does not flush exposures.

# FireWeave

> FireWeave SDK docs: evaluate control points, register targets, and record exposures and signals in Node, Python, Go, Java, and the browser — including OpenFeature providers.

FireWeave SDKs evaluate **control points**, optionally register **targets**, drive a **release** lifecycle, and record **exposures** and **signals**. Your application authenticates with a FireWeave project key and talks to **fw-server**. OpenFeature and the wire protocol still use the parameter name `flagKey`; the product name is control point.

<Warning>
  The SDK is **pre-release**. As of 2026-08-17, npm `latest` for `@fireweaveai/sdk` is **2.1.0**, `@fireweaveai/web-sdk@2.1.0` is on npm, and PyPI has `fireweave` **0.1.0**. Pin Node `@2.1.0` — **2.0.0** is still on npm and still ships a direct PostHog adapter and `./posthog`. The Go module and Java `ai.fireweave:*` (`0.1.0-SNAPSHOT`) remain **unpublished** (checkout / `mvn install` only). See [Quickstart](/quickstart).
</Warning>

<Card title="Quickstart" icon="rocket" href="/quickstart">
  Install, initialize, evaluate a control point, record an outcome, and shut down — offline first, with real APIs.
</Card>

## SDKs

Five packages share one architecture: **FireweaveProvider** and **FireweaveClient** sit on **FireweaveRuntime**, which talks to a **BackendAdapter**.

<Columns cols={2}>
  <Card title="Node.js, Bun, and Deno" icon="node-js" href="/sdks/node">
    `@fireweaveai/sdk` — `controlPoints`, `registerTarget`. npm `latest` is 2.1.0; pin it. 2.0.0 still has PostHog / `./posthog`.
  </Card>

  <Card title="Python" icon="python" href="/sdks/python">
    `fireweave` — snake\_case `control_points` and `register_target`. PyPI `0.1.0`: `pip install 'fireweave[openfeature]'`.
  </Card>

  <Card title="Go" icon="golang" href="/sdks/go">
    `github.com/FireWeave-HQ/fireweave-sdk/sdks/go` — `Flags().Evaluate` only. No `registerTarget` on master.
  </Card>

  <Card title="Java" icon="java" href="/sdks/java">
    `ai.fireweave:*` — `evaluate` / boolean and string helpers. No env auto-read; `close()` does not flush.
  </Card>

  <Card title="Browser" icon="globe" href="/sdks/web">
    `@fireweaveai/web-sdk` — synchronous reads, `identify`, STALE on prefetch timeout. npm 2.1.0; no env.
  </Card>

  <Card title="Compatibility" icon="table" href="/sdks/compatibility">
    Type split, adapter matrix, and language gaps (register, namespaces, flush).
  </Card>
</Columns>

## What you can do

These capabilities are implemented in the five packages (language differences are called out on the SDK pages):

* **Evaluate** boolean, string, numeric, and object decisions. Evaluation returns a default on failure and **does not throw**.
* **OpenFeature** providers in every language, so call sites can use `getBooleanValue` / language equivalents with `flagKey`.
* **Targets** — Node `registerTarget`, Python `register_target`, Web `identify`. Go and Java have no registration API; pass `targetingKey` (and attributes) on each evaluate.
* **Releases** — `setContext` / `start` / `complete` / `fail`.
* **Exposures** — `record` / `flush`. Evaluate-path emission is opt-in (`sendExposure` defaults **false**).
* **Signals** — health, error, metric, and outcome (`recordOutcome` / language equivalent).
* **Capabilities** — `capabilities.get()` reports what this build and adapter can do. Guardrails are a typed stub (`guardrails: false`).

<Note>
  This site does not document wrap workflows, `fw.isOn`, working client-side guardrails, or OpenFeature Tracking (spec §6). Those are absent or unverified against the SDK.
</Note>

## Architecture and concepts

<Columns cols={2}>
  <Card title="How it works" icon="diagram-project" href="/introduction/how-it-works">
    Evaluate, register, capture — the runtime path without console ramp or wrap stories.
  </Card>

  <Card title="Architecture" icon="sitemap" href="/introduction/architecture">
    Provider + Client → Runtime → Adapter, lifecycle states, and the three fw-server paths.
  </Card>

  <Card title="Core concepts" icon="book" href="/concepts">
    Control points, targeting, releases, exposures, signals, capabilities, adapters.
  </Card>

  <Card title="OpenFeature" icon="flag" href="/openfeature">
    Providers, resolvers, and the `flagKey` boundary. Extensions stay on FireweaveClient.
  </Card>
</Columns>

## Production, troubleshooting, reference

<Columns cols={2}>
  <Card title="Configuration and auth" icon="key" href="/production/configuration">
    `FW_API_URL`, `FW_PROJECT_API_KEY`, Bearer auth. Java and Web do not read the environment.
  </Card>

  <Card title="Lifecycle" icon="circle-play" href="/production/lifecycle">
    Initialize, READY / STALE, shutdown. Java `close()` does not flush exposures.
  </Card>

  <Card title="Errors" icon="circle-exclamation" href="/production/errors">
    Fifteen error kinds and how they map onto OpenFeature codes.
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/troubleshooting">
    Defaults that look like “off,” missing targeting keys, and Go/Java checkout installs.
  </Card>

  <Card title="Package index" icon="cubes" href="/reference/packages">
    Package names, peers, and what is actually published.
  </Card>

  <Card title="Node 2.0 → 2.1" icon="code-compare" href="/migration/node-2">
    Breaking changes from Node 2.0.0 (PostHog / `./posthog`) to published 2.1.0.
  </Card>
</Columns>

Start with the [Quickstart](/quickstart) if you want a first evaluate in one sitting.
