# Architecture Diagram Templates Auto-generated Mermaid diagrams for visualizing codebase structure. These diagrams are derived from actual code analysis — not hand-drawn, not aspirational. Every diagram should reflect what the code **actually does**, not what the author wishes it did. ## Table of Contents - [How to Generate Diagrams](#how-to-generate-diagrams) - [Package Dependency Graph](#1-package-dependency-graph) - [Data Flow Diagram](#2-data-flow-diagram) - [Component Relationship Diagram](#3-component-relationship-diagram) - [Call Hierarchy Diagram](#4-call-hierarchy-diagram) - [Interface Implementation Map](#5-interface-implementation-map) - [Module Boundary Diagram](#6-module-boundary-diagram) - [Sequence Diagram for Key Flows](#7-sequence-diagram-for-key-flows) --- ## How to Generate Diagrams Diagrams are generated by analyzing actual code, not by guessing. Follow this process: ### For Go projects ```bash # List all packages and their imports go list -json ./... | jq '{ImportPath, Imports}' # Find interfaces and their implementations grep -rn 'type.*interface' --include='*.go' . grep -rn 'func.*) .*(' --include='*.go' . | head -50 # Map package dependencies go list -m -json all ``` ### For TypeScript/Node projects ```bash # Find all imports grep -rn "from ['\"]" --include='*.ts' src/ # Find interfaces and classes grep -rn "export interface\|export class\|export type" --include='*.ts' src/ # Check package.json dependencies cat package.json | jq '.dependencies, .devDependencies' ``` ### For Python projects ```bash # Find all imports grep -rn "^from \|^import " --include='*.py' src/ # Find classes and their bases grep -rn "class .*:" --include='*.py' src/ # Check dependency declarations cat pyproject.toml # or requirements.txt ``` After gathering this data, generate the appropriate Mermaid diagrams below. --- ## 1. Package Dependency Graph Shows which packages depend on which. The most important diagram for understanding architecture. ### Template ````markdown ```mermaid graph TD subgraph "Layer 5 — Entry Points" CMD[cmd/] end subgraph "Layer 4 — Interfaces" UI[ui/] SDK[sdk/] API[api/] end subgraph "Layer 3 — Business Logic" CORE[core/] SVC[services/] end subgraph "Layer 2 — Infrastructure" CFG[config/] LOG[logging/] end subgraph "Layer 1 — Utilities" UTIL[utils/] end subgraph "Layer 0 — Types" TYPES[types/] end CMD --> UI CMD --> API UI --> CORE SDK --> CORE API --> SVC CORE --> CFG CORE --> UTIL SVC --> CFG CFG --> TYPES UTIL --> TYPES LOG --> TYPES style TYPES fill:#e8f5e9 style UTIL fill:#e3f2fd style CFG fill:#e3f2fd style LOG fill:#e3f2fd style CORE fill:#fff3e0 style SVC fill:#fff3e0 style UI fill:#fce4ec style SDK fill:#fce4ec style API fill:#fce4ec style CMD fill:#f3e5f5 ``` ```` ### Generation Guidance When generating this diagram from real code: 1. Run `go list -json ./...` (or equivalent for your language) 2. For each package, extract its internal imports 3. Group packages by their layer assignment (from lint-deps rules) 4. Draw edges for each internal import relationship 5. Color by layer level (green=L0, blue=L1-2, orange=L3, pink=L4, purple=L5) Important: only include **internal** dependencies, not stdlib or third-party. --- ## 2. Data Flow Diagram Shows how data moves through the system end-to-end. ### Template ````markdown ```mermaid flowchart LR INPUT["User Input
CLI args / HTTP request"] PARSE["Parse & Validate
cmd/parse.go"] LOGIC["Business Logic
core/processor.go"] STORE["Storage Layer
storage/db.go"] OUTPUT["Output
stdout / HTTP response"] INPUT --> PARSE PARSE --> LOGIC LOGIC --> STORE STORE --> LOGIC LOGIC --> OUTPUT subgraph "Config" CFG["config/config.go"] end CFG -.-> PARSE CFG -.-> LOGIC CFG -.-> STORE ``` ```` ### Generation Guidance To map data flow accurately: 1. Find entry points (`main()`, HTTP handlers, CLI command handlers) 2. Trace what happens to user input step by step 3. Note which files/functions are involved at each step — include the actual file path 4. Identify where data is transformed, stored, or returned 5. Show config/logging as dotted lines (support infrastructure, not primary flow) --- ## 3. Component Relationship Diagram Shows the major components and their interactions. Best for projects with clear module boundaries. ### Template ````markdown ```mermaid graph TB subgraph "Public API Surface" REST["REST API
api/router.go:25"] GRPC["gRPC Service
api/grpc/server.go:18"] CLI_CMD["CLI Commands
cmd/root.go:42"] end subgraph "Core Domain" AUTH["Auth Service
core/auth/service.go:15"] USER["User Service
core/user/service.go:22"] BILLING["Billing Engine
core/billing/engine.go:30"] end subgraph "Infrastructure" DB["Database
infra/postgres/client.go:10"] CACHE["Cache
infra/redis/client.go:8"] QUEUE["Message Queue
infra/queue/producer.go:12"] end REST --> AUTH REST --> USER GRPC --> BILLING CLI_CMD --> USER AUTH --> DB AUTH --> CACHE USER --> DB BILLING --> DB BILLING --> QUEUE ``` ```` ### Generation Guidance 1. Identify major service/component boundaries 2. For each component, find the primary file and line where it's defined 3. Map method calls between components (grep for cross-package function calls) 4. Group by architectural layer --- ## 4. Call Hierarchy Diagram Shows the function call chain for critical code paths. ### Template ````markdown ```mermaid graph TD A["main()
main.go:15"] B["cmd.Execute()
cmd/root.go:42"] C["runCommand()
cmd/run.go:28"] D["service.Process()
core/service.go:55"] E["validator.Check()
core/validate.go:12"] F["store.Save()
storage/store.go:33"] G["reporter.Output()
output/report.go:20"] A --> B B --> C C --> D D --> E D --> F D --> G E -->|"validation error"| C F -->|"storage error"| D ``` ```` ### Generation Guidance 1. Start from the entry point of the flow you want to document 2. Use LSP `outgoingCalls` to trace the call chain, or grep for function invocations 3. Include the file and line number for each function 4. Show error paths as labeled edges 5. Keep it to 8-12 nodes max — if more complex, split into sub-diagrams --- ## 5. Interface Implementation Map Shows which types implement which interfaces. Critical for understanding extensibility. ### Template ````markdown ```mermaid classDiagram class Provider { <> +Execute(ctx, input) Result, error +Name() string +SupportsStream() bool } class OpenAIProvider { -client *openai.Client -model string +Execute(ctx, input) Result, error +Name() string +SupportsStream() bool } class AnthropicProvider { -client *anthropic.Client -model string +Execute(ctx, input) Result, error +Name() string +SupportsStream() bool } class MockProvider { -responses []Result +Execute(ctx, input) Result, error +Name() string +SupportsStream() bool } Provider <|.. OpenAIProvider : implements Provider <|.. AnthropicProvider : implements Provider <|.. MockProvider : implements note for Provider "Defined in core/types/provider.go:18" note for OpenAIProvider "Defined in providers/openai/provider.go:25" note for AnthropicProvider "Defined in providers/anthropic/provider.go:22" note for MockProvider "Defined in testing/mock_provider.go:10" ``` ```` ### Generation Guidance 1. Find all interfaces: `grep -rn 'type.*interface' --include='*.go'` 2. Find implementations by matching method signatures 3. For each implementation, list its struct fields (private) and methods (public) 4. Add source file location as notes 5. Focus on the most important interfaces — don't try to diagram everything --- ## 6. Module Boundary Diagram Shows public vs internal API surface. Useful for library/SDK projects. ### Template ````markdown ```mermaid graph TB subgraph "Public API (exported)" PUB_TYPES["Types
pkg/types.go
Config, Options, Result"] PUB_FUNC["Functions
pkg/client.go
New(), Run(), Close()"] PUB_IFACE["Interfaces
pkg/interfaces.go
Provider, Store"] end subgraph "Internal (unexported)" INT_CORE["Core Logic
internal/core/"] INT_PARSE["Parsing
internal/parse/"] INT_UTIL["Utilities
internal/util/"] end PUB_FUNC --> INT_CORE PUB_FUNC --> INT_PARSE INT_CORE --> INT_UTIL INT_PARSE --> INT_UTIL style PUB_TYPES fill:#c8e6c9 style PUB_FUNC fill:#c8e6c9 style PUB_IFACE fill:#c8e6c9 style INT_CORE fill:#ffecb3 style INT_PARSE fill:#ffecb3 style INT_UTIL fill:#ffecb3 ``` ```` --- ## 7. Sequence Diagram for Key Flows Shows time-ordered interactions between components for specific user scenarios. ### Template ````markdown ```mermaid sequenceDiagram participant User participant CLI as CLI (cmd/run.go) participant Auth as Auth Service (core/auth/) participant DB as Database (storage/) participant API as External API User->>CLI: run --project my-app CLI->>Auth: Authenticate(token) Auth->>DB: GetUser(token) DB-->>Auth: User{id, role} Auth-->>CLI: AuthResult{ok, user} CLI->>API: FetchProject("my-app") API-->>CLI: ProjectData{...} CLI-->>User: Display results ``` ```` ### Generation Guidance 1. Pick the 3-5 most common/important user flows 2. Trace the complete sequence from user input to final output 3. Include actual component names and file paths 4. Show both success and error paths 5. Keep each sequence to 10-15 messages max --- ## Diagram Selection Guide Not every project needs all seven diagram types. Choose based on what matters: | Project Type | Recommended Diagrams | |---|---| | CLI tool | Package Dependency, Data Flow, Call Hierarchy | | Web API | Package Dependency, Component Relationship, Sequence | | Library/SDK | Package Dependency, Interface Implementation, Module Boundary | | Microservice | Component Relationship, Data Flow, Sequence | | Monolith | Package Dependency, Component Relationship, Interface Implementation | ## Diagram Quality Checklist Every generated diagram should pass these checks: - [ ] **Grounded in code**: Every node references an actual file/package (not aspirational) - [ ] **File references**: Include `code>file:line` where possible - [ ] **No orphan nodes**: Every node has at least one connection - [ ] **Layered layout**: Higher-level components at top, lower at bottom - [ ] **Color coding**: Consistent colors across diagrams in the same project - [ ] **Reasonable size**: 5-15 nodes per diagram; split if larger - [ ] **Updated date**: Note when the diagram was last regenerated