| name | description |
|---|---|
ascii-diagram |
Create ASCII architecture diagrams, system designs, tables, and technical illustrations using box-drawing characters. Use when asked to draw diagrams, visualize architecture, create flowcharts, or illustrate system components. |
Create clean, professional ASCII diagrams for system architecture, flowcharts, tables, and technical documentation.
- Visualizing system architecture
- Creating flowcharts or process diagrams
- Drawing network topologies
- Making tables with borders
- Illustrating data flow
- Documenting component relationships
- Creating technical diagrams for documentation
- Use Unicode box-drawing characters for clean, professional appearance
- Maintain alignment with consistent spacing and column widths
- Layer components to show hierarchy and relationships
- Add shadows (░ character) for depth
- Use consistent styles within a single diagram
- Label clearly with concise text inside or near components
┌─────────┐
│ Title │
└─────────┘
Corners: ┌ ┐ └ ┘
Lines: ─ │
T-joints: ┬ ┴ ├ ┤
Cross: ┼
╔═════════╗
║ Title ║
╚═════════╝
Corners: ╔ ╗ ╚ ╝
Lines: ═ ║
T-joints: ╦ ╩ ╠ ╣
Cross: ╬
╭─────────╮
│ Title │
╰─────────╯
Corners: ╭ ╮ ╰ ╯
┏━━━━━━━━━┓
┃ Title ┃
┗━━━━━━━━━┛
Corners: ┏ ┓ ┗ ┛
Lines: ━ ┃
╔═════════╗
║ Title ║░
╚═════════╝░
░░░░░░░░░░
Shadow character: ░
──▶ ◀── (horizontal)
│
▼ (vertical)
│
▲
Alternative: → ← ↑ ↓
Component A ───HTTP──▶ Component B
Component A ════API═══▶ Component B
Component A ◀────▶ Component B
Component A ◀═══▶ Component B
╔═ turbopuffer ════════════════════════════╗
╔════════════╗ ║ ║░
║ ║░ ║ ┏━━━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━┓ ║░
║ client ║░───API──▶║ ┃ Memory/ ┃────▶┃ Object ┃ ║░
║ ║░ ║ ┃ SSD Cache ┃ ┃ Storage (S3) ┃ ║░
╚════════════╝░ ║ ┗━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━┛ ║░
░░░░░░░░░░░░░░ ║ ║░
╚══════════════════════════════════════════╝░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Key Features:
- Double-line outer box (╔═╗) for main service
- Heavy-line inner boxes (┏━┓) for components
- Simple shadows (░) for depth
- Clear API connection with labeled arrow
- Title integrated into top border
┌─ Limits ────────────────────────────────────────────────────────────────────┐
│ Metric Observed in production │
├─────────────────────────────────────────────────────────────────────────────┤
│ Max documents (global) 11T+ @ 1PB │
│ Max documents (queried simultaneously) 100B+ @ 10TB │
│ Max documents (per namespace) 500M+ @ 2TB │
│ Max number of namespaces 100M+ │
│ Max write throughput (global) 10M+ writes/s @ 32GB/s │
│ Max write throughput (per namespace) 32k+ writes/s @ 64MB/s │
│ Max queries (global) 10k+ queries/s │
│ Max queries (per namespace) 1k+ queries/s │
└─────────────────────────────────────────────────────────────────────────────┘
Key Features:
- Title in top border
- Header separator with ├─┤
- Single-line style for clean readability
- Properly aligned columns
- Simple and readable design
┌─────────────────┐
│ Web Browser │
└────────┬────────┘
│ HTTPS
▼
╔══════════════════════════╗
║ Load Balancer (ALB) ║
╚════════════╦═════════════╝
║
┌───────────────╬───────────────┐
│ │ │
▼ ▼ ▼
┏━━━━━━━━━┓ ┏━━━━━━━━━┓ ┏━━━━━━━━━┓
┃ Web 1 ┃ ┃ Web 2 ┃ ┃ Web 3 ┃
┃ (EC2) ┃ ┃ (EC2) ┃ ┃ (EC2) ┃
┗━━━━┳━━━━┛ ┗━━━━┳━━━━┛ ┗━━━━┳━━━━┛
│ │ │
└───────────────┼───────────────┘
│
▼
╔════════════════╗
║ PostgreSQL ║░
║ Primary DB ║░
╚════════════════╝░
░░░░░░░░░░░░░░░░░░
Key Features:
- Double-line boxes (╔═╗) for infrastructure components
- Heavy-line boxes (┏━┓) for application servers
- Shadows (░) on database for emphasis
- Clear flow from top to bottom
- Labeled connections showing protocol
User Write
┌─────┐
│█████│
WAL │█████│
s3://tpuf/{namespace_id}/wal └──┬──┘
│
│
╔═══════════════════════════════════╬══════════════╗
║┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌ ─│─ ┐ ║░
║│█████│ │█████│ │█████│ │█████│ ▼ ║░
║│█████│ │█████│ │█████│ │█████│ │ │ ║░
║└─────┘ └─────┘ └─────┘ └─────┘ ─ ─ ─ ║░
║ 001 002 003 004 005 ║░
╚══════════════════════════════════════════════════╝░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Key Features:
- Shows user writing data into a WAL segment
- Numbered segments (001-005) for sequential writes
- Filled blocks (█) to indicate data
- Dashed box for the current write target
- Cross junction (╬) for data flow into container
╔══turpuffer region═══════╗ ╔═══Object Storage═════════════════╗
║ ┌────────────────┬─╬─┐ ║ ┏━━Indexing Queue━━━━━━━━━━━━━━┓ ║░
║ │ ./tpuf indexer │ ║░│ ║ ┃■■■■■■■■■ ┃ ║░
║ └────────────────┘ ║░│ ║ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ║░
║ ┌────────────────┐ ║░│ ║ ┏━/{org_id}/{namespace}━━━━━━━━┓ ║░
║ │ ./tpuf indexer │ ║░│ ║ ┃ ┏━/wal━━━━━━━━━━━━━━━━━━━━━┓ ┃ ║░
║ └────────────────┘ ║░└───▶║ ┃ ┃■■■■■■■■■■■■■■■◈◈◈◈ ┃ ┃ ║░
║ ║░ ║ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┃ ║░
║ ║░┌───▶║ ┃ ┏━/index━━━━━━━━━━━━━━━━━━━┓ ┃ ║░
║ ┌────────────────┐ ║░│ ║ ┃ ┃■■■■■■■■■■■■■■■ ┃ ┃ ║░
║ ┌─▶│ ./tpuf query │ ║░│ ║ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┃ ║░
┌──╩─┐ │ └────────────────┘ ║░│ ║ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ║░
╔══════════╗ │ │ │ ┌────────────────┐ ║░│ ╚══════════════════════════════════╝░
║ Client ║───▶│ LB │─┼─▶│ ./tpuf query │─╬─┘ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
╚══════════╝░ │ │ │ └────────────────┘ ║░
░░░░░░░░░░░░ └──╦─┘ │ ┌────────────────┐ ║░
║ └─▶│ ./tpuf query │ ║░
║ └────────────────┘ ║░
║ ║░
╚═════════════════════════╝░
░░░░░░░░░░░░░░░░░░░░░░░░░░░
Key Features:
- Multiple nested layers showing storage hierarchy
- Load balancer (LB) distributing to query servers
- Indexer processes writing to object storage
- Progress indicators (■ and ◈) showing queue status
- Complex routing with multiple connection types
- Deep nesting: region → services, storage → namespace → wal/index
- Sketch component hierarchy
- Identify main vs. secondary components
- Determine flow direction (usually left-to-right or top-to-bottom)
- Main services: Double-line boxes (╔═╗)
- Sub-components: Heavy-line boxes (┏━┓)
- Containers/groups: Single-line boxes (┌─┐)
- External systems: Rounded boxes (╭─╮)
- Align boxes vertically and horizontally
- Use consistent padding inside boxes
- Keep arrow lengths similar for parallel connections
- Label connections (HTTP, API, Data, etc.)
- Number steps in sequence diagrams
- Use shadows for main components only
- Don't overcomplicate - clarity over detail
- Group related components
- Use whitespace effectively
Request-Response:
Client ──request──▶ Server
◀─response──
Pub-Sub:
Publisher ──▶ Message Queue ──▶ Subscriber 1
│
├──▶ Subscriber 2
│
└──▶ Subscriber 3
Master-Replica:
┌────────┐
│ Master │
└───┬────┘
│
┌───────┼───────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Replica │ │Replica │ │Replica │
│ 1 │ │ 2 │ │ 3 │
└────────┘ └────────┘ └────────┘
Box: ┌───────┐
│ Text │
└───────┘
Emphasized: ╔═══════╗
║ Text ║
╚═══════╝
With Shadow: ┌───────┐
│ Text │░
└───────┘░
░░░░░░░░
Arrow: ────▶
Connection: ┌───┐
│ A │────┐
└───┘ │
▼
┌───┐ ┌───┐
│ B │ │ C │
└───┘ └───┘
- Start simple - Add complexity gradually
- Test alignment - View in monospace font
- Use proper Unicode - Don't mix ASCII and box-drawing
- Group logically - Related components should be visually close
- Iterate - Adjust spacing and alignment as needed
For quick copy-paste:
Box Drawing: ─ │ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼
═ ║ ╔ ╗ ╚ ╝ ╠ ╣ ╦ ╩ ╬
━ ┃ ┏ ┓ ┗ ┛ ┣ ┫ ┳ ┻ ╋
─ │ ╭ ╮ ╰ ╯
Arrows: → ← ↑ ↓ ▶ ◀ ▲ ▼ ⇒ ⇐ ⇑ ⇓
Shading: ░ ▒ ▓ █
Misc: • ○ ◆ ◇ ■ □ ▪ ▫