Skip to main content

TopoHub: A repository of real-world topologies for networking research

Repository of reference Gabriel graph, Internet Topology Zoo, SNDlib, CAIDA and synthetic backbone topologies for networking research. Synthetic Gabriel graphs very well represent properties of WAN / long-haul optical transport networks. The repository offers 3600 Gabriel graph topologies with linearly increasing sizes ranging from 5 to 500 nodes, generated in a reproducible manner. Topologies are available in the code repository and can be previewed and downloaded through a web interface, which allows visualization of individual topologies and exploration of their network properties. An important additional feature is the visualization of pre-computed link loads in the network using the Equal-Cost Multipath (ECMP) shortest path routing algorithm under different traffic demand models.

Web interface is available at: https://www.topohub.org

The package also includes a module that can be imported into the popular network emulator Mininet, enabling automatic usage of the topologies from the repository.

Please cite the following paper if you use of TopoHub in your research:

@article{topohub,
    title = {TopoHub: A repository of reference Gabriel graph and real-world topologies for networking research},
    journal = {SoftwareX},
    volume = {24},
    pages = {101540},
    year = {2023},
    issn = {2352-7110},
    doi = {10.1016/j.softx.2023.101540},
    author = {Piotr Jurkiewicz}
}

The Python package can be installed from Python Package Index (PyPI) using the following command:

pip install topohub

Then you can obtain topologies stored in the repository using the topohub.get() method and create NetworkX graph objects basing on them:

import networkx as nx
import topohub

# Obtain topology dicts from JSON files stored in the repository
topo = topohub.get('gabriel/25/0')
topo = topohub.get('backbone/africa')
topo = topohub.get('topozoo/Abilene')
topo = topohub.get('sndlib/polska')

# Create NetworkX graph from node-link dict
g = nx.node_link_graph(topo, edges='edges')

# Access graph parameters
print(g.graph['name'])
print(g.graph['demands'])
print(g.graph['stats']['avg_degree'])

# By default, nodes are referred by their integer IDs
# You can obtain node names through the `name` attribute
print(g.nodes[0]['name'])
print(g.nodes[10]['name'])

# Obtain link length in kilometers between node 0 and 10
print(g.edges[0, 10]['dist'])
# Obtain percentage utilization of the link between node 0 and 10 under ECMP routing in the forward direction
print(g.edges[0, 10]['ecmp_fwd']['uni'])

# You can also load a topology using node names instead of integer IDs as node identifiers
# (this will not work for 'backbone' and 'caida' topologies which have unnamed or duplicated name nodes)
topo = topohub.get('sndlib/polska', use_names=True)
g = nx.node_link_graph(topo, edges='edges')

print(g.graph['demands'])
print(g.edges['Gdansk', 'Warsaw']['dist'])
print(g.edges['Gdansk', 'Warsaw']['ecmp_fwd']['uni'])

For usage in Mininet, you can use a helper which automatically creates Mininet Topo classes for selected topologies:

import mininet.net
import topohub.mininet

# Obtain Mininet Topo classes for topologies stored in the repository
topo_cls = topohub.mininet.TOPO_CLS['gabriel/25/0']
topo_cls = topohub.mininet.TOPO_CLS['backbone/africa']

# Alternatively, you can also load a topology using node names instead integer IDs as node identifiers
# (this will not work for 'backbone' category topologies which have unnamed or duplicated name nodes)
topo_cls = topohub.mininet.TOPO_NAMED_CLS['topozoo/Abilene']
topo_cls = topohub.mininet.TOPO_NAMED_CLS['sndlib/polska']

# Initialize Mininet Topo object
topo = topo_cls()
# Create Mininet Network using the selected topology
net = mininet.net.Mininet(topo=topo)
# Start the network and Mininet shell
net.interact()

Detailed documentation, including API reference and Mininet usage example, is available at: https://topohub.readthedocs.io

Metadata

Release files for topohub 1.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for topohub 1.5.1
File Size Uploaded
topohub-1.5.1.tar.gz 5.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for topohub 1.5.1
File Interpreter ABI Platform
topohub-1.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 10.5 MB

Release files / topohub-1.5.1.tar.gz

Download URL topohub-1.5.1.tar.gz
Size 5.0 MB
Tags Source
SHA-256 checksum
How to use checksums
5a446ce2de00b31a751d16ad21d11754c22f397c3bfe5a57f0ca25c05f646277
BLAKE2b-256 checksum
How to use checksums
ba84a39ed06e8313f971a3a23b04ada17c615bf70e9f8817716b17df4aacbf78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2025.

Transparency log

Release files / topohub-1.5.1-py3-none-any.whl

Download URL topohub-1.5.1-py3-none-any.whl
Size 5.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
331dd0dab419ede67d5a680b724795d2320fb7f45bd8f2cf2281f155a117cdbb
BLAKE2b-256 checksum
How to use checksums
2f37500eb1219bea0e4adc060b3a125252a126629197f2d81960004e3f35e91d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.5.1 This release

2 release files

1.5

2 release files

1.4.1

2 release files

1.4

2 release files

1.3

2 release files

1.2

2 release files

1.1

2 release files

1.0

2 release files

0.4

2 release files

0.3

2 release files

0.2

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page