# Flowchart > **Back to [Style Guide](../mermaid_style_guide.md)** โ€” Read the style guide first for emoji, color, and accessibility rules. **Syntax keyword:** `flowchart` **Best for:** Sequential processes, workflows, decision logic, troubleshooting trees **When NOT to use:** Complex timing between actors (use [Sequence](sequence.md)), state machines (use [State](state.md)) --- ## Exemplar Diagram ```mermaid flowchart TB accTitle: Feature Development Lifecycle accDescr: End-to-end feature flow from idea through design, build, test, review, and release with a revision loop on failed reviews idea([๐Ÿ’ก Feature idea]) --> spec[๐Ÿ“‹ Write spec] spec --> design[๐ŸŽจ Design solution] design --> build[๐Ÿ”ง Implement] build --> test[๐Ÿงช Run tests] test --> review{๐Ÿ” Review passed?} review -->|Yes| release[๐Ÿš€ Release to prod] review -->|No| revise[โœ๏ธ Revise code] revise --> test release --> monitor([๐Ÿ“Š Monitor metrics]) classDef start fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#3b0764 classDef process fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e3a5f classDef decision fill:#fef9c3,stroke:#ca8a04,stroke-width:2px,color:#713f12 classDef success fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d class idea,monitor start class spec,design,build,test,revise process class review decision class release success ``` --- ## Tips - Use `TB` (top-to-bottom) for processes, `LR` (left-to-right) for pipelines - Rounded rectangles `([text])` for start/end, diamonds `{text}` for decisions - Max 10 nodes โ€” split larger flows into "Phase 1" / "Phase 2" diagrams - Max 3 decision points per diagram - Edge labels should be 1โ€“4 words: `-->|Yes|`, `-->|All green|` - Use `classDef` for **semantic** coloring โ€” decisions in amber, success in green, actions in blue ## Subgraph Pattern When you need grouped stages: ```mermaid flowchart TB accTitle: CI/CD Pipeline Stages accDescr: Three-stage pipeline grouping code quality checks, testing, and deployment into distinct phases trigger([โšก Push to main]) subgraph quality ["๐Ÿ” Code Quality"] lint[๐Ÿ“ Lint code] --> format[โš™๏ธ Check formatting] end subgraph testing ["๐Ÿงช Testing"] unit[๐Ÿงช Unit tests] --> integration[๐Ÿ”— Integration tests] end subgraph deploy ["๐Ÿš€ Deployment"] build[๐Ÿ“ฆ Build artifacts] --> ship[โ˜๏ธ Deploy to staging] end trigger --> quality quality --> testing testing --> deploy deploy --> done([โœ… Pipeline complete]) classDef trigger_style fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#3b0764 classDef success fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d class trigger trigger_style class done success ``` --- ## Template ```mermaid flowchart TB accTitle: Your Title Here (3-8 words) accDescr: One or two sentences explaining what this diagram shows and what insight the reader gains start([๐Ÿ Starting point]) --> step1[โš™๏ธ First action] step1 --> decision{๐Ÿ” Check condition?} decision -->|Yes| step2[โœ… Positive path] decision -->|No| step3[๐Ÿ”ง Alternative path] step2 --> done([๐Ÿ Complete]) step3 --> done ``` --- ## Complex Example A 20+ node e-commerce order pipeline organized into 5 subgraphs, each representing a processing phase. Subgraphs connect through internal nodes, decision points route orders to exception handling, and color classes distinguish phases at a glance. ```mermaid flowchart TB accTitle: E-Commerce Order Processing Pipeline accDescr: Full order lifecycle from intake through fulfillment, shipping, and notification with exception handling paths for payment failures, stockouts, and delivery issues order_in([๐Ÿ“ฅ New order]) --> validate_pay{๐Ÿ’ฐ Payment valid?} subgraph intake ["๐Ÿ“ฅ Order Intake"] validate_pay -->|Yes| check_fraud{๐Ÿ” Fraud check} validate_pay -->|No| pay_fail[โŒ Payment **declined**] check_fraud -->|Clear| check_stock{๐Ÿ“ฆ In stock?} check_fraud -->|Flagged| manual_review[๐Ÿ” Manual **review**] manual_review --> check_stock end subgraph fulfill ["๐Ÿ“ฆ Fulfillment"] pick[๐Ÿ“‹ **Pick** items] --> pack[๐Ÿ“ฆ Pack order] pack --> label[๐Ÿท๏ธ Generate **shipping** label] end subgraph ship ["๐Ÿšš Shipping"] handoff[๐Ÿšš Carrier **handoff**] --> transit[๐Ÿ“ In transit] transit --> deliver{โœ… Delivered?} end subgraph notify ["๐Ÿ“ค Notifications"] confirm_email[๐Ÿ“ง Order **confirmed**] ship_update[๐Ÿ“ง Shipping **update**] deliver_email[๐Ÿ“ง Delivery **confirmed**] end subgraph exception ["โš ๏ธ Exception Handling"] pay_fail --> retry_pay[๐Ÿ”„ Retry payment] retry_pay --> validate_pay out_of_stock[๐Ÿ“ฆ **Backorder** created] deliver_fail[๐Ÿ”„ **Reattempt** delivery] end check_stock -->|Yes| pick check_stock -->|No| out_of_stock label --> handoff deliver -->|Yes| deliver_email deliver -->|No| deliver_fail deliver_fail --> transit check_stock -->|Yes| confirm_email handoff --> ship_update deliver_email --> complete([โœ… Order **complete**]) classDef intake_style fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e3a5f classDef fulfill_style fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#3b0764 classDef ship_style fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d classDef warn_style fill:#fef9c3,stroke:#ca8a04,stroke-width:2px,color:#713f12 classDef danger_style fill:#fee2e2,stroke:#dc2626,stroke-width:2px,color:#7f1d1d class validate_pay,check_fraud,check_stock,manual_review intake_style class pick,pack,label fulfill_style class handoff,transit,deliver ship_style class confirm_email,ship_update,deliver_email warn_style class pay_fail,retry_pay,out_of_stock,deliver_fail danger_style ``` ### Why this works - **5 subgraphs map to real business phases** โ€” intake, fulfillment, shipping, notification, and exceptions are how operations teams actually think about orders - **Exception handling is its own subgraph** โ€” not scattered across phases. Agents and readers can see all failure paths in one place - **Color classes reinforce structure** โ€” blue for intake, purple for fulfillment, green for shipping, amber for notifications, red for exceptions. Even without reading labels, the color pattern tells you which phase you're looking at - **Decisions route between subgraphs** โ€” the diamonds (`{Payment valid?}`, `{In stock?}`, `{Delivered?}`) are the points where flow branches, and each branch leads to a clearly-labeled destination