Opening the shared document…
Diagram playground
Canvas editing for six of ten notations. Nothing leaves your browser. Syntax reference
What you can do on the canvas, and how the formats relate
- a C4 node drags to a position the text records
- a flowchart step drags to a position the text pins it at, while every step left unpinned stays solved from the arrows
- a use case or an actor drags to a position the text records, and the boundary grows around it rather than cropping it
- an ER entity drags to a position the text records, while its connectors still leave the faces the solved columns chose
- a sequence message or lifeline drags into a new order, its wording edited in place
- a C4 node's type, name, description, technology, icon, colour, tags and boundary edited in the details panel beside it, where a child view is added or removed, a selected boundary renamed or removed, and a selected relationship's wording, direction and line style edited — or the relationship deleted
- a selected flowchart step's wording, technology and tags are edited in the details dock, and a selected arrow's guard label with them — or the arrow removed
- a selected use case or actor's wording, technology and tags are edited in the details dock
- a selected ER entity's wording, technology and tags are edited in the detail panel, and a relationship's verb in its own
- a dictionary section or field drags to a new place in the reading order, which is the order the text already states
- a new C4 node — or a reference to an element from an outer level — added from the palette, at a spot the text records
- a flowchart step is added by splitting an arrow, which writes the step between the two it already joined
- a relationship drawn from one C4 element onto another — or onto a new element added with it — landing as a relationship line
- a flowchart arrow is drawn by dragging from one step to another, writing the connection as a line of text
- a use case diagram's title and description are retyped in the heading the canvas already draws above the boundary
- a dictionary's title is retyped in the heading above the table
- C4 nodes group into a boundary with a drag selection — the Select / Pan toggle by the zoom controls makes a drag pan instead
- on a sequence diagram: reword a step · change ends · move a step in time · remove a step · rename a lifeline · move a column · remove a lifeline · add a step · add a lifeline · number the steps
- the other kinds lay themselves out from the text
.alab is the format to write: it is what the syntax reference documents, what share links carry, and what reads cleanly in a code review. .archlab.json is the same C4 model on disk — the interchange form any other tool can read without implementing a grammar; the two are lossless twins in both directions (proved on every build), so you never have to write the JSON by hand. Mermaid is read and written too, lossily — the format toggle above the pane converts in place and states what each direction drops.
1
archlab 1.0 dict
2
title "Customer API"
3
description "Every field the customer endpoints return, what it means, and where it comes from"
4
5
@dict
6
section "Customer" [REST payload] #api
7
desc "Returned by GET /customers/:id and embedded in every order"
8
field id uuid required unique
9
desc "Stable identifier. Never reused, so a deleted customer's id stays dead."
10
source "accounts.customer.id"
11
values "RFC 4122"
12
example "9f2a1c3e-1c2f-4b6a-9c1e-0f2a1c3e4b5a"
13
field email string required unique pii
14
desc "Lowercased on write, which is what lets it be a unique key. Verified before an order may be placed."
15
source "accounts.customer.email"
16
values "RFC 5322"
17
field display_name string
18
desc "What the customer asked to be called. Free text — do not parse it into first and last."
19
source "accounts.customer.display_name"
20
field lifetime_value decimal(10,2) derived
21
desc "Sum of settled orders. Recomputed nightly, so it lags a same-day order by up to 24 hours."
22
source "warehouse.customer_ltv"
23
example "1284.50"
24
field legacy_crm_ref string deprecated
25
desc "The pre-2024 identifier. Still written for the reporting export; read nothing new from it."
26
source "crm.contact_ref"
27
section "Order summary" [REST payload]
28
desc "The abbreviated order embedded in a customer response"
29
field id uuid required unique
30
desc "The order's own identifier."
31
source "orders.order.id"
32
field status string required
33
desc "Where the order is in its lifecycle."
34
values "one of draft | sent | paid | refunded"
35
example "paid"
36
field placed_at timestamptz required
37
desc "When the customer confirmed, not when the payment settled."
38
source "orders.order.placed_at"
Tab indents · Esc then Tab leaves the editor · syntax reference
Read-only