[![pypi](https://img.shields.io/pypi/v/fastapi-router-viz.svg)](https://pypi.python.org/pypi/fastapi-router-viz)
![Python Versions](https://img.shields.io/pypi/pyversions/fastapi-router-viz)


# fastapi-router-viz

Visualize FastAPI application's routes and inner dependencies inside response_models.

> This repo is still in early stage.

```shell
router-viz -m tests.demo --app app --server
```

<img width="1528" height="603" alt="image" src="https://github.com/user-attachments/assets/e977cba0-1bfb-4fce-8c77-e5fbfb779fb7" />


## Installation

```bash
pip install fastapi-router-viz
# or
uv add fastapi-router-viz
```

## Command Line Usage

```bash
# Basic usage - assumes your FastAPI app is named 'app' in app.py
router-viz tests/demo.py

# Specify custom app variable name
router-viz tests/demo.py --app app

# filter tag name
router-viz tests/demo.py --app app --tags page

# filter schema name, display related nodes
router-viz tests/demo.py --app app --schema Task

# show fields
router-viz tests/demo.py --app app --show_fields all

# highlight module
router-viz tests/demo.py --app app --module_color=tests.demo:red

# Custom output file
router-viz tests/demo.py -o my_visualization.dot

# server mode
router-viz tests/demo.py --app app --server --show_fields --module_color=tests.demo:red 

# Show help
router-viz --help

# Show version
router-viz --version
```

The tool will generate a DOT file that you can render using Graphviz:

```bash
# Install graphviz
brew install graphviz  # macOS
apt-get install graphviz  # Ubuntu/Debian

# Render the graph
dot -Tpng router_viz.dot -o router_viz.png

# Or view online at: https://dreampuf.github.io/GraphvizOnline/
```

or you can open router_viz.dot with vscode extension `graphviz interactive preview`


## Next

- [x] group schemas by module hierarchy
- [x] module-based coloring via Analytics(module_color={...})
- [x] view in web browser
    - [x] config params
    - [x] make a explorer dashboard, provide list of routes, schemas, to make it easy to switch and search
- [x] support programmatic usage
- [ ] better schema /router node appearance
- [ ] support dataclass
- [ ] user can generate nodes/edges manually and connect to generated ones
- [ ] add configuration for highlight (optional)
- [ ] integration with pydantic-resolve
    - [ ] show difference between resolve, post fields
    - [ ] strikethrough for excluded fields
    - [ ] display loader as edges


## Credits

- https://github.com/tintinweb/vscode-interactive-graphviz, for web visualization.
