paperchart — architecture
Grouped service diagram. Each top-level group is a labeled panel with its own
header and caption; services stack inside the panel. Connections cross panel
boundaries and are drawn with smooth bézier curves plus arrowheads.
When to use
- System architecture posts (client / edge / backend / data).
- Explaining request routing and data dependencies.
- Any layered system with grouping semantics.
Input shape
{
"data": {
"groups": [
{ "id": "client", "label": "client", "caption": "browser + native",
"services": [
{ "id": "web", "label": "web app", "caption": "React SPA" },
{ "id": "mobile", "label": "mobile", "caption": "iOS + Android" }
]
},
{ "id": "edge", "label": "edge", "caption": "global, stateless",
"services": [
{ "id": "gateway", "label": "API gateway", "caption": "auth + rate limit", "accent": true }
]
},
{ "id": "backend", "label": "backend", "caption": "regional, stateful",
"services": [
{ "id": "search", "label": "search service" },
{ "id": "users", "label": "users service" }
]
}
],
"connections": [
{ "from": "web", "to": "gateway", "accent": true },
{ "from": "mobile", "to": "gateway" },
{ "from": "gateway", "to": "search" },
{ "from": "gateway", "to": "users", "dashed": true }
]
}
}
Connection options
label — text rendered on the curve, with a bg-tinted box behind it.
accent: true — draws in the theme accent.
dashed: true — dashed stroke (optional, async, fallback path).
bidirectional: true — arrowheads on both ends.
Layout
- Groups are stacked left-to-right by order in the input.
- Services inside a group stack top-to-bottom.
- Group widths auto-distribute across the canvas; all groups share the same
height (determined by the group with the most services).
- Labels on edges stagger along the path index so parallel fan-out edges
(one gateway → many services) don't stack at the same midpoint.
CLI
paperchart architecture -i data.json -o arch.png
paperchart architecture --defaults -o arch.png
1---2name: paperchart-architecture3description: Render a system-architecture diagram. Services are grouped into labeled panels (client, edge, backend, data, observability, …); each panel stacks its services vertically. Connections draw smooth cubic bézier curves between services and can be marked accent, dashed, or bidirectional. Use for architecture posts, design documents, onboarding diagrams.4license: MIT5---67# paperchart — architecture89Grouped service diagram. Each top-level group is a labeled panel with its own10header and caption; services stack inside the panel. Connections cross panel11boundaries and are drawn with smooth bézier curves plus arrowheads.1213## When to use1415- System architecture posts (client / edge / backend / data).16- Explaining request routing and data dependencies.17- Any layered system with grouping semantics.1819## Input shape2021```json22{23 "data": {24 "groups": [25 { "id": "client", "label": "client", "caption": "browser + native",26 "services": [27 { "id": "web", "label": "web app", "caption": "React SPA" },28 { "id": "mobile", "label": "mobile", "caption": "iOS + Android" }29 ]30 },31 { "id": "edge", "label": "edge", "caption": "global, stateless",32 "services": [33 { "id": "gateway", "label": "API gateway", "caption": "auth + rate limit", "accent": true }34 ]35 },36 { "id": "backend", "label": "backend", "caption": "regional, stateful",37 "services": [38 { "id": "search", "label": "search service" },39 { "id": "users", "label": "users service" }40 ]41 }42 ],43 "connections": [44 { "from": "web", "to": "gateway", "accent": true },45 { "from": "mobile", "to": "gateway" },46 { "from": "gateway", "to": "search" },47 { "from": "gateway", "to": "users", "dashed": true }48 ]49 }50}51```5253## Connection options5455- `label` — text rendered on the curve, with a bg-tinted box behind it.56- `accent: true` — draws in the theme accent.57- `dashed: true` — dashed stroke (optional, async, fallback path).58- `bidirectional: true` — arrowheads on both ends.5960## Layout6162- Groups are stacked left-to-right by order in the input.63- Services inside a group stack top-to-bottom.64- Group widths auto-distribute across the canvas; all groups share the same65 height (determined by the group with the most services).66- Labels on edges stagger along the path index so parallel fan-out edges67 (one gateway → many services) don't stack at the same midpoint.6869## CLI7071```bash72paperchart architecture -i data.json -o arch.png73paperchart architecture --defaults -o arch.png74```