Diagrams your agent can defend: hands-on with Archify, the 73K-star skill for verifiable architecture diagrams
Archify turns system descriptions into interactive, self-contained HTML diagrams — and pins every box to a git citation the renderer verifies against real committed code. We rendered all five diagram types, watched the evidence gate catch three of our own bad citations, and diffed two architectures.
- Archify is an open-source agent skill (MIT, v3.0.1) that turns a typed JSON description into a polished, interactive, self-contained HTML diagram — architecture, workflow, sequence, data-flow, or lifecycle.
- The project has pulled in over 73,000 GitHub stars and peaked at #1 on GitHub trending in late August 2026.
- Every component can carry citations to exact file-and-line ranges that the renderer verifies against the actual committed bytes at a pinned git revision — cite a line that does not exist and the build fails. The tutorial's own three bad citations were caught by the evidence gate one by one.
- Install is one line: npx skills add tt-a1i/archify -g; it works with Cursor, Claude Code, Codex CLI, and OpenCode.
- Output is a single HTML file: inline SVG, dark/light themes, optional trace motion, share cards, deep links, search/focus, presentation mode, and PNG/JPEG/WebP/SVG/WebM export from the viewer.
- Prerequisites: Node.js 18+, a terminal, about thirty minutes, no API keys, no GPU, no Docker. Automatic Mermaid parsing and general-purpose auto-layout are explicitly out of scope.

Architecture diagrams lie. Not on purpose — they rot. Someone draws the system in Mermaid or a whiteboard tool on day one, the code drifts for six months, and the diagram becomes a historical artifact that new hires learn not to trust. The usual fix is process: "update the diagram in every PR." It never survives contact with a deadline.
Archify takes the other route: make the diagram checkable by construction. It is an open-source agent skill (MIT, v3.0.1) that turns a typed JSON description into a polished, interactive, self-contained HTML diagram — architecture, workflow, sequence, data-flow, or lifecycle. And when the diagram claims to describe a real codebase, every component can carry citations to exact file-and-line ranges that the renderer verifies against the actual committed bytes at a pinned git revision. Cite a line that does not exist and the build fails. That last part is what separates it from every Mermaid renderer you have used, and it is a large part of why the project has pulled in over 73,000 GitHub stars, peaked at #1 on GitHub trending in late August 2026, and was still landing commits the morning we tested it.
We ran the whole thing hands-on: cloned the repo, rendered the demo, authored our own architecture JSON for a tiny demo repo, watched the evidence gate reject three of our own bad citations one by one, diffed two architectures, and rendered sequence and lifecycle diagrams. Every command below ran; every failure below actually happened.
What Archify actually is#
Archify ships as an agent skill — a SKILL.md plus a Node CLI that a coding agent invokes. The documented install is one line:
npx skills add tt-a1i/archify -g
It works with Cursor, Claude Code, Codex CLI, and OpenCode. The skill's operating loop is: the agent authors a candidate JSON diagram, then runs a finalize command that gates the output through validation, rendering, provenance checks, and a real-browser check, repairing failures in a bounded loop. You describe the system in plain language ("Browser calls the API, the API checks Redis, a cache miss queries Postgres"); the agent does the reading, authoring, and fixing.
The five diagram types and their schemas:
| Type | Use for | Example in the repo |
|---|---|---|
| architecture | Components, services, cloud/security boundaries, infrastructure | web-app.architecture.json |
| workflow | Processes, approval gates, tool calls, runbooks, CI/CD | agent-tool-call.workflow.json |
| sequence | API call chains, request lifecycles, async traces | cache-miss-request.sequence.json |
| dataflow | Pipelines, ETL/ELT, lineage, governance | product-analytics.dataflow.json |
| lifecycle | State machines, retries, waiting and terminal states | deployment-release.lifecycle.json |
Output is a single HTML file: inline SVG, dark/light themes, optional trace motion, share cards, deep links, search/focus, presentation mode, and PNG/JPEG/WebP/SVG/WebM export from the viewer. When the scenario is ambiguous, archify guide "<scenario>" picks the type for you.
Two things Archify pointedly does not do, straight from the repo: automatic Mermaid parsing and general-purpose auto-layout are explicitly out of scope, as are hosted sharing and WYSIWYG editing. The skill will read your pasted Mermaid for topology and meaning — then it re-authors fresh Archify JSON rather than converting the styling. If you wanted a prettier Mermaid renderer, this is not it; that is the point.
Prerequisites#
- Node.js 18+ (we used Node v24.20.0 on Linux; the skill package needs no install step of its own)
- A terminal, about thirty minutes, no API keys, no GPU, no Docker
- Any git repo if you want the repository-evidence feature — we built a three-file demo app for it
- Optional: Chrome/Chromium (set
ARCHIFY_CHROME) for the browser-check gate — our sandbox had none, and we will be honest about what that cost us
Step 1 — Install and verify#
We tested the CLI straight from a repo clone, which is also the documented path inside the skill:
git clone https://github.com/tt-a1i/archify.git
cd archify
node archify/bin/archify.mjs doctor
doctor checks every runtime the skill needs — template, renderers, preview, visual-check, validators, all five diagram types. Ours came back clean:
[ok] Node.js v24.20.0 (requires >=18)
[ok] Core template
[ok] Example renderer
...
[ok] architecture renderer, schema, and example
[ok] workflow renderer, schema, and example
[ok] sequence renderer, schema, and example
[ok] dataflow renderer, schema, and example
[ok] lifecycle renderer, schema, and example
Archify is ready.
Step 2 — Render your first diagram#
node archify/bin/archify.mjs demo ./demo-out
# Demo ready: ./demo-out/archify-demo.html
One command, one 762 KB HTML file. We checked the claim that matters: the output contained zero external http script or stylesheet references — everything is inline, including the SVG. It works offline, it is emailable, it will still render in ten years. The demo shows the interactive viewer: theme toggle, export menu, and the explorable node cards.

