Skip to main content

Solutions · Feature flags & entitlements

Put every feature
behind a flag.

Rollouts, betas, and kill switches in the same policy that decides plan access and bills the usage. Flip one, and every engine has it on the next call.

ai_assistant · rollout3 of 100 Pro orgs
Pro · 100 orgs
Free · 20 orgs · not in the plan
on beta off
Pro · ai_assistantLive · v31
Enabled
Rollout0%
Always on forbeta orgs · 3
Limit2M tokens a month
Track checkson
Your app, unchangedawait limitr.check(org, 'ai_assistant')Only the beta orgs, picked in customer metadata.
Which orgs are in comes from engine 0.8.5 · made-up orgs

The problem

Your flags don't know
what a feature costs.

The flag tool says the AI assistant is on. Billing says the customer never paid for it. Three systems, three answers.

With AI, every feature spends money on every call. Its switch should know the plan, the price, and the bill.

Flag tool
On
AI assistant, for Acme
Billing
Free plan
Acme never paid for AI
Provider bill
$4,210
AI assistant tokens in October
three systems■ three answers

How it works

A plan is a set
of switches.

In Limitr Cloud, every feature is a row and every plan a column. Turn one on, roll it out, give it a limit, or kill it, then publish. Your code asks the same question either way.

Policy · livePolicy
Live, no unpublished changes · v23
EntitlementFreefree · defaultProproScalescale
ai_assistantAI assistantrollout
beta_canvasNew canvasbeta
ssoSingle sign-onflag
apiAPI callslimit
export_csvCSV exportsflag
legacy_editorThe old editorkill switch
Limitr Cloud policy editor · made-up plans · click any setting

Ship AI safely

Ship AI features dark,
then turn them up.

Launch to the beta, then 5%, then 25%. Every call is metered against the plan from the first one, so you see what each step costs before you take the next.

Rollouts that hold

Raise the number and everyone already in stays in. Each feature buckets on its own, so the same customers aren't first for everything.

A kill switch in one line

Turn a feature off in Cloud and it is off for everyone on the next call. Usage so far is kept.

Give and take per customer

Give a design partner SSO for 14 days, or pause exports on an unpaid invoice, without touching the plan.

Limitr Cloud

Every flip is a commit,
with history.

A rollout change is a policy change: tested on live traffic, published to every engine, and one click to roll back. Product can turn the dial without a deploy.

policy · main3 engines live on v31
  1. v31ai_assistant rollout 5 → 25Priya · 2m agolive
  2. v30sso given to Dana for 14 daysSales · 1h ago
  3. v29ai_assistant rollout 0 → 5Priya · yesterday
  4. v28legacy_editor enabled → falseMarco · Mon
Made-up history

Under the hood

Every switch runs
in your app.

Each switch is a line in a policy that runs inside your app, in Limitr's open-source engine, on data you already have. No flag service to call, no extra hop.

How the engine works →
Limitr Cloudedit
entitlementpro
ai_assistant25% rollout
ssoon
legacy_editoroff · killed
Changed by sales, support, or you
policy.stofsame policy
pro: {
entitlements: {
ai_assistant: {
rollout: 25 // percent of Pro
fn enabled(c: Customer, e: str, ctx?: obj) -> bool {
c.bucket(e) < self.rollout
}
}
}
}
Your appengine inside
limitr engine
await limitr.allow('ada', 'ai_assistant')
→ true
Ada is in the 25%. Same answer on every call, no flag service.
one cell · one line · every engine■ runs in your process

Every feature,
one switch away.

npm i @formata/limitr