Introduction
ShipOS is feature flags with no seat tax and no MAU bill, unlimited flags, seats, and environments, priced on a single meter and served from Cloudflare's edge in under 50ms.
What is ShipOS?
ShipOS does one thing: feature flags, done properly. You create a flag, wrap your code in a check, and control who sees it, by environment, by percentage rollout, or by attribute targeting, without redeploying. Flag state lives in the control plane and is pushed to Cloudflare KV, so the edge can evaluate flags globally without touching a database.
What makes ShipOS different is that the agent is a first-class user. The MCP server and REST API have full parity with the dashboard, so a developer in Claude Code or Cursor can create a flag, set targeting, stage a rollout, and kill a feature, all from the editor. The dashboard is the observation layer, not the only way in.
What you get
Flags, not a suite
Unlimited flags, seats, and environments. One meter: flag evaluations. No seat tax, no MAU bill.
Agentic-first
The MCP server and REST API are the primary interface. Agents create flags, ramp rollouts, and pull kill switches without touching the dashboard.
Edge-native
Evaluations are served from Cloudflare's edge in under 50ms globally. The SDK caches in-memory and never blocks your request path.
Always reversible
Every flag has an instant kill switch and an append-only audit trail. Risky changes stay traceable and one call away from OFF.
The flag check
A flag evaluation takes one line and always has a default, so it never throws and never blocks, offline, on a typo, or during an outage you get your default back.
import { createClient } from "@shipos/sdk";
const shipos = createClient({ key: "sos_sdk_..." });
// Boolean, string, number, or JSON, always with a default.
const useV2 = await shipos.flag("checkout-v2", {
userId: "u_42",
attributes: { plan: "pro", region: "eu" },
default: false,
});
if (useV2) renderNewCheckout();…or let an agent do it
Point your coding agent at the ShipOS MCP server and it manages flags for you, creating them, wiring the SDK call, and ramping the rollout.
You: gate the new checkout behind a flag, roll it out to 10% in prod
Claude → create_flag { key: "checkout-v2", description: "New checkout flow" }
✅ Created flag "checkout-v2" (boolean) in project "shop".
All environments start OFF, toggle_flag turns it on,
set_rollout ramps it gradually.
Claude → set_rollout { key: "checkout-v2", env: "prod", percent: 10 }
✅ checkout-v2 @ prod → 10% rollout