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
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.