The youngest surface of the engine · Composable · moving fast

Your users build real apps

Dashboards, internal tools, customer portals: real frontends your users describe and an agent builds, wired to their workflows through a typed contract. Every button press can trigger a durable run. You can even build app builders with it.

Installable packages are coming soon. The full source code is open source and available on GitHub.

contracts.ts the app ↔ workflow boundary
// The app calls workflows through a typed, JSON-safe contract.
// A Date that types as a Date but arrives as a string is exactly
// the bug this catches at compile time.
export interface ListOrders {
  input: { status: "open" | "all" };
  output: Order[];
}

export interface AppContract {
  listOrders: Workflow<ListOrders>;
  reconcileLedger: Workflow<ReconcileLedger>;
}

// why apps

Workflows are the logic. Apps are the face.

A workflow without a UI is a tool for operators. Give it a frontend and it becomes a product your users hand to their own teams and customers.

The agent writes both sides

One conversation produces the frontend and the workflows behind it, in the same project, in the same git history. Change the UI and the logic together, from a prompt.

A contract, not a prayer

Apps call workflows through a typed contract with compile-time JSON safety: a Date, a Map, or a function that would not survive the boundary is a build error naming the offender, not a runtime surprise.

Sandboxed by construction

User-built apps render in an isolated frame and reach the outside world only through the contract. They get exactly the workflows the project exposes, and nothing else.

Durable runs behind every button

A button press can .call() a workflow that settles inline or .start() a long-running one with retries, pauses, and signals. The app observes run state through the same protocol; nothing is faked.

Code in git, like everything else

An app is files in the project repo: reviewable, diffable, versioned, portable. No proprietary builder format to be trapped in.

Build app builders

Embed the whole surface in your SaaS and your product grows an app platform: your users building tools for their users, with AI doing the heavy lifting. Catamorphic is the substrate, you own the experience.

A UI kit, so agents skip the CSS

Dependency-free React components ship in every app sandbox: data tables, date pickers, fields with the aria wiring done, loading and empty and error states. Agents import them and write zero CSS, and the result inherits the host's theme tokens: fonts, radii, motion, density.

Storage that survives, per user

Apps get real, persistent localStorage without giving up the sandbox: each user's state is stored server-side per app and baked into the page at load. Preferences and drafts stay app-local; anything other users or workflows must see goes through a workflow.

MCP Apps, both directions

Every app is served over an MCP endpoint with its callable workflows as tools, so apps built here run in Claude and ChatGPT unchanged. And when a connected MCP server ships app views of its own, Catamorphic renders them in the same sandboxed mounts.

One project, logic and face together

Workflows give your users durable automation. Apps give that automation a front door. Both are TypeScript in the same git repo, built by the same agent, embedded in your product.