Preview

Flags

Feature flags that evaluate in your app. User data never leaves it.

Ship code dark, then turn it on for your team, a segment or a percentage of users, without a deploy. Flags gives you feature flags and remote settings with targeting rules, environments and a full change history.

Your app downloads a small config for its environment and decides every flag locally. Checks are instant, and the attributes you target on stay in your app. Flags is free during the preview and hosted in the EU (Frankfurt).


How it works

Download once, evaluate locally

One client per process. It keeps the config fresh in the background (an unchanged config costs a 304), so every read is local.

server.ts
import { FlagsClient } from "@productcraft/flags";

// Downloads this environment's config and refreshes it every 60 s.
const flags = new FlagsClient({ sdkKey: process.env.PRODUCTCRAFT_FLAGS_SDK_KEY });

// Evaluated in your process: the user object is never sent anywhere.
const on = await flags.getValue("new_checkout", false, {
  identifier: "user-123", // percentage rollouts hash this, so a user keeps their bucket
  email: "ada@example.com",
  custom: { plan: "pro" },
});

Evaluated in your app

The SDK downloads one small config JSON per environment and evaluates every flag in your process. A flag check is a function call, not a network request.

User data stays with you

Targeting reads the user object you pass in, on your server or in your browser. Emails, plans and countries are never sent to ProductCraft.

Keeps working when we do not

If a download fails, the SDK keeps the last config it had, from memory, your own cache (Redis or any key-value store) or a bootstrap file shipped with your build. getValue never throws: it falls back to the default you pass.

Targeting

Release to the right people

Rules, segments and rollouts per environment. Turning a flag off in Production is one toggle in the console.

Percentage rollouts

Roll a flag out to 5%, then 50%, then everyone. Rollouts hash the flag key and the user identifier, so each user keeps their bucket as the percentage grows.

Targeting rules

Match on any user attribute: is one of, contains, starts with, number, semantic version, date and array comparisons, each rule with its own value or percentage split.

Segments

Define "beta testers" or "EU customers" once per project and reuse it in any flag. Change the segment and every flag that uses it follows.

Prerequisite flags

Serve a flag only when another flag has a given value, so a feature that depends on a new API turns on after the API does.

Flags and settings

On/off feature flags, plus string, number and JSON settings for copy, limits and remote configuration, each with its own value per environment.

Environments

Development, Staging and Production (or your own) per project, each with its own SDK key that can read only that config.

Operate

Safe to change in production

Protected environments, a full history and webhooks, from the same workspace and API key as the rest of ProductCraft.

Protected environments

Members change Development freely; Production needs an admin, and you can require a note with every change.

History with restore

Every change records who made it, when and the diff. Restore an earlier version in one step, as a new change you can see in the history.

Signed webhooks

Get a signed event whenever a config changes, with Send test, a 30-day event log and replay, like every ProductCraft product.

Node, React and OpenFeature

@productcraft/flags for Node.js and the browser, @productcraft/flags-react for React and Next.js, and @productcraft/flags-openfeature if you code against the OpenFeature API.

One-step import from ConfigCat

Point the importer at your ConfigCat account and bring over products, configs, environments, flags, segments and targeting rules. Users keep their rollout buckets.

For your AI agents too

A management API, a console and MCP tools, all behind the policies you set on each key, so an agent can create a flag without being able to turn on Production.

Coming from ConfigCat?

The importer copies your setup in one step, and the migration guide maps every concept and SDK call, with a checklist for running both side by side before you switch.


Your first flag, end to end

Enable Flags on your workspace, create a flag, read it from Node, then flip it in the console and watch your app follow. Free during the preview.