flagpole

Docs

One project, per-environment keys, and an evaluate endpoint that behaves like a static file.

Create a project

curl -s -X POST http://localhost:8112/api/projects \
  -H "Content-Type: application/json" \
  -d '{"email":"you@app.dev","name":"My App"}'

# response includes your owner token and env_key

Each environment gets its own public env_key. The owner token authorizes flag writes; the env key only reads.

Evaluate flags

# full flag map for the environment
curl http://localhost:8112/v1/flags/ENV_KEY

# a single value
curl http://localhost:8112/v1/flags/ENV_KEY/new-checkout

Responses carry Cache-Control: max-age=30, so any CDN in front absorbs traffic and origin load stays near zero.

Client-side toggles

const flags = await fetch(
  "http://localhost:8112/v1/flags/ENV_KEY"
).then((r) => r.json());

if (flags["new-checkout"]) initCheckout();

The SDK is one fetch with no dependencies. Env keys are safe to ship to browsers: they can read flag values, nothing else.

Gradual rollouts

Flag values accept JSON objects, so a rollout looks like { "enabled": true, "rollout": 0.25 }. Your client buckets deterministically (user id hash) and compares against the rollout fraction.

Plan limits

Free Pro $19/mo Team $49/mo
Environments21025
Flags10unlimitedunlimited
Evaluations / mo50k1M5M