Network Diagrams

Examples for generating network topology diagrams.

Mermaid Diagrams

Mermaid diagrams require no extra dependencies and render natively in GitHub and GitLab.

from netbird import APIClient

client = APIClient(host="api.netbird.io", api_token="your-token")

# Generate and print Mermaid diagram
mermaid = client.generate_diagram(format="mermaid")
print(mermaid)

# Save to file
client.generate_diagram(
    format="mermaid",
    output_file="network_topology"
)
# Creates network_topology.mmd

Embed in Markdown

mermaid = client.generate_diagram(format="mermaid")

# Write as GitHub-compatible Markdown
with open("NETWORK.md", "w") as f:
    f.write("# Network Topology\n\n")
    f.write("```mermaid\n")
    f.write(mermaid)
    f.write("\n```\n")

Graphviz Diagrams

Graphviz produces high-quality PNG, SVG, and PDF output.

# Install dependencies
pip install graphviz
brew install graphviz  # macOS
# Generate PNG
client.generate_diagram(
    format="graphviz",
    output_file="network"
)
# Creates network.png

Python Diagrams

Python Diagrams creates architecture-style diagrams.

pip install diagrams
client.generate_diagram(
    format="diagrams",
    output_file="architecture"
)
# Creates architecture.png

Customizing Diagrams

# Full network view with all details
client.generate_diagram(
    format="mermaid",
    include_routers=True,
    include_policies=True,
    include_resources=True,
    output_file="complete_network"
)

# Simplified view (resources only)
client.generate_diagram(
    format="mermaid",
    include_routers=False,
    include_policies=False,
    include_resources=True,
    output_file="resources_only"
)

Working with Network Map Data

For custom visualizations, use the lower-level functions:

from netbird.network_map import (
    generate_full_network_map,
    get_network_topology_data,
)

# Get raw network data
networks = generate_full_network_map(client)
for network in networks:
    print(f"\nNetwork: {network['name']}")
    print(f"  Resources: {len(network.get('resources', []))}")
    print(f"  Routers: {len(network.get('routers', []))}")
    print(f"  Policies: {len(network.get('policies', []))}")

    for resource in network.get('resources', []):
        addr = resource.get('address', 'N/A')
        rtype = resource.get('type', 'N/A')
        print(f"    {resource['name']}: {addr} ({rtype})")

# Get topology data for custom rendering
topology = get_network_topology_data(client, optimize_connections=True)

print(f"\nTopology Summary:")
print(f"  Source groups: {len(topology['all_source_groups'])}")
print(f"  Group connections: {len(topology['group_connections'])}")
print(f"  Direct connections: {len(topology['direct_connections'])}")

# Build custom visualization from topology data
for conn in topology.get('group_connections', []):
    print(f"  {conn['source']} -> {conn['destination']}: {conn['policies']}")

Export to JSON

import json
from netbird.network_map import generate_full_network_map

networks = generate_full_network_map(client)

with open("network_map.json", "w") as f:
    json.dump(networks, f, indent=2, default=str)

print(f"Exported {len(networks)} networks to network_map.json")