Targeting beyond users.
Describe who you mean: paying orgs in Brazil, devices on app version 3.2, one specific customer having a bad day. Combine conditions with AND and OR, save the result as a segment, and watch the live preview show who matches.
feat evaluates flags inside your runtime and streams changes to every SDK as they happen. Plans are metered on how often your SDKs call us, so seats, flags, and the size of your user base never show up on the bill.
Studio-grade sound, 38-hour battery.
Flip it. The change reaches every connected SDK over the live stream, with no redeploy and no app-store round trip.
Describe who you mean: paying orgs in Brazil, devices on app version 3.2, one specific customer having a bad day. Combine conditions with AND and OR, save the result as a segment, and watch the live preview show who matches.
Ship a flag to 10% of pro-tier organizations in Germany with one click. Sticky rollouts keep the same audience on the same variation across requests, sessions, and devices. Different rules can carry different splits, with a fallback split that catches everyone else.
Production requires approval. Staging doesn't. Configure how many approvers it takes, whether someone can approve their own change, and whether comments are required, per environment.
Server keys for back-ends, browser-safe keys for client-side code, and a semi-secret, server-rotatable mobile key for the Flutter and Dart SDK. Each tuned to its runtime's security model.
Every change captured with full before-and-after history, who made it, and why. On every plan, Free included, with API-key secrets redacted before a record is written.
Save a change and connected SDKs pick it up over the live stream in under a second; a background poll catches up within 30 seconds if a stream drops. Your SDK keeps a local copy and evaluates flags in your runtime, so there's no network call per flag check. JavaScript, Python, Go, Ruby, browser JavaScript, and Flutter/Dart all evaluate the same way, so what your back-end returns matches what the edge serves.
Ship to 1%, watch the metrics, ramp up. Every change is instant. No redeploys, no flag drift.
A built-in statistical engine, variant tracking, and metric integrations are on the way. Today: ship the slider on the left and bring your own analytics for measurement.
Six SDKs on one shared evaluation engine: JavaScript, Python, Go, and Ruby evaluate locally; browser JavaScript and Flutter/Dart evaluate at the edge. What your back-end returns matches what the edge serves. OpenFeature providers for web, Node, and Dart. REST API for anything else (reference docs in progress).
// Local cache; in-process eval after first sync import { FeatClient } from '@feathq/js-sdk' const feat = new FeatClient({ apiKey: process.env.FEAT_SERVER_KEY!, }) await feat.ready() const { value } = await feat.evaluate('new_checkout_v2', false, { targetingKey: user.id, user: { key: user.id, plan: 'pro' }, })
Something on fire? Hit kill. The off state streams out in under a second. No rollback. No redeploy. No standup.
The basics every team gets, on every plan. No setup, no settings page.
Flip on what your team is ready for. Disabled features vanish from the console, so it never grows past what you actually use.
Attributes stay here. A server SDK has no evaluate call to send them on.
Your bill is a count. No contexts, no per-evaluation events, and nothing identifying kept from the traffic itself. The JavaScript, Go, Python, and Ruby SDKs send us nothing at all.
Two nuances, stated plainly. Browser and mobile SDKs evaluate at our edge rather than in your process, so the context you pass them does reach our code; it is used for that one evaluation and then dropped. And individual targeting and segments hold the identifiers you type into them, because that is what those features are: your config, stored and shipped to your SDKs. Neither is derived from your traffic.
The Go, Python, and Ruby SDKs are standard-library only. The JavaScript SDK adds feat's own engine and schema plus the OpenFeature packages behind its provider; nothing else. Releases publish to npm with provenance attestation via OIDC trusted publishing, so you can verify each artifact came from our CI, not a laptop.
see the provenance on npm →The exact datafile your SDK consumes is a documented, versioned schema, published as @feathq/datafile-schema. Rollout bucketing is deterministic down to the hash recipe, which we published in full; port it yourself and your numbers should match ours exactly. Prefer vendor-neutral? OpenFeature providers ship for the server and browser SDKs.
read the bucketing recipe →The audit log is on for everyone, Free included. Changes made in one request group into one entry instead of thirty rows, comments can be required per environment, and API-key secrets are redacted before a record is ever written.
how the audit log works →