Interactive Graphviz visualization widget for Jupyter notebooks using anywidget.
Project description
graphviz-anywidget
Interactive Graphviz visualization widget for Jupyter notebooks using anywidget. Graphviz is provided via WASM (hpcc-js-wasm) and the rendering is done using graphvizsvg and d3-graphviz, inspired by the VS Code extension Graphviz Interactive Preview.
https://github.com/user-attachments/assets/74cf39c5-2d64-4c98-b3ee-cf7308753da6
Features
- 🎨 Interactive SVG visualization of Graphviz DOT graphs
- 🔍 Search functionality with regex support
- 🎯 Node and edge highlighting
- ↔️ Directional graph traversal
- 🔄 Zoom reset functionality
- 📱 Responsive design
- 🎨 Smooth animations and transitions
- 💻 Works in JupyterLab, Jupyter Notebook, and VS Code
Installation
pip install graphviz-anywidget
or with uv:
uv add graphviz-anywidget
Usage
from graphviz_anywidget import graphviz_widget
# Create a widget with a DOT string
dot_source = """
digraph {
a -> b;
b -> c;
c -> a;
}
"""
widget = graphviz_widget(dot_source)
widget
Features
-
Search: Use the search box to find nodes and edges
- Supports exact match, substring, and regex search
- Case-sensitive option available
-
Direction Selection: Choose how to traverse the graph
- Bidirectional: Show connections in both directions
- Downstream: Show only outgoing connections
- Upstream: Show only incoming connections
- Single: Show only the selected node
-
Zoom Reset: Reset the graph to its original position and scale
API
graphviz_widget
def graphviz_widget(dot_source: str = "digraph { a -> b; }") -> widgets.VBox:
"""Create an interactive Graphviz widget.
Parameters
----------
dot_source
The DOT string representing the graph
Returns
-------
widgets.VBox
The widget containing the graph and controls
"""
Dependencies
- anywidget
- ipywidgets
- graphvizsvg (npm package)
- d3-graphviz (npm package)
- hpcc-js-wasm (npm package)
Development
We recommend using uv for development. It will automatically manage virtual environments and dependencies for you.
uv run jupyter lab example.ipynb
Alternatively, create and manage your own virtual environment:
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
jupyter lab example.ipynb
The widget front-end code bundles it's JavaScript dependencies. After setting up Python, make sure to install these dependencies locally:
npm install
While developing, you can run the following in a separate terminal to automatically rebuild JavaScript as you make changes:
npm run dev
Open example.ipynb
in JupyterLab, VS Code, or your favorite editor
to start developing. Changes made in js/
will be reflected
in the notebook.
Implementation Notes
- The WASM binary is embedded in the JavaScript bundle as base64
- We override the fetch API to intercept WASM file requests
- Web Worker mode is disabled to ensure consistent WASM loading
- This approach works in any Jupyter environment without needing a separate file server
License
MIT
Credits
Built with:
- anywidget
- graphvizsvg
- d3-graphviz
- The WASM binary comes from @hpcc-js/wasm (via
d3-graphviz
) - Inspired by the VS Code extension Graphviz Interactive Preview.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file graphviz_anywidget-0.2.1.tar.gz
.
File metadata
- Download URL: graphviz_anywidget-0.2.1.tar.gz
- Upload date:
- Size: 686.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13284c6ea2bc393592a900715ac41c9010ead9aecdfd1045203f86a2b8a9c7e5 |
|
MD5 | 71623f14b9eec7c988206830d13a9b9f |
|
BLAKE2b-256 | b62b3dc11f81cac05f700aad48d4fbe3ef4b586e2cd07635dd969dacb3cc8352 |
Provenance
The following attestation bundles were made for graphviz_anywidget-0.2.1.tar.gz
:
Publisher:
pythonpublish.yml
on pipefunc/graphviz-anywidget
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
graphviz_anywidget-0.2.1.tar.gz
- Subject digest:
13284c6ea2bc393592a900715ac41c9010ead9aecdfd1045203f86a2b8a9c7e5
- Sigstore transparency entry: 150911068
- Sigstore integration time:
- Predicate type:
File details
Details for the file graphviz_anywidget-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: graphviz_anywidget-0.2.1-py3-none-any.whl
- Upload date:
- Size: 688.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae950ff54f663adc04e378e3964a5912e0f805782c0ac571c1c18d3648088180 |
|
MD5 | 6102187d8508fdfa2e24fff7115c7492 |
|
BLAKE2b-256 | 12b0f24c99948baecfdd721373d25efdcf2784067c596ae69772185745ab8f1d |
Provenance
The following attestation bundles were made for graphviz_anywidget-0.2.1-py3-none-any.whl
:
Publisher:
pythonpublish.yml
on pipefunc/graphviz-anywidget
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
graphviz_anywidget-0.2.1-py3-none-any.whl
- Subject digest:
ae950ff54f663adc04e378e3964a5912e0f805782c0ac571c1c18d3648088180
- Sigstore transparency entry: 150911069
- Sigstore integration time:
- Predicate type: