Pi extension that renders Mermaid diagrams as ASCII in the TUI. It uses Mermaid's parser for syntax validation and beautiful-mermaid to render the ASCII art.
Pi β https://pi.dev/
- Renders Mermaid blocks as ASCII diagrams inside Pi's TUI
- Width-aware rendering: auto-selects tighter padding presets and clips output for narrow terminals
- Collapsible output with source shown only on expand (ctrl+o)
- Token efficiently adds parser warnings/errors to LLM context
- Handles large blocks with safety limits and caching
pi install npm:pi-mermaidOr, clone into your Pi extensions directory and enable it:
git clone https://github.com/Gurpartap/pi-mermaid ~/.pi/agent/extensions/pi-mermaidAfter installing, enter /reload or restart Pi.
Use Mermaid fenced blocks in chat:
```mermaid
graph TD
Start --> End
```
Or render the last assistant message:
/pi-mermaid
More examples: https://agents.craft.do/mermaid
Mermaid (ASCII)
βββββββββ ββββββββββ ββββββββββββ
β β β β β β
β Start ββββββΊβ Choice ββYesβΊβ Do thing β
β β β β β β
βββββββββ ββββββ¬ββββ ββββββββββββ
β
β
β
No
β
β ββββββββββββ
β β β
ββββββββββΊβ Skip β
β β
ββββββββββββ
```mermaid
flowchart LR
A[Start] --> B{Choice}
B -->|Yes| C[Do thing]
B -->|No| D[Skip]
```
Mermaid (ASCII)
ββββββββ βββββββ βββββββ
β User β β Web β β API β
βββββ¬βββ ββββ¬βββ ββββ¬βββ
β β β
β Submit form β β
βββββββββββββββββββΆ β
β β β
β β POST /submit β
β βββββββββββββββββββΆ
β β β
β β 201 Created β
β βββββββββββββββββββ
β β β
β Show success β β
βββββββββββββββββββ β
β β β
βββββ΄βββ ββββ΄βββ ββββ΄βββ
β User β β Web β β API β
ββββββββ βββββββ βββββββ
```mermaid
sequenceDiagram
participant U as User
participant W as Web
participant API as API
U->>W: Submit form
W->>API: POST /submit
API-->>W: 201 Created
W-->>U: Show success
```
Mermaid (ASCII)
ββββββββββ βββββββ ββββββββββββ
β Client β β API β β Database β
ββββββ¬ββββ ββββ¬βββ βββββββ¬βββββ
β β β
β transfer β β
βββββββββββββββΆ β
β β β
β β txn (debit/credit/log) β
β βββββββββββββββββββββββββββββΆ
β β β
βalt [ok]ββββββββββββββββββββββββββββββββββββββββββ
β β β β β
β β β commit β β
β β βββββββββββββββββββββββββββββΆ β
β β β β β
β β 200 β β β
β βββββββββββββββ β β
β β β β β
β[fail]ββββββββββββββββββββββββββββββββββββββββββββ€
β β β β β
β β β rollback β β
β β βββββββββββββββββββββββββββββΆ β
β β β β β
β β 400 β β β
β βββββββββββββββ β β
β β β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
ββββββ΄ββββ ββββ΄βββ βββββββ΄βββββ
β Client β β API β β Database β
ββββββββββ βββββββ ββββββββββββ
```mermaid
sequenceDiagram
participant Client
participant API
participant Database
Client->>API: transfer
API->>Database: txn (debit/credit/log)
alt ok
API->>Database: commit
API-->>Client: 200
else fail
API->>Database: rollback
API-->>Client: 400
end
```
Mermaid (ASCII)
βββββββ βββββββββ ββββββββββββ
β App β β Cache β β Database β
ββββ¬βββ βββββ¬ββββ βββββββ¬βββββ
β β β
β Get data β β
βββββββββββββββββββββΆ β
β β β
β Cache miss β β
βββββββββββββββββββββ β
β β β
βopt [Cache miss]βββββββββββββββββββββββββ
β β β β β
β β Query β β β
β ββββββββββββββββββββββββββββββββββΆ β
β β β β β
β β Resultsβ β β
β ββββββββββββββββββββββββββββββββββ β
β β β β β
β β Store in cache β β β
β βββββββββββββββββββββΆ β β
β β β β β
ββββββββββββββββββββββββββββββββββββββββββ
β β β
ββββ΄βββ βββββ΄ββββ βββββββ΄βββββ
β App β β Cache β β Database β
βββββββ βββββββββ ββββββββββββ
```mermaid
sequenceDiagram
participant A as App
participant C as Cache
participant DB as Database
A->>C: Get data
C-->>A: Cache miss
opt Cache miss
A->>DB: Query
DB-->>A: Results
A->>C: Store in cache
end
```
Mermaid (ASCII)
βββββββββββββββββ
β Animal β
βββββββββββββββββ€
β +name: String β
βββββββββββββββββ€
β +eat: void β
βββββββββββββββββ
β³
ββββββββββββββββββββββββ
β β
ββββββββββββββββββ βββββββββββββββββββ
β Dog β β Cat β
ββββββββββββββββββ€ βββββββββββββββββββ€
β +breed: String β β +isIndoor: bool β
ββββββββββββββββββ€ βββββββββββββββββββ€
β +bark: void β β +meow: void β
ββββββββββββββββββ βββββββββββββββββββ
```mermaid
classDiagram
class Animal {
+String name
+eat() void
}
class Dog {
+String breed
+bark() void
}
class Cat {
+bool isIndoor
+meow() void
}
Animal <|-- Dog
Animal <|-- Cat
```
This extension depends on and is made possible by these projects:
Thank you to the maintainers and contributors of these projects.
MIT Β© 2026 Gurpartap Singh (https://x.com/Gurpartap)