Install Archy
Open VS Code and install the extension:
- Press
Cmd+Shift+X(Mac) orCtrl+Shift+X(Windows/Linux) - Search for Archy
- Click Install
Or from the terminal:
code --install-extension nischalon10.archy
Create your first file
Create a new file anywhere in your workspace and name it with a .archy extension — for example, architecture.archy.
Paste this to start:
{
"version": "2",
"name": "My First Diagram",
"nodes": [
{ "id": "frontend", "type": "frontend", "name": "Web App" },
{ "id": "api", "type": "service", "name": "API Service" },
{ "id": "db", "type": "database", "name": "Database" }
],
"edges": [
{ "id": "e1", "from": "frontend", "to": "api", "type": "calls", "label": "HTTPS" },
{ "id": "e2", "from": "api", "to": "db", "type": "writes", "label": "SQL" }
]
}
Save the file. Archy opens it as a diagram automatically.
Explore the canvas
Navigate the canvas:
- Scroll or trackpad pinch to zoom
- Click and drag the background to pan
- Drag any node to reposition it
Toolbar buttons (top-left):
- Fit — fit the diagram to the window
- Lock — prevent nodes from being dragged
- Edit / View — switch between edit and view mode
Click a node or edge — the Detail Panel opens on the right, showing the element's type, description, metadata, and notes.
Activity Bar (Archy icon on the left):
- Minimap — thumbnail of the whole diagram; click to navigate
- Elements — list of all nodes and edges; click any to focus it on the canvas
- Settings — toggle display options and switch modes
Add more nodes and edges
Add a message queue to the diagram. Edit the JSON directly:
{
"version": "2",
"name": "My First Diagram",
"nodes": [
{ "id": "frontend", "type": "frontend", "name": "Web App" },
{ "id": "api", "type": "service", "name": "API Service" },
{ "id": "task-queue", "type": "queue", "name": "Task Queue" },
{ "id": "worker", "type": "batch-job", "name": "Background Worker" },
{ "id": "db", "type": "database", "name": "Database" }
],
"edges": [
{ "id": "e1", "from": "frontend", "to": "api", "type": "calls", "label": "HTTPS" },
{ "id": "e2", "from": "api", "to": "task-queue", "type": "publishes", "label": "AMQP" },
{ "id": "e3", "from": "worker", "to": "task-queue", "type": "consumes" },
{ "id": "e4", "from": "worker", "to": "db", "type": "writes", "label": "SQL" }
]
}
Save. The diagram updates instantly.
Add descriptions and metadata
Enrich nodes with context. This appears in the detail panel when you click a node:
{
"id": "api",
"type": "service",
"name": "API Service",
"description": "Handles authentication and request routing.",
"_meta": {
"technology": "Node.js / Express",
"team": "platform-team",
"port": 3000
},
"notes": "Rate limited at 1000 req/min per client. See runbook for override procedure."
}
description— shown in the node card on the canvas_meta— key-value table in the detail panel (infrastructure detail, not rendered on canvas)notes— markdown, shown in the Notes section of the detail panel; click "Edit in editor" to open a full VS Code markdown editor
Group related nodes
Use groups to draw team or network boundaries:
{
"version": "2",
"nodes": [ ... ],
"edges": [ ... ],
"groups": [
{
"id": "internal",
"label": "Internal VPC",
"type": "zone",
"nodes": ["api", "task-queue", "worker", "db"]
}
]
}
Groups render as shaded regions on the canvas. "type": "zone" gives a dashed indigo border (network boundary). "type": "logical" gives a solid teal border (domain or team boundary).
All node types
| Type | Use for |
|---|---|
service | Microservice, backend application |
api | Named API surface (REST, GraphQL, gRPC) |
kafka-topic | A specific Kafka topic (not the cluster) |
queue | Message queue (RabbitMQ, SQS, Service Bus) |
database | Any data store (PostgreSQL, Redis, S3) |
frontend | Web SPA, mobile app, desktop client |
batch-job | Scheduled job, ETL, cron task |
external | Third-party service, external SaaS |
actor | Human user, team, external persona |
gateway | API gateway, load balancer, reverse proxy |
broker | Message broker platform (Kafka cluster, etc.) |
datastore | Data lake, warehouse, data platform |
All edge types
| Type | Use for | Style |
|---|---|---|
calls | Synchronous HTTP/RPC/gRPC | Solid arrow |
publishes | Producing events to a topic/queue | Solid arrow |
consumes | Consuming events from a topic/queue | Dashed, reversed arrow |
writes | Writing data to a store | Solid arrow |
reads | Reading data from a store | Dashed, reversed arrow |
streams | Continuous/streaming data flow | Thick solid arrow |
triggers | Webhook, scheduler, event-driven execution | Dashed arrow |
uses | Catch-all for non-specific dependencies | Solid arrow |
The reads and consumes arrow points at the data source — visually showing data flowing toward the consumer.
Edit mode
Switch to Edit mode in the Archy Settings sidebar (Activity Bar → Archy → Settings → Edit button).
In Edit mode:
- Drag nodes to reposition — positions save to
x-archy.positionsin the file - Click a node → edit its Name and Description inline in the detail panel
- Click a node → Metadata section → add, edit, or remove key-value pairs
- Click a node → Notes section → click "Edit in editor" to write markdown notes in a full VS Code panel
All changes auto-save to the .archy file within half a second.
Tips
Keep IDs kebab-case. order-service, user-db, charge-topic. Short and readable.
Use edge labels for protocols. "label": "HTTPS", "label": "gRPC", "label": "AMQP". These show as small chips on the edge.
Put infrastructure details in _meta. Technology stack, team owner, compliance tier, port numbers. Not on the canvas — in the detail panel.
Commit the x-archy section. After arranging your diagram, the positions are in x-archy.positions. Committing this means teammates see the same layout when they open the file.
Let AI draft the initial file. See Using AI with Archy — a language model can turn a text description of your system into a complete .archy file in seconds.