Ship features behind a flag, not a branch
Turn code on for one person, a team or a tenth of everyone, and off again without a deploy.
npm install flagsChoose exactly who sees it
Every rule is a line anyone on the team can read, and percentages stay sticky per person, so nobody flips between the old checkout and the new one.
- 1
Your own team first
Ship to everyone with a company email and try it on real data.
- 2
Then a tenth of customers
Watch errors and conversion for a day before going further.
- 3
Then everyone
Raise it to 100% and remove the flag when the dust settles.
Turn it off before anyone notices
When a release goes wrong, switch the flag off from the dashboard or the terminal. No deploy, no restart, and if the network drops your app keeps the last rules it had.
0.4 s
From the switch in the dashboard to every server running your app.
An SDK for every stack
Typed, tested and kept in step with the API. Each one answers from memory, so a flag check never waits on the network.
TypeScript
Node, Deno, Bun and the browser.
npm install flagsPython
Django, Flask and FastAPI.
pip install flagsRuby
Rails and Sinatra.
gem install flagsPHP
Laravel and Symfony.
composer require flags/flagsRust
Async and blocking clients.
cargo add flagsKotlin
Android and the JVM.
implementation("flags:android:2.4.0")
Old flags tidy themselves away
Flags that have not changed in months are marked for you. Find every place one is used, remove it from the code and archive it in two clicks.
Anything unchanged for 90 days gets a stale tag
The CLI lists every file and line that still reads it
Archived flags keep their history and come back in a click
A Monday email lists the flags ready to go
What changed after the first flag
One product team, the quarter before and the quarter after moving releases behind flags.
- Releases a week
- 114
- Branches open longer than a week
- 232
- Minutes to undo a bad release
- 451
- Hotfix deploys a month
- 90
Measured on one team of twelve engineers, over two quarters.
From the teams who ship with it
Engineers and product leads, a few months after the first flag.
"We merge to main every day now. Half-finished work sits behind a flag instead of in a branch nobody wants to rebase."

Oliver Bennett
Staff engineer, Mirteno
"The first time a release went wrong we turned it off in a second, before support had even heard about it."

Giulia Ferraro
Engineering manager, Vaskeli
"Product runs the rollouts on its own. I only see a flag again when it is time to delete it."

Nils Ekström
Tech lead, Kestrino
Questions, answered
Anything else? The docs have the details, and the team answers in the community chat.
No. The SDK keeps the rules in memory and updates them in the background, so a check is a local function call.
Your app keeps the last rules it had. Flags you have never fetched fall back to the default you set in code.
Yes. The relay runs in your own cloud, and the SDKs talk to it instead of to us.
The dashboard lists flags that have not changed in months, and the CLI finds every place a flag is used.
Your first flag is one command away
Run it in your project folder. It connects the project and writes a first flag you can turn on.
npx flags init