Compare

How Squinch compares.
One system, drawn in six tools.

A storefront on AWS — four systems, thirteen components, eighteen connections — drawn by a coding agent in each of six tools. No picture is retouched, and every source file is in the repo.

01

How we tested

Same for every tool

Each tool got its own agent, which saw neither the others' work nor Squinch's render, and was told to do the tool justice. Run in September 2026.

  • Two pictures. The landscape — the systems as single boxes — and full detail, with every system opened up. From one model if the tool can.
  • The tool's own means. Its built-in dark theme, its AWS icons, the layout engines that ship free with it.
  • A shape that fits a page. Between 16:9 and 3:4, legible at this width, with a handful of iterations to get there.
02

At a glance

From the runs below
Source Both pictures from one model Layout control AWS icons Dark theme From text to PNG
Squinch 144 lines, seven views Yes — a view is five lines Relative hints — rows, cols, place, a direction per frame Bundled Built in One npm package
Archify 89 lines of JSON, two files No — views refocus, never collapse Grid cells and pixel nudges — the agent is the layout engine None — colour-coded kinds Built in A git clone and Node
Mermaid 90 lines, two files No — two hand-kept files Direction and spacing Fetched at render Built in One npm package + headless Chromium
D2 172 lines, one file Partly — one file, cross-system edges written twice Direction, or a grid — and a grid stops routing edges Fetched by URL; no OpenSearch icon Built in One binary
Structurizr 90 lines, one file Yes — the C4 model is the point Direction and spacing — the rest is dragging boxes in a browser Fetched at render Undocumented export flag Java, then PlantUML, then Graphviz — about 900 MB
Python diagrams 106 lines, two files No — two scripts Raw Graphviz attributes Bundled None — set by hand pip + Graphviz
Showing switches all six at once
03

Squinch

0.8 · one model, seven views
Squinch, landscape: the customer, storefront and gateway in a column above the three services in one row
Landscape
Squinch, full detail: every system opened into a frame, the three services side by side, wires routed at right angles between them
Full detail

What it took

One 144-line file that also holds five more views. Full detail is the landscape plus one line, expand *.

Holds up

  • The three services share a row because the source says so: rows [catalog orders accounts].
  • Wires turn at right angles and cross no title or label.
  • Name and technology are separate lines; tags are part of the language.

Falls short

  • It is new. Mermaid renders inside GitHub and Notion; a Squinch diagram is an image you commit.
  • A language of its own: written by agents, but one more thing in the repo.
04

Archify

2.17-dev · agent skill, JSON → HTML
Archify, landscape: a clean left-to-right spine into a column of three services, colour-coded by kind, with a legend
Landscape · landscape.architecture.json, 27 lines
Archify, full detail: systems as dashed regions, orthogonal wires with no crossings, colour-coded boxes in place of AWS icons, one wire running behind the Order Service title
Full detail · full.architecture.json, 62 lines

What it took

The other agent skill here. It has no layout engine: the agent gives every node a grid cell and a size, a validator reports what collides, and labels are nudged in pixels. More than a dozen validate rounds; full detail carries seven pixel overrides.

Holds up

  • The validator: nine geometric checks, with exact clearances and suggested fixes.
  • Orthogonal wires, no crossings, and a polished dark theme.
  • One self-contained interactive HTML file, offline, with its own PNG and SVG export.

Falls short

  • No AWS icons: seven generic kinds, told apart by colour. DynamoDB and RDS are the same purple box.
  • Two hand-written files. Its views refocus a picture but cannot collapse a system into a box.
  • “price check” runs behind the Order Service title, and validation passed.
05

Mermaid

11.17 · flowchart, dagre
Mermaid, landscape: a clean top-down flowchart; two edge labels sit on top of their own wires
Landscape · landscape.mmd, 28 lines
Mermaid, full detail: laid out left to right, the three services step diagonally down the page with empty corners
Full detail · full.mmd, 62 lines

What it took

A flowchart with subgraphs and icon nodes. Both files parsed first time; a page-shaped full detail took four tries at spacing and wrap width, the only layout controls there are.

Holds up

  • Rendered first try, from short, readable source.
  • The landscape is clean, with no crossings.
  • Renders natively on GitHub — though not with these icons.

Falls short

  • The services form a staircase: Orders calls Catalog, so Catalog ranks after it, and nothing can say otherwise.
  • Labels wrap as one block — “Lambda · Node / 20” — and chips sit on their own wires.
  • Two wires run through the Order Service frame and merge.
06

D2

0.9 · ELK, then a grid
D2, landscape: a clean orthogonal layout, with Order Service ranked above the other two services
Landscape · shop.d2, 172 lines for both
D2, full detail, as a grid: straight diagonal wires cross the Storefront frame, and one wire runs through the Orders database box
Full detail · the same file, as a scenario

What it took

One file, but full deletes the landscape's eight edges and rewrites them between containers. With ELK alone it came out 2004 × 8988, so full detail is a grid — D2's one way to set rows.

Holds up

  • A single binary that renders in half a second.
  • The ELK landscape is clean and orthogonal, with backed labels.

Falls short

  • Inside a grid, edges are not routed: each is a straight line. “verify identity” runs through the Orders database and hides another edge.
  • Grid cells stretch to match, so Customer and Edge Gateway become large empty boxes.
  • Every cross-system edge is written twice, and nothing checks the two agree.
07

Structurizr

DSL → PlantUML → Graphviz
Structurizr, landscape: a clean C4 system landscape with Order Service a rank above Accounts and Catalog
Landscape · workspace.dsl, 90 lines for both
Structurizr, full detail: a tall container view, the three services stepping down the page, two wires crossing boundary titles
Full detail · the same model, a second view

What it took

The only other tool here with a real model: one workspace, two views. But the CLI draws nothing itself — it exports PlantUML, which shells out to Graphviz — and full detail is either three screens tall or 4:1 and unreadable.

Holds up

  • Model once, view many times: the idea Squinch shares, and it works.
  • Precise validation errors.
  • The landscape is clean.

Falls short

  • Layout is a direction and two spacings. Its real answer is dragging boxes in a browser, which no agent can do.
  • The landscape silently drops “decrement stock”: two edges between the same systems merge into one.
  • Two wires cross boundary titles.
08

Python diagrams

0.25 · Graphviz dot
Python diagrams, landscape: large AWS icons top to bottom, with Lambda icons standing in for whole services
Landscape · landscape.py, 34 lines
Python diagrams, full detail: the services as three horizontal lanes of large icons; one wire loops under the whole picture and back up
Full detail · full.py, 72 lines

What it took

Handsome at a glance, and the most Graphviz knowledge to get there: splines, constraint="false", and a patched private attribute so larger labels clear their icons.

Holds up

  • The icons: bundled, official, large, instantly recognisable.
  • Left to right, the services read as three tidy lanes.

Falls short

  • “decrement stock” loops under the whole picture and back; four iterations could not remove it.
  • Edge labels have no backing and land on frame titles.
  • No node for “a system”, so in the landscape a Lambda icon stands for a whole service.