How it works
Most feature flag services put a server in front of every flag check. Switchbox doesn't. Your flags are published as a static JSON file on Cloudflare's edge, and your app's SDK reads it from there, then evaluates locally.
WriteOn every save
Dashboard
You toggle a flag
Switchbox API
Writes DB, builds JSON
Cloudflare edge
Static flags.json
ReadEvery flag check in your app
Cloudflare edge
Polled every ~30s
SDK in your app
Caches the config
Local evaluation
Sub-millisecond
Notice the API is only in the write lane. Reads are served from Cloudflare's edge, so your app keeps working even if our entire backend is down.
When you toggle a flag, change a rule, or edit a value, the API does two things: it writes the change to its database (the source of truth), then regenerates the entire config for that environment as a JSON file and uploads it to the edge. There's no separate publish button, saving is publishing.
Your app's SDK fetches that JSON once and caches it in memory. Every enabled() or getValue() call evaluates the rules and rollout locally, in-process. A background poller re-fetches every ~30 seconds, so a dashboard change reaches your app within one interval, without our API ever being in the request.
Try it
Set up a flag in the dashboard. It becomes JSON on the edge. Your app reads it instantly.
{"version": "2026-03-10T12:00:00Z","flags": {"new_checkout": {"enabled": true,"rollout_pct": 25,"default_value": false,"rules": [{"attribute": "email","operator": "ends_with","value": "@company.com"}]}}}
from switchbox import Switchboxclient = Switchbox(sdk_key="your-sdk-key")if client.enabled("new_checkout", user):show_new_checkout()
Install the SDK and you're live.
pip install switchbox-flagsNo black box
A static JSON file per environment, served by its SDK key. You can curl it yourself. The SDK that evaluates it is open source and zero-dependency, so there's nothing you can't read.
{"version": "2026-07-11T12:00:00Z","flags": {"new_checkout": {"enabled": true,"rollout_pct": 30,"flag_type": "boolean","default_value": false}}}
from switchbox import Switchboxclient = Switchbox(sdk_key="your-sdk-key")# Reads the edge JSON, evaluates locally.# No network call to our API.if client.enabled("new_checkout", user={"user_id": user.id}):show_new_checkout()
Every strength below is a direct consequence of keeping reads off our servers, and so is the one cost.
Our API can be down and your flags keep serving from the edge. If the SDK has ever fetched a config, it keeps evaluating against the last good one.
Flag checks are local and sub-millisecond. There's no per-request round-trip to us, so a flag check can never slow your app down.
Read traffic is static-file GETs on Cloudflare's edge, not database queries, so it scales the way a CDN does, not the way a server does.
The SDK evaluates against your user data in-process. Nothing about who saw what is ever sent back to us.
Because delivery is poll-based, a change isn't instant. A toggle takes up to your poll interval (~30s by default) to reach every running client. For rollouts, kill switches, and targeting that's imperceptible. If you need a hard guarantee a value has propagated, wait one interval before depending on it.
Resilient by design
Switchbox is never in your read path. Kill our API, the database, the whole backend, and your flags keep serving from Cloudflare's edge.
All systems operational.
Create a team, add a flag, and read it from your app in minutes. The deeper mechanics live in the docs.