Config as a product surface
The business logic your app runs on, editable without a deploy.
Your coding agent defines which decisions should be tunable. Your customers tune them in a real editor embedded inside your own product. Your app reads the current values live.
Free for 3 projects. No card required.
Three roles, one source of truth
Most config tools serve engineers. Ruler is built for the moment an engineer is not in the room.
- 1Author
Your coding agent
While it builds a feature, the agent registers the decisions worth exposing — a threshold, a set of tiers, a rule — over MCP, with a JSON Schema describing the shape.
MCP · one endpoint, scoped keys
- 2Edit
Your customer
They get a generated editor — real form fields, dropdowns, a visual AND/OR builder for conditions — embedded in your product under your own branding. No JSON, no engineer, no ticket.
iframe · short-lived tokens
- 3Read
Your running app
The SDK reads current values and receives changes over SSE. If Ruler is unreachable the app keeps its last known config — a config service that can take your app down is worse than no config service.
SDK · fail-safe by design
Safe enough to hand to someone else
Environments that cannot drift
A rule’s shape is shared by every environment; only its value differs. Test a change in development and production is provably untouched.
Keys that do one thing
Read keys read. Server keys write. Both are hashed at rest and scoped to a single environment, so the credential in your browser bundle cannot rewrite production.
Every change attributed
Who changed which value, when, and what it was before — so a number that moved between two reports has an answer.
Your app keeps the meaning
Ruler stores shapes and values, never interprets them. No lock-in on your domain logic, and nothing of yours leaves your app.
Two lines in your app
Install the SDK, read a rule. Values update in place; your code keeps every bit of the logic that interprets them.
An MCP endpoint is included, so an agent — or an in-app assistant explaining your product to a customer — can read the same definitions your code runs on.
import { ControlPlane } from '@metabuilder.dev/control-plane-sdk'
const cp = new ControlPlane({
projectId: process.env.CP_PROJECT_ID,
apiKey: process.env.CP_READ_KEY,
})
await cp.init()
// Your code still owns what this MEANS.
const tiers = cp.getRuleData('loyalty_tier')Pricing
Free
$0
Everything works. Enough for a real first app.
- 3 projects
- 2 environments each
- 50 rules each
- Embedded editor + MCP
Pro
$49/mo
For a team running several products.
- 25 projects
- 5 environments each
- 500 rules each
- Change history + audit
Enterprise
Talk to us
Self-host, SSO, and a support agreement.
- Unlimited projects
- Custom environments
- SSO / SAML
- Priority support
Paid plans are not yet billable — every account runs on the free limits until checkout ships.