c4-model · v1.0 · 2026-08-31 · sha256 65b2d4c2f03c1d19

c4-model v1.0A

Immutable. This exact content is served forever at /api/v1/blob/65b2d4c2f03c1d19.

---
name: c4-model
description: WHAT — C4 model methodology (Context, Container, Component, Code) guidance — what to draw at each level, when, and how to render C4-inspired diagrams via Mermaid (PlantUML/Structurizr optional advanced). Methodology not renderer.
origin:
  type: first-party
metadata:
  author: ulises-jeremias
  version: '1.0'
  tags:
  - c4
  - architecture
  - structurzr
  - plantuml
  - mermaid
---

# C4 Model — Methodology Overlay (WHAT → HOW via Mermaid)

**Sources (2026-08-12):** Simon Brown C4 https://c4model.com/ (Context, Container, Component, Code); Structurizr DSL https://github.com/structurizr/dsl (open-source DSL, paid cloud) + `structurizr-mcp` https://github.com/cubical6/structurizr-mcp + `go-structurizr`; C4-PlantUML https://github.com/plantuml-stdlib/C4-PlantUML; overarch https://github.com/soulspace-org/overarch (PlantUML/Structurizr generation); rendering **via Mermaid** `mermaid-js/mermaid` MIT per §44.

> **Pack:** `architecture` core (`architect + ADR + TRD + threat-model + mermaid (+ C4 via mermaid)`) — `c4-model` teaches *what* to draw; `mermaid` renders it. See `docs/architecture/research-385-diagram.md` for C4 vs Mermaid vs PlantUML/Structurizr decision (Excalidraw/draw.io REJECT).

## When to use

- Need system Context / Container / Component / Code views.

## Instructions

1. **Select level:** Context (system + actors) → Container (apps/data stores) → Component (modules) → Code (classes, optional).
2. **Render via Mermaid** (C4-inspired): `flowchart TD` with `subgraph` for boundaries, e.g.:
   ```mermaid
   flowchart TD
     user([User]) --> web[Web Container]
     web --> api[API Container]
     api --> db[(Database Container)]
     subgraph System Context
       user; web; api; db
     end
   ```
3. **Advanced (optional):** For consistency checks across views, use Structurizr DSL (`structurizr-cli` + `workspace.dsl` → PlantUML/Mermaid) or C4-PlantUML (`@startuml` + `!include C4_Context.puml`); note `structurizr` CLI requires DSL file and is heavier.

## Collaboration

- `architect` defines system → `c4-model` selects C4 level → `mermaid` renders → `ADR` records decision.

## Anti-patterns

- Do not mandate Structurizr DSL for every diagram — Mermaid suffices for most.
- Do not dump PlantUML infra as separate skill — keep as optional note.