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 flags
Read the docs
  • Halbrisk logo
  • Vaskeli logo
  • Ulvaro logo
  • Mirteno logo
  • Kestrino logo
  • Torvenna logo

Choose 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. 1

    Your own team first

    Ship to everyone with a company email and try it on real data.

  2. 2

    Then a tenth of customers

    Watch errors and conversion for a day before going further.

  3. 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.

Browse the SDKs
  • TypeScript

    Node, Deno, Bun and the browser.

    npm install flags
  • Python

    Django, Flask and FastAPI.

    pip install flags
  • Ruby

    Rails and Sinatra.

    gem install flags
  • PHP

    Laravel and Symfony.

    composer require flags/flags
  • Rust

    Async and blocking clients.

    cargo add flags
  • Kotlin

    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 in a mauve sweater against a warm backdrop

    Oliver Bennett

    Staff engineer, Mirteno

    Mirteno mark
  • "The first time a release went wrong we turned it off in a second, before support had even heard about it."

    Giulia Ferraro in a linen shirt beside a pale curtain

    Giulia Ferraro

    Engineering manager, Vaskeli

    Vaskeli mark
  • "Product runs the rollouts on its own. I only see a flag again when it is time to delete it."

    Nils Ekström in a navy shirt against a grey backdrop

    Nils Ekström

    Tech lead, Kestrino

    Kestrino mark

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
Read the quick start