NetBox plugin for physical cable plant infrastructure documentation with GIS capabilities
Project description
netbox-pathways
A NetBox plugin for documenting physical cable plant infrastructure with PostGIS integration. Track conduits, aerial spans, structures, and cable routing with geographic data, comparable to SmallWorld or ArcGIS with ArcFM for outside/inside plant documentation.
Features
- Structures -- poles, manholes, cabinets, equipment rooms, and more with PostGIS geometry (point or polygon).
- Pathways -- conduits, aerial spans, direct buried, innerducts, cable trays with PostGIS line geometry.
- Conduit Banks and Junctions -- model conduit bank configurations and mid-span Y-tees.
- Cable Routing -- track which NetBox cables traverse which pathways, in sequence.
- Pull Sheets -- printable cable routing documents for field crews.
- GeoJSON API -- standard GeoJSON endpoints for QGIS and other GIS clients.
- QGIS Integration -- style files, project generator, and documentation.
- Geometry Editing -- draw and edit geometries directly in NetBox forms via Leaflet map widgets.
- Interactive Map -- built-in Leaflet map for quick visualization.
- Indoor / Outdoor -- pathways can terminate at structures (outdoor) or NetBox locations (indoor).
Compatibility
| Plugin version | NetBox version | Python | PostgreSQL |
|---|---|---|---|
| 0.1.x | 4.5.3+ | 3.12-3.14 | 16+ with PostGIS 3.4 |
Installation
pip install netbox-pathways
In your NetBox configuration.py:
PLUGINS = ["netbox_pathways"]
PLUGINS_CONFIG = {
"netbox_pathways": {
"srid": 3348, # REQUIRED -- your EPSG code (see warning below)
"map_center_lat": 45.5, # default map center latitude (optional)
"map_center_lon": -73.5,# default map center longitude (optional)
"map_zoom": 10, # default map zoom level (optional)
},
}
Run migrations and restart:
cd /opt/netbox/netbox
python manage.py migrate
python manage.py collectstatic --no-input
sudo systemctl restart netbox netbox-rq
Configuration
SRID is immutable after installation
The srid setting defines the coordinate reference system used for all geometry columns in the database. It is baked into the database schema at migration time.
Changing the SRID after data has been loaded WILL CORRUPT YOUR SPATIAL DATA. PostgreSQL / PostGIS does NOT automatically re-project existing coordinates when the column SRID changes. Geometries will have wrong coordinates in the new CRS with no way to recover them automatically.
Choose your SRID carefully before first deployment. Common choices:
| EPSG | Name | Notes |
|---|---|---|
4326 |
WGS84 (GPS coordinates, degrees) | Global, but distorts distances and areas. |
3857 |
Web Mercator (meters) | Used by Google Maps, OSM tiles. |
3348 |
NAD83(CSRS) / Statistics Canada Lambert (m) | Good for Canada. |
2154 |
RGF93 / Lambert-93 (meters) | Good for France. |
32632 |
WGS84 / UTM zone 32N (meters) | Good for central Europe. |
If you need to change SRID after deployment, you must manually re-project all geometry data using PostGIS ST_Transform() and update the column SRID definitions. This is an advanced DBA operation; back up everything first.
QGIS quick start
Generate a QGIS project with all layers pre-configured:
python manage.py generate_qgis_project \
--url https://your-netbox \
--token your-api-token
Open the generated .qgs file in QGIS. Style files (.qml) ship under static/netbox_pathways/qgis/ and can be loaded via Layer Properties > Style > Load Style.
REST and GeoJSON API
All resources are exposed under /api/plugins/pathways/. GeoJSON variants live under /api/plugins/pathways/geo/ for direct QGIS / OGR consumption. See API Examples for full endpoint coverage.
Documentation
Full documentation: jsenecal.github.io/netbox-pathways
Contributing
PRs welcome. Use conventional-commits PR titles (feat:, fix:, chore:, docs:, ...) -- release-drafter assembles release notes from them. Run make setup after cloning to install dev dependencies and the pre-commit hooks (including the AI-attribution-rejecting commit-msg hook).
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netbox_pathways-0.1.0.tar.gz.
File metadata
- Download URL: netbox_pathways-0.1.0.tar.gz
- Upload date:
- Size: 124.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eab392ffaf664d98ea971631f74ea312cce2042f46000b5c3e056524a7f0b5a8
|
|
| MD5 |
2f8a42b5700155afd9b6cf3b05a2edb8
|
|
| BLAKE2b-256 |
6d11561ac92a2177f9a371b572bc66bbd2bac9415f1666dd42eb0fefbbedb40d
|
Provenance
The following attestation bundles were made for netbox_pathways-0.1.0.tar.gz:
Publisher:
publish.yml on jsenecal/netbox-pathways
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_pathways-0.1.0.tar.gz -
Subject digest:
eab392ffaf664d98ea971631f74ea312cce2042f46000b5c3e056524a7f0b5a8 - Sigstore transparency entry: 1397096551
- Sigstore integration time:
-
Permalink:
jsenecal/netbox-pathways@8ca3eb2e5d5e111e870a93c6a9119defa03b5e9e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8ca3eb2e5d5e111e870a93c6a9119defa03b5e9e -
Trigger Event:
release
-
Statement type:
File details
Details for the file netbox_pathways-0.1.0-py3-none-any.whl.
File metadata
- Download URL: netbox_pathways-0.1.0-py3-none-any.whl
- Upload date:
- Size: 139.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44243a2e3d16ca9f89044ead3b04ccad0f013e3e06536089836a111c77784ae9
|
|
| MD5 |
5a238f5e79795ecf390bc964e3163028
|
|
| BLAKE2b-256 |
0949cbb3a946f5d58183b6c3d4da7ba17f4ed7f7f68390db29e76c103c94ef00
|
Provenance
The following attestation bundles were made for netbox_pathways-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on jsenecal/netbox-pathways
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_pathways-0.1.0-py3-none-any.whl -
Subject digest:
44243a2e3d16ca9f89044ead3b04ccad0f013e3e06536089836a111c77784ae9 - Sigstore transparency entry: 1397096560
- Sigstore integration time:
-
Permalink:
jsenecal/netbox-pathways@8ca3eb2e5d5e111e870a93c6a9119defa03b5e9e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8ca3eb2e5d5e111e870a93c6a9119defa03b5e9e -
Trigger Event:
release
-
Statement type: