routeflow

Swagger shows the contract.
RouteFlow shows what actually happened.

A decorator, a live node graph, and a tab next to your FastAPI docs — order, timing, logs, and errors for every traced request, instead of piecing it together from scattered logs.

$ pip install routeflow

The problem it replaces

Reconstructing a request by hand

2026-08-17 14:02:11 INFO checkout started order=42
2026-08-17 14:02:11 DEBUG validating payment...
2026-08-17 14:02:11 INFO reserving inventory items=3
2026-08-17 14:02:12 DEBUG calling stripe gateway
2026-08-17 14:02:12 ERROR TimeoutError in charge_card
2026-08-17 14:02:12 INFO order 42 failed

One click on the actual trace

checkout validate charge_card reserve ✕ stripe_gateway_charge

By the numbers

102
tests, 2 Python versions
4
real bugs caught & fixed via live verification
0.3.1
published on PyPI
1
line to install: RouteFlow(app)

How it works

1
Decorate what you want traced
@track on any function, sync or async — nesting builds itself from call order.
2
A request comes in
Middleware opens a trace; every @track-ed call along the way becomes a timed, nested span.
3
Open the flow view
A tab next to Swagger — the same request, rendered as an interactive node graph, live.