Excalidraw diagrams from a description.
Describe a system or a process in a sentence. Sketchi draws it with each product's logo, and every part stays editable.
Sketchi works from a sentence, or from a typed spec that an agent or the CLI writes. A model's answer is never the drawing: it is parsed into a typed diagram, validated, laid out by code, converted to real Excalidraw elements, and stored with a PNG. It draws flowcharts (with groups, swimlanes and architecture zones), mindmaps, sequence diagrams, timelines, bar, line and pie charts, state machines, Gantt charts, ER diagrams, UML class diagrams, org charts, Venn diagrams, user journey maps, Sankey diagrams, UI wireframes and quadrant charts.
CLI. Install the sketchi command
and turn a description into a PNG you can revise later. Generation needs no
account or API key; authoring, editing and export work offline.
curl -fsSL https://sketchi.app/install.sh | sh # or: npm install -g sketchi
sketchi generate --prompt "Deploy with GitHub Actions, Docker and Cloudflare Workers"The CLI guide covers every command, and the changelog what changed.
Agents. Codex, Claude Code, Antigravity and OpenCode draw through the public
MCP server at https://playground.sketchi.app/mcp, with no login or local
browser. The agent quickstart installs the
plugin or skill for each, and the Code Mode API page
describes the server.
Browser. playground.sketchi.app drafts and edits diagrams in chat, and icons.sketchi.app is the icon library diagrams draw their logos from.
prompt ─▶ model candidate ─▶ typed diagram ─▶ deterministic layout ─▶ Excalidraw scene ─▶ stored artifact + PNG
▲
spec from the CLI or MCP
| Package | Owns |
|---|---|
packages/diagram/core |
diagram contracts (Effect Schema), semantic validation, shared rules |
packages/diagram/generation |
model prompts, gateway calls, candidate parsing and repair |
packages/diagram/agent |
the Code Mode build: normalize, validate, render, export, store |
packages/diagram/renderer |
deterministic layout and routing for every family |
packages/diagram/excalidraw |
Excalidraw conversion and real-scene validation |
packages/diagram/scenarios |
maintained scenarios and the scenario CLI |
packages/diagram/ui |
shared React canvas and preview components, and the diagram Storybook |
packages/icons/* |
the icon catalog and search, community icons, and hand-drawn logos |
packages/svg-excalidraw |
SVG to native Excalidraw elements and libraries |
packages/studio/projects |
Studio project and diagram persistence |
packages/observability |
span telemetry for every Worker request |
packages/ui |
shadcn primitives and tokens for the Tailwind apps |
| App | Serves |
|---|---|
cli |
the sketchi command |
playground |
playground.sketchi.app: Studio, the HTTP API and the MCP server |
web |
sketchi.app: home, docs and agent setup |
icons |
icons.sketchi.app |
excalidraw |
an internal Excalidraw workspace for checking real scenes |
Every app except the CLI is a Cloudflare Worker. See the architecture guide and, for each family, adding a diagram family.
mise pins Node and pnpm:
mise trust && mise install
pnpm install
pnpm dev # every app, through Portless
pnpm nx dev playground # one apppnpm ci:local is the gate: lint and format, typecheck (TypeScript 6 and the
native TypeScript 7 compiler), build and test for every project the change
affects, plus the tooling, deploy and Storybook checks. Remote CI on a pull
request is one Nx-affected typecheck. AGENTS.md lists the
fuzz suites and other checks to run locally when their inputs change.
A CLI change that should ship gets a changeset (pnpm changeset); merging the
Version Packages pull request publishes it.
Graded evals run outside this repository against the scenarios in
packages/diagram/scenarios. pnpm sanity runs three end-to-end checks
against production or a preview.
Merging to main deploys the Worker apps a change affects. A pull request gets
preview Workers when it carries the preview label; see
preview deployments and the
production domain runbook.
MIT. See LICENSE.
