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.

  1. 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

  2. 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

  3. 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
Start free

Pro

$49/mo

For a team running several products.

  • 25 projects
  • 5 environments each
  • 500 rules each
  • Change history + audit
Start free

Enterprise

Talk to us

Self-host, SSO, and a support agreement.

  • Unlimited projects
  • Custom environments
  • SSO / SAML
  • Priority support
Get in touch

Paid plans are not yet billable — every account runs on the free limits until checkout ships.