Skip to main content

Multi-vendor network config translator with a verifiable cross-vendor audit

Reason this release was yanked:

bad release

Project description

Netcanon

Multi-vendor network config translator with a verifiable cross-vendor audit.

Translates running-config between Cisco IOS-XE, Juniper Junos, Aruba AOS-S, Arista EOS, FortiGate, MikroTik RouterOS, and OPNsense. Per-field capability declarations and a cross-mesh audit catch silent translation errors before they ship. Explicit Tier-3 boundary on firewall / NAT / VPN / QoS — see docs/CAPABILITIES.md. See also docs/COMPARISON.md for positioning vs Batfish / Capirca / NAPALM and the rest of the network-automation landscape.

Two concerns, one FastAPI application:

  1. Backup — pull running-config (or vendor equivalent) from network devices over SSH / NETCONF / REST, store verbatim in configs/<hostname>.<ext>. Runs on a schedule or on demand.
  2. Migration — translate a stored backup from one vendor's config grammar to another through a shared canonical intent tree. Cisco IOS-XE → Aruba AOS-S, FortiGate → OPNsense, etc.

Ships on two platforms kept at strict feature parity:

Platform Package Entry point
Web (browser) netcanon/ uvicorn netcanon.main:app
Desktop (Windows) netcanon_desktop/ python -m netcanon_desktop

Quickstart

pip install -e ".[dev]"
uvicorn netcanon.main:app --host 127.0.0.1 --port 8000
# -> http://127.0.0.1:8000        (UI)
# -> http://127.0.0.1:8000/docs   (Swagger)

Desktop shell:

pip install -e ".[desktop]"
python -m netcanon_desktop

Run the test suite:

pytest                       # unit + integration + desktop (fast)
pytest -m e2e                # Playwright browser tests (slower)

Tests run across four layers: unit (pure functions, no I/O — the real-capture validation harness lives here as a unit subset), integration (TestClient + mocked SSH), e2e (Playwright against a live Uvicorn), and desktop (PySide6 + pystray mocked). CI output is the source of truth for pass counts.


Where to go next

You want to… Start here
Understand the architecture ARCHITECTURE.md — four-layer model, canonical bridge, codec types
Follow the contributor rules CLAUDE.md — hard rules, parity checklist, gotchas
Look up project jargon docs/glossary.md — canonical, codec, mesh, ship-before-wire, target profile, etc.
Read the canonical model overview netcanon/migration/canonical/README.md — Tier 1 / 2 / 3 fields and promotion rules
Add or change an HTTP route netcanon/api/routes/README.md — frozen pipeline-stage signatures, endpoint inventory
Add a new codec (vendor parser/renderer) netcanon/migration/codecs/README.md
Add a new device definition / target profile definitions/README.md — layered definitions (family base + os_version / model overlays), target-profile module-variant schema
Add a new canonical field docs/adding-a-canonical-field.md — MTU as a worked example
Add a new target-profile YAML docs/adding-a-target-profile.md — flat-port + module-variant shapes, fit-check propagation
Ship a feature across web + desktop docs/feature-parity-walkthrough.md — SNMPv3 USM rename as a worked example
See what's shipped recently / current state CHANGELOG.md — authoritative per-wave shipping log
Read the slower-changing architectural sketch translator-plans.txt — dense, grep-friendly long-term roadmap; most R / GAP / Phase items now [SHIPPED]
Check codec certification tiers tests/fixtures/real/RESULTS.md
Manually exercise recent changes HUMAN_TESTING.md
Write tests tests/README.md
Review the security model SECURITY.md — threat model, controls, known limitations
Look up what Netcanon translates and what it doesn't docs/CAPABILITIES.md — operator-facing capabilities, per-codec unsupported/lossy paths, Tier-3 boundary, notification surfaces

Layout

netcanon/              FastAPI application (shared by both platforms)
 ├── api/routes/          HTTP endpoints (backups, migration, configs, …)
 ├── collectors/          SSH/NETCONF/REST fetchers — one factory,
 │                        one mock-point (`get_collector`)
 ├── migration/           Cross-vendor translation pipeline
 │   ├── canonical/         CanonicalIntent model + shared transforms
 │   ├── codecs/            Per-vendor parse/render implementations
 │   └── ...
 ├── services/            Plain-function orchestrators (pipeline, detect, …)
 ├── storage/             FileConfigStore
 └── templates/           Jinja2 templates (every interactive element
                          must carry a data-testid — see CLAUDE.md)

netcanon_desktop/      Windows tray/webview shell around the same server
definitions/            Device definition YAMLs (shared with backup layer)
tests/unit/             Pure-function tests, no I/O
tests/integration/      FastAPI TestClient tests, SSH mocked at get_collector
tests/e2e/              Playwright browser tests against a live Uvicorn
tests/desktop/          PySide6/pystray-mocked desktop shell tests
tests/fixtures/real/    Real-capture validation corpus (see RESULTS.md)
scripts/                One-off utilities (Aruba template renderer, …)

Certification status

Per-codec certainty (read from CanonicalCodec.certainty at module load, surfaced via GET /api/v1/migration/adapters). See tests/fixtures/real/RESULTS.md for the live per-codec status — RESULTS.md is the source of truth and this README intentionally omits per-codec counts to avoid drift.


License

See SECURITY.md for responsible-disclosure policy. Project licence is per-file (most files are MIT; third-party fixtures keep their upstream licences — see tests/fixtures/real/NOTICE.md).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netcanon-0.1.0.tar.gz (480.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

netcanon-0.1.0-py3-none-any.whl (553.9 kB view details)

Uploaded Python 3

File details

Details for the file netcanon-0.1.0.tar.gz.

File metadata

  • Download URL: netcanon-0.1.0.tar.gz
  • Upload date:
  • Size: 480.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netcanon-0.1.0.tar.gz
Algorithm Hash digest
SHA256 21401922ccffa6cd74b62cbe463a925d541804cb055093e13ca4d6977a85887e
MD5 d30600a0323fe8bd381ffa3aae082303
BLAKE2b-256 24e870185ff9d603f01d42a06a34ae68b1c5fc8918c9c8bd49447b0b5ff8590f

See more details on using hashes here.

Provenance

The following attestation bundles were made for netcanon-0.1.0.tar.gz:

Publisher: pypi-publish.yml on netcanon/netcanon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file netcanon-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: netcanon-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 553.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netcanon-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8a69b996e75223131c35f3ae8850dea4eb83b5bb249e216b0557e9da979ec26d
MD5 e34c63987e67be9a2e61ebfa618f388a
BLAKE2b-256 d79a13614b8e57491a4779b4e9d13f519f020a61c6daa6b3ab5791c337999f56

See more details on using hashes here.

Provenance

The following attestation bundles were made for netcanon-0.1.0-py3-none-any.whl:

Publisher: pypi-publish.yml on netcanon/netcanon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page