A MkDocs plugin that creates interactive graph visualizations of page connections, inspired by Quartz. Visualize your documentation structure with beautiful, interactive network graphs powered by D3.js.
- π― Mini Graph View: Shows connected pages in the sidebar (or bottom on mobile)
- π Full Graph View: Expandable overlay showing the entire documentation graph
- π¨ Material Theme Integration: Seamlessly integrates with Material for MkDocs
- π± Responsive Design: Automatically adapts to mobile and desktop layouts
- βοΈ Highly Configurable: Customize physics simulation, visual appearance, and interactions
- π·οΈ Tag Support: Display tags as separate nodes in the graph (like Quartz)
- π Dark Mode: Full support for light and dark themes
- β‘ Performance: Efficient BFS-based filtering for large documentation sites
Install the plugin using pip:
pip install mkdocs-graph-viewAdd the plugin to your mkdocs.yml:
plugins:
- search
- graph-viewThat's it! The plugin will automatically:
- Create a mini graph in the sidebar showing connected pages
- Add an expand button to view the full graph
- Highlight the current page in the graph
plugins:
- graph-view:
enabled: true
local_graph_depth: 1 # Show connections up to 1 level deepplugins:
- graph-view:
enabled: true
# Graph depth
local_graph_depth: 2 # Show 2 levels of connections in sidebar
# Global graph
global_graph: true # Enable full-screen graph overlay
# Physics simulation
repel_force: 1.0 # Node repulsion (higher = more spread)
center_force: 0.2 # Pull to center (lower = less centering)
link_distance: 50 # Distance between connected nodes
# Visual settings
scale: 1.1 # Overall scale
font_size: 10 # Label font size
show_tags: false # Show tags as separate nodes
# Interaction
enable_drag: true # Allow dragging nodes
enable_zoom: true # Allow zoom and pan
focus_on_hover: true # Highlight connections on hover| Option | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Enable/disable the plugin |
local_graph_depth |
int | 1 |
Number of connection levels to show in mini graph |
global_graph |
bool | true |
Enable full-screen graph view |
repel_force |
float | 1.0 |
Node repulsion strength (0.5-2.0 recommended) |
center_force |
float | 0.2 |
Centering force strength (0.1-0.5 recommended) |
link_distance |
int | 50 |
Pixel distance between connected nodes |
scale |
float | 1.1 |
Overall graph scale |
font_size |
int | 10 |
Font size for node labels |
show_tags |
bool | false |
Display tags as separate nodes in graph view |
enable_drag |
bool | true |
Allow dragging nodes |
enable_zoom |
bool | true |
Allow zooming and panning |
focus_on_hover |
bool | true |
Highlight connections on hover |
plugins:
- graph-view:
local_graph_depth: 3 # Can afford deeper depth
repel_force: 0.5
link_distance: 30
focus_on_hover: trueplugins:
- graph-view:
local_graph_depth: 1 # Keep it fast
repel_force: 0.8 # More spread
center_force: 0.2
link_distance: 50
font_size: 8 # Smaller labels
focus_on_hover: false # Disable for performanceplugins:
- tags # Enable tags plugin first
- graph-view:
local_graph_depth: 2
show_tags: true # Show tags as separate nodes
font_size: 11 # Larger for readability
focus_on_hover: trueplugins:
- graph-view:
local_graph_depth: 1
enable_drag: true # Touch drag works well
enable_zoom: true # Pinch zoom
font_size: 12 # Larger for mobile
focus_on_hover: false # Better for touchThe plugin:
- Extracts Links: Scans all pages and extracts internal links
- Builds Graph Data: Creates a network graph of page connections
- Filters by Depth: Uses BFS (Breadth-First Search) to find pages within configured depth
- Renders with D3.js: Creates interactive visualizations using force-directed layout
- Adapts to Layout: Automatically positions graph in sidebar or content area based on viewport
- Python 3.8+
- MkDocs 1.4.0+
- Works best with Material for MkDocs theme (but compatible with others)
GNU GPLv3 License - see LICENSE file for details
Inspired by Quartz graph view feature.
Contributions are welcome! Please feel free to submit a Pull Request.
If you encounter any issues or have questions: