Feature flags,
without the bloat.

Zero dependencies. Sub-millisecond evaluation. Your user data never leaves your app.

The Switchbox app window: sidebar navigation and the feature flags table across environments

What Switchbox is

Your flags are delivered as a static JSON file on Cloudflare's edge. Your app reads that file and evaluates locally, so our API is never in the read path.

See how it works →
  • Fail-safe by design

    Flag configs come from Cloudflare's edge, never our API. We can be down and your flags keep serving; evaluation is local and sub-millisecond, with no round-trip per check.

  • Private by design

    User data never leaves your app. No tracking, no evaluation logs sent back to us.

  • No black box

    Config is a static JSON file you can curl, evaluated by open-source SDKs you can read. Zero dependencies: Python stdlib only, JS browser APIs only.

  • Cheap by architecture

    Reads never touch our servers, so it's cheap to run: a free tier with unlimited evaluations, and paid plans at a fraction of the incumbents.

The tradeoffs

The deliberate costs of delivering config from the edge instead of a live API.

  • ~30s to propagate

    SDKs poll on an interval. It's not a sub-second, per-request kill switch.

  • Config, not secrets

    Flag JSON is world-readable by its key. Read anything sensitive server-side; never put keys in a flag.

  • Bring your own analytics

    Switchbox delivers and targets config. Experiment stats are your analytics tool's job, not ours.

Configure

Set a rollout and targeting in seconds

Flip a flag, drag the rollout, and add OR-of-ANDs targeting rules, with no YAML and no redeploy. Every change publishes to the edge automatically.

Flag detail page: the enable toggle, a rollout slider, and a targeting rule group.

Verify

Trace exactly how a flag resolves

The in-app Playground evaluates a flag against any user context with the real SDK, and shows which rule matched, the rollout bucket, and the final value.

Playground: a user context on the left, the resolved value and per-condition trace on the right.

Audit

See who changed what, and when

Every mutation is recorded as a visual before→after diff: the rollout that moved, the rule that was added, and the person who did it.

Audit log showing a targeting change as a readable before-after diff with the actor.

No lock-in

OpenFeature compatible

Code against the CNCF-standard feature flag API and plug Switchbox in as a provider. If we ever stop earning your trust, leaving costs one line.

  • Official providers for JavaScript, React, and Python

    Thin wrappers over the same open-source SDKs, with zero evaluation logic of their own. Other languages aren't covered yet.

  • The architecture doesn't change

    Configs still come from the edge and evaluate locally in your app. Even a context change costs zero network; remote-evaluation vendors make a round trip.

  • The swap is real

    Your call sites never mention Switchbox. Adopting us from another OpenFeature vendor is one constructor line. Leaving is the same line.

Use Switchbox with OpenFeature →
app.ts · vendor-neutral
import { OpenFeature } from '@openfeature/web-sdk';
import { SwitchboxProvider } from '@switchbox/openfeature';
// the one Switchbox-specific line in your app
await OpenFeature.setProviderAndWait(
new SwitchboxProvider({ sdkKey: 'your-sdk-key' }),
);
// everything else codes against the neutral API
const flags = OpenFeature.getClient();
flags.getBooleanValue('new_checkout', false);

Changelog

Always shipping

Switchbox gets better every week. Here's what changed recently.

Docs readable by AI agents

Every docs page now has a plain-markdown twin: append .md to any docs URL. There is also an llms.txt index and the whole documentation in a single llms-full.txt, so LLMs and AI agents can read Switchbox docs without scraping HTML. The blog got an RSS feed at /rss.xml while we were at it.

JUL 14, 2026

OpenFeature support

Official OpenFeature providers for JavaScript, React, and Python. Your app codes against the vendor-neutral CNCF API and Switchbox plugs in as one constructor line, with evaluation still happening locally in your app. Adopting Switchbox is one line, and so is leaving it. That is the point.

JUL 12, 2026

A public changelog

This page. Every user-visible change lands here, newest first, and the landing page shows the latest four. A product built by one person should make it easy to check that it is alive and moving.

JUL 12, 2026

How Switchbox works, on one page

A new architecture page walks through the whole trick: the API writes static JSON to the CDN, and your apps read from the edge and evaluate locally. It shows the literal flags.json your SDK fetches, the few lines that read it, and the honest tradeoff: changes propagate in about 30 seconds.

JUL 11, 2026

View all

From the founder

Built by one person

Hi, I'm Ignat. Switchbox is a one-person company: I design it, build it, run it, and answer the support email.

I started it because feature flags felt heavier than they should be. Enterprise dashboards, per-seat pricing, SDKs that pull in half of npm. Most of us just want to flip a flag and roll a feature out safely. So that's what Switchbox does, and not much else, on purpose.

One person running your flags is a fair thing to be skeptical about. It's part of why Switchbox is built the way it is: your flags serve from Cloudflare's edge, not from my API, so nothing in your app ever waits on me or my servers.

If something is broken, confusing, or missing, write to me. You'll get an answer from the person who wrote the code.

Ignat, the founder of Switchbox
Ignat

Builds and runs Switchbox