VISUAL MODELING · AGENT-READY

From flows to a model
you can trust.

A visual modeling tool for Domain-Driven Design. Start with flows, pin the rules down with Given–When–Then scenarios — and step by step a complete, validated static model emerges. In the browser, with your AI agent modeling alongside.

A language of first-class building blocks

Bounded ContextsActorsCommandsAggregatesDomain EventsReadModelsQueriesPolicies
STATIC + FLOW + SCENARIOS

One model, three views

Tell the story in the Flow View, pin it down with Given–When–Then scenarios, and watch the Static View grow into a structured overview of Bounded Contexts and Aggregates — ready to hand off into development.

The three views →
AI-NATIVE

Bring your AI agent

ddd-studio speaks MCP. Claude and other agents connect to your account, read and edit flows, slices, and scenarios — and every change appears live in your open canvas.

Connect an agent →
NO LOCK-IN

Your model, exportable

Export the complete model as JSON at any time. And when it's ready for development, an additional ESDM export (open YAML) carries it into code and tooling.

Exports & ESDM →
ONLINE-FIRST

Your model, on every device

Sign in with Google and your workspaces live in ddd-studio — in sync across all your devices, your browser tabs, and your AI agents.

Storage & sync →
MODEL CONTEXT PROTOCOL

Your agent models with you.

Connect Claude — or any MCP client — to ddd-studio. The agent signs in with your Google account via OAuth, gets the same permissions you have in the app, and can read and edit workspaces, flows, slices, and scenarios.

Changes made by the agent appear live in your open canvas — no reload. Model on the board, let the agent fill in schemas and scenarios, and review every step visually.

Set up the MCP connection →
claude · connected to ddd-studio

> Add a rejection scenario: checking out a book when no copies are available.

⏺ ddd-studio · add_scenario (feature: acquiring-books)

scenario: reject-check-out-when-no-copies-available

given: acquired { copies: 1 } · checked-out

when: check-out { borrower: ben }

then: rejection · available-copies-non-negative

synced — live in your open canvas