Skip to main content

nettopo

A Python CLI that reads saved Cisco show command outputs (files only — no live device connections in v1) and generates network diagrams in draw.io format with Cisco icons, plus the intermediate data as CSV tables.

Four diagram views are produced from the same parsed data model:

  • L2 — physical/link-layer topology from CDP/LLDP, with interface labels and MLAG.
  • STP — per-VLAN Rapid-PVST spanning-tree state (root, bridge IDs, priorities, port roles/states).
  • HSRP — first-hop redundancy per SVI (virtual IP, priority, active/standby/listen).
  • BGP — BGP neighbor (session) graph.

nettopo is a working title — see PROJECT_SPEC.md section 1.

Status

Phase 3 — L2 view (v0.1 release). nettopo l2 -i <dir> now renders a real draw.io diagram: nodes are devices styled with Cisco icons (render/icons.py) by inferred DeviceRole, links carry per-end interface labels, and --endpoints all|network-only filters the diagram. Output is post-processed by lucidify by default (--no-lucidify to skip it) so link labels survive Lucidchart import. stp, hsrp, bgp, and all still report "not implemented". See the delivery plan in PROJECT_SPEC.md and the open issues for the phased build-out.

Known gap: MLAG/port-channel grouping in the L2 view is implemented and tested against the data model, but no shipped parser populates Interface.po_id yet (no phase parses show etherchannel summary), so it is currently a no-op against real captures. See docs/architecture.md.

Pending manual step: Cisco mxgraph.cisco.* draw.io stencils are a confirmed requirement but may degrade on Lucidchart import (Lucid uses a different shape library). This must be validated with a real Lucid import before Phase 4 builds more views on the same rendering approach — see the checklist in docs/architecture.md.

Installation

Not yet published to PyPI (publishing happens on tagging v0.1.0 after this PR merges, via .github/workflows/publish.yml). To install from source for development:

git clone https://github.com/isrferna/nettopo.git
cd nettopo
pip install -e ".[dev]"

Requires Python 3.11+.

Usage

nettopo --help
nettopo parse -i ./captures
nettopo l2    -i ./captures --endpoints network-only
nettopo stp   -i ./captures --group-mode topology --all
nettopo hsrp  -i ./captures --vlan 10
nettopo bgp   -i ./captures
nettopo all   -i ./captures

See PROJECT_SPEC.md for the full CLI reference.

Documentation

Contributing

Work is tracked as GitHub issues, one per delivery-plan phase (see PROJECT_SPEC.md section 14). Each change lands via a pull request from a feat/…/fix/… branch into main; direct pushes to main are disabled. See CLAUDE.md for the full workflow and coding conventions.

Security

This tool makes zero network connections by design — it only reads local capture files. See PROJECT_SPEC.md for the full OWASP-adapted security review.

License

MIT

Metadata

Release files for nettopo 0.1.0

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

Source distribution (sdist)

Source distribution for nettopo 0.1.0
File Size Uploaded
nettopo-0.1.0.tar.gz 35.9 kB Details

Built distribution (wheel)

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

Total release size: 67.9 kB

Release files / nettopo-0.1.0.tar.gz

Download URL nettopo-0.1.0.tar.gz
Size 35.9 kB
Tags Source
SHA-256 checksum
How to use checksums
95b10db5d9b76cf7440b36176b03fa4084b08f069e6c06c5d56fb204656cbb00
BLAKE2b-256 checksum
How to use checksums
990bfd5fbd5a073649be19452c40b9062e8ec3165272989cc6c5ca9f057b11f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 7, 2026.

Transparency log

Release files / nettopo-0.1.0-py3-none-any.whl

Download URL nettopo-0.1.0-py3-none-any.whl
Size 32.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d13987fa77a7763029f021c18d7cb14e520f73e89d370b78d40b156106bd8559
BLAKE2b-256 checksum
How to use checksums
9e775b85ff74593e504c03cc0006fe77dc6ae7bdf3dcecb3e0aaba73b91bf207
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 7, 2026.

Transparency log
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