Stop drowning in cryptic logs. One line of code to transform complex execution logic into clear Mermaid sequence diagrams.
π Language: English | δΈζ
flowchart TB
%% Style Definitions
classDef userLayer fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,rx:5,ry:5
classDef coreLayer fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#bf360c,rx:5,ry:5
classDef ioLayer fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,rx:5,ry:5
classDef vizLayer fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c,rx:5,ry:5
classDef storage fill:#eceff1,stroke:#455a64,stroke-width:2px,color:#263238,shape:cyl
subgraph User["π€ User Integration"]
direction TB
Decorator["@trace / @trace_class"]:::userLayer
Middleware["FastAPI Middleware"]:::userLayer
Callback["LangChain Callback"]:::userLayer
end
subgraph Core["βοΈ Core Engine"]
direction TB
Context["ContextVars<br/>(Trace Context)"]:::coreLayer
EventBus["Event Bus<br/>(LogContext)"]:::coreLayer
Masker["Data Masking<br/>(Sanitizer)"]:::coreLayer
end
subgraph IO["β‘ Async I/O Layer"]
direction TB
Queue["Async Queue<br/>(Non-blocking)"]:::ioLayer
Writer["File Handler<br/>(Rotating/Timed)"]:::ioLayer
end
Storage[(".mmd File")]:::storage
subgraph Viz["π Visualization"]
direction TB
Watcher["Watchdog<br/>(File Monitor)"]:::vizLayer
Server["FastAPI Server<br/>(SSE Support)"]:::vizLayer
Browser["Web Browser<br/>(Mermaid.js + PanZoom)"]:::vizLayer
end
%% Data Flow
Decorator --> Context
Middleware --> Context
Callback --> Context
Context --> EventBus
EventBus --> Masker
Masker --> Queue
Queue --> Writer
Writer --> Storage
Storage -.-> Watcher
Watcher --> Server
Server == "SSE Push" ==> Browser
%% Link Styles
linkStyle default stroke:#607d8b,stroke-width:2px
@trace(source="User", target="OrderSys")
def create_order(user_id, items):
# Complex business logic
if not check_inventory(items):
return "Out of Stock"
# Nested logic calls
price = calculate_price(items)
discount = get_discount(user_id)
final = price - discount
# External service interactions
res = pay_service.process(final)
if res.success:
update_stock(items)
send_notif(user_id)
return "Success"
return "Failed"sequenceDiagram
autonumber
User->>OrderSys: create_order(user_id, items)
activate OrderSys
OrderSys->>Inventory: check_inventory(items)
Inventory-->>OrderSys: True
OrderSys->>Pricing: calculate_price(items)
Pricing-->>OrderSys: 100.0
OrderSys->>UserDB: get_discount(user_id)
UserDB-->>OrderSys: 5.0
OrderSys->>PayService: process(95.0)
activate PayService
PayService-->>OrderSys: success
deactivate PayService
OrderSys->>Inventory: update_stock(items)
OrderSys->>Notification: send_notif(user_id)
OrderSys-->>User: "Success"
deactivate OrderSys
(Master Preview: Multi-file browsing, live-reload, and interactive pan/zoom)
sequenceDiagram
participant CLI as mermaid-trace CLI
participant App as Python App
participant Web as Live Preview
Note over CLI, Web: Enable Live Preview Mode
CLI->>Web: Start HTTP Server (localhost:8000)
App->>App: Run Logic (with @trace decorator)
App->>App: Auto-update flow.mmd
Web->>Web: File Change Detected (Hot Reload)
Web-->>CLI: Render Latest Diagram
(From adding decorators to browser live preview in 10 seconds)
No local setup required. Experience core features in your browser:
Pain: Taking over a complex, undocumented legacy project with tangled function calls.
Solution: Add @trace_class or @trace to entry points and run the code once.
Value: Instantly generate a complete execution path map to understand the architecture.
Pain: Manual sequence diagrams are time-consuming and quickly become outdated. Solution: Integrate MermaidTrace during development. Value: Diagrams stay 100% in sync with your code logic automatically.
Pain: Nested calls or async tasks produce interleaved logs that are impossible to read. Solution: Use built-in async support and intelligent collapsing. Value: Visualize recursion depth and concurrency flow to pinpoint logic bottlenecks.
pip install mermaid-tracefrom mermaid_trace import trace, configure_flow
# Configure output file
configure_flow("my_flow.mmd")
@trace(source="User", target="AuthService")
def login(username):
return verify_db(username)
@trace(source="AuthService", target="DB")
def verify_db(username):
return True
login("admin")Run the built-in CLI tool to preview in real-time (with hot-reload):
# Preview a single file (Auto-reload, Pan/Zoom supported)
mermaid-trace serve my_flow.mmd
# Preview a directory (File browser, Multi-file switching)
mermaid-trace serve .Visualize LLM chains, agents, and RAG retrieval with a single handler:
from mermaid_trace.integrations.langchain import MermaidTraceCallbackHandler
handler = MermaidTraceCallbackHandler(host_name="MyAIApp")
# Pass to any LangChain object
chain.invoke({"input": "..."}, config={"callbacks": [handler]})- Decorator-Driven: Simply add
@traceor@trace_interactionto functions. - Auto-Instrumentation: Use
@trace_classto trace a whole class at once. - Data Privacy: Automatic Data Masking for sensitive fields (passwords, tokens).
- Performance Control: Configurable Sampling Rate for high-throughput systems.
- Distributed Tracing: Support for W3C Trace Context, B3, and custom headers to link microservices.
- Third-Party Patching: Use
patch_objectto trace calls inside external libraries. - Async Support: Seamlessly works with
asynciocoroutines and concurrency. - Enhanced Web UI: Interactive preview server with file browsing, auto-reload, and pan/zoom support.
- Intelligent Collapsing: Automatically collapses repetitive calls and identifies loops.
- FastAPI Integration: Middleware for zero-config HTTP request tracing with header propagation.
- LangChain Integration: Callback Handler for LLM chains and agent visualization.
- Detailed Exceptions: Captures full stack traces for errors, displayed in the diagram.
User Guide Β· API Reference Β· Contributing Guidelines Β· Changelog Β· License
| Category | Links |
|---|---|
| Core Modules | Context Β· Decorators Β· Events Β· Formatter |
| Handlers | Async Handler Β· Mermaid Handler |
| Integrations | FastAPI |
| Others | init Β· CLI |
We welcome contributions! Please see CONTRIBUTING.md for details.
MIT

