Public Beta · 1.0

Feature flags that live
in your repo.

Why YAML

A toggle in production is a deploy.

flagctl puts flag changes in your repo. PR-reviewed, git-shipped, easy to roll back.

How it works

Three steps from scary to boring.

01Step 01 of 03

Wrap it in a flag

Drop the SDK in. Wrap the risky code path. It ships, but nobody sees it yet.

app/checkout.tsx
if (flags.eval('checkout-v2', user)) {
  return renderNewCheckout();
}
return renderClassicCheckout();
02Step 02 of 03

Roll it out

Yourself → team → 1% → 10% → 50%. Watch your metrics between each step.

flagctl/flags/checkout-v2.yaml
production:
  enabled: true
  percent: 25
  target: beta-users
03Step 03 of 03

Kill it on the way down

Pager fires. Flip the kill switch with a reason. Auto-reverts when the incident clears.

terminal
$ flagctl override checkout-v2 \
  --off --reason "INC-2461" \
  --for 2h
✓ reverts in 2h
What you get

Every release feels reversible.

The unsexy parts of shipping features — rollouts, kill switches, targeting, undo — all in one small platform.

development100%
staging60%
production25%

Gradual rollouts

Ramp from 1% to 100% with a slider. Pause the second your error rate ticks up.

onoff

One-click kill switch

Disable a feature instantly. No deploy, no PR, no engineer. Reverts when the incident clears.

plan=pro
region=eu
beta_user=true
browser=safari

Target anything

Roll out by user, plan, region, browser, or any attribute you pass in. Internal users get it first.

variant Avariant B

A/B in a flag

Same primitive. Set variants, weights, a metric to watch. Decide in days, not weeks.

-percent: 10
+percent: 25
reviewers:
+ - @sarah
approved

Reviewed like code

Risky changes go through a PR. No more silent dashboard toggles by people who shouldn't be toggling.

AI
policy
shipped

Safe for AI agents

Let an agent propose a rollout. Policies decide what ships unattended and what needs a human.

FAQ

Still deciding?

Can't find what you're looking for? Ask us directly.

What exactly is a feature flag?

A switch in your code. Instead of "ship the new checkout to everyone the moment we deploy," you ship it wrapped in a flag and turn it on for whoever you want, whenever you want — no redeploy.

Why not just use environment variables?

Env vars need a redeploy to change. Flags flip live, per user, per segment. And you get a history of who flipped what, when, and why — which env vars do not give you.

How fast is it in my app?

Sub-millisecond. The SDK keeps flag state in memory and updates over a live stream. Your code evaluates a flag without a network call.

Can my team change flags without engineers?

Yes. PMs and support can flip rollouts and kill switches from the dashboard. Roles decide who can touch what. Sensitive flags can require a second pair of eyes.

Do I have to self-host?

No. Self-host is free; hosted is one click. Same product either way.

Ship safer

Make your next deploy boring.

Free forever for personal projects. Up in an afternoon.