Step 3 — Author your own diagram JSON#
A diagram is a small typed JSON document. Here is the complete architecture candidate we authored for a three-file demo app (an API layer, a background worker, a SQLite store) — every field below passed the repo's schema validator:
{
"schema_version": 1,
"diagram_type": "architecture",
"meta": { "title": "Demo Job Pipeline", "quality_profile": "showcase" },
"components": [
{ "id": "api", "type": "backend", "label": "API layer",
"sublabel": "POST /jobs", "pos": [60, 220], "size": [150, 70] },
{ "id": "worker", "type": "backend", "label": "Worker",
"sublabel": "queue drain", "pos": [300, 220], "size": [150, 70] },
{ "id": "store", "type": "database", "label": "Result store",
"sublabel": "SQLite", "pos": [540, 220], "size": [150, 70] }
],
"connections": [
{ "id": "api-to-worker", "from": "api", "to": "worker",
"label": "enqueue_job" },
{ "id": "worker-to-store", "from": "worker", "to": "store",
"label": "save_result" }
]
}
Component types are a closed enum (frontend, backend, database, cloud, security, messagebus, external), which is how the diagrams keep their consistent visual language instead of devolving into box-and-arrow soup. Positions are explicit coordinates — remember, auto-layout is deliberately out of scope; the agent (or you) places nodes using the authoring defaults.
Step 4 — Finalize: four gates before the HTML counts#
render makes HTML; finalize is the command the skill actually uses, because it refuses to hand you output that has not earned it:
node archify/bin/archify.mjs finalize architecture \
demo-pipeline.architecture.json demo-pipeline.html \
--quality showcase --json
The four gates, in order: validate (schema plus layout rules — overlaps, label collisions, viewport overflow), deliver (render the artifact), check (strict provenance: the HTML embeds the candidate's SHA-256 so the file can prove what source produced it), and browser-check (a real Chromium render pass). A non-zero exit is never success, and each run writes machine-readable receipts next to the artifact.
On our sandbox the first three gates passed and browser-check reported skipped with a clean diagnostic: viewer/chrome-unavailable — Set ARCHIFY_CHROME to its executable path. No Chrome exists in this environment, so we report automated checks only — which is exactly what the skill's own delivery contract demands: never claim visual inspection you did not perform.
Step 5 — Pin every box to real code: repository evidence#
This is the feature that justifies the star count. A diagram that claims to describe a real repository can carry source evidence: each component gets a sources array of {path, line, end_line, label} citations, and meta.repository pins the repo's URL and the full 40-character commit SHA. Pass --repo-root and the validator checks every citation against the committed bytes at that exact revision — read straight from git objects, ignoring replace refs. Uncommitted working-tree edits do not count as evidence.
We added citations to our demo candidate and ran it against our demo repo. The gate rejected us three times — and each rejection was correct:
repository-evidence/url-invalid— our firstmeta.repository.urlwas afile://path; the schema demands a credential-free HTTP(S) or SSH repository address.repository-evidence/git-command— the evidence repo must have anoriginremote; our fresh demo repo did not. Onegit remote add originlater, we moved on.repository-evidence/line-out-of-range— three times, one per file. We had citedapi.pylines 5–8; the file has 7 lines. Thenworker.py13–16 against a 14-line file. Thenstore.py7–10 against an 8-line file. Our hand-counted line numbers were wrong in all three files, and the verifier caught every one against the pinned revision6fb44090….
After fixing the citations, the full gate run passed — validate, deliver, check — and the 745 KB HTML embeds the verified citations. Clicking a node in the viewer surfaces its source references. This is the anti-rot mechanism: a diagram whose citations no longer match the code fails loudly at build time instead of decaying silently in a wiki.

Step 6 — Diff two architectures#
Diagrams change; Archify can show you how. The repo ships a base/head pair for a checkout platform, and compare produces a semantic diff plus a rendered delta page:
node archify/bin/archify.mjs compare architecture \
checkout-platform.base.architecture.json \
checkout-platform.head.architecture.json delta.html --json
The receipt reported exactly what changed between the two revisions: 1 component added, 1 changed, 1 removed, 1 moved; connections added, changed, removed, and rerouted — each keyed by semantic identity, not by raw JSON diffing. For architecture review in a large refactor, that is considerably more useful than eyeballing two pictures.
Sequences and lifecycles#
We also finalized the repo's cache-miss-request.sequence.json (API call chain: web app → cache → database) and agent-run.lifecycle.json — both passed validate/deliver/check. One honest blemish: the deployment-release.lifecycle.json example failed at the deliver stage in our environment with the same viewer/chrome-unavailable diagnostic — that particular example needs Chromium for layout where the others did not. On a normal dev machine with Chrome installed, the skill's repair loop would handle it; in a headless sandbox, it is a real limitation worth knowing about before you build automation on top of it.
When to use Archify vs the alternatives#
| Approach | What it solves | Where Archify fits |
|---|---|---|
| Archify | Polished interactive diagrams with build-time verification against real code | — |
| Mermaid / Mermaid Live | Fast text-to-diagram sketching, zero setup | Sketch in Mermaid, then have your agent re-author the meaning as Archify JSON when the diagram needs to survive and be checkable. There is no automatic Mermaid import — that is an explicit non-goal of the project. |
| Excalidraw / draw.io | Freeform whiteboarding, full manual control | Manual tools give you prettier one-offs; Archify gives you repeatability plus evidence. Different jobs. |
| Docs-as-code diagrams (D2, PlantUML in CI) | Versioned diagrams that render in pipelines | Closest in spirit. Archify's edge is the interactive viewer (search, focus, trace motion, deep links) and the git-byte evidence verification. |
Caveats before you commit#
- The browser gate needs a browser. Without Chrome/Chromium (
ARCHIFY_CHROME),browser-checkskips and one lifecycle example cannot deliver. Budget for that in CI. - Visual quality is opt-in. The skill treats perceptual review as advisory and off by default; automated gates passing is not the same as a human judging the layout good. We report automated checks only.
- It is agent-first. The authoring loop — write candidate, finalize, read the diagnostic, repair, rerun — assumes an agent doing the cycles. Hand-authoring small diagrams is perfectly fine, but the repair references are written for agents.
- Coordinates are manual. No auto-layout means the agent spends effort on placement; the repo ships layout-repair references for exactly this reason.
- Sponsored but MIT. The README carries sponsor placements (Kimi Work, Supercode, OpenLux), but the license is plain MIT — no additional commercial terms hiding in the LICENSE file.
The takeaway#
- The diagram is a build artifact. Typed JSON in, self-contained HTML out — inline SVG, zero external requests, dark/light themes, export to PNG/WebP/SVG and more.
- Evidence is the differentiator. Components cite
{path, line, end_line}against a pinned commit, and the renderer verifies the bytes with git. It caught three of our own wrong citations; that is the feature working as designed. - Finalize, don't just render. The four-gate pipeline (validate → deliver → check → browser-check) with machine-readable receipts is what makes agent-authored diagrams trustworthy.
- Diffs are first-class.
comparegives you semantic architecture diffs — added, removed, moved, rerouted — not pixel comparisons. - Know the boundaries. No automatic Mermaid import (explicit non-goal), no auto-layout, and the browser gate genuinely needs a browser. Everything else we tried worked exactly as documented.
If your team has ever been burned by a beautiful architecture diagram that described a system that no longer exists, Archify is worth the thirty minutes: it makes the diagram prove its claims at build time, or fail trying. That is a bigger idea than prettier boxes.