NetBox GeoView
NetBox GeoView is a NetBox plugin for displaying infrastructure in a map-oriented view.
It provides:
- a Leaflet map with configurable raster tile layers
- filters for sites, devices, tags, ownership, tenancy, and related objects
- configurable site and device popups, including custom fields
- direct-distance measurement and optional Valhalla route calculation
- reusable development test data for sites, locations, device types, devices, and custom fields
Versioning
The plugin uses Semantic Versioning in the format MAJOR.MINOR.PATCH.
MAJOR: incompatible plugin changesMINOR: new backward-compatible featuresPATCH: bug fixes and small corrections
NetBox compatibility is managed separately through min_version and max_version in the plugin.
Project Note
This is a personal project to see how far one can go with a practical NetBox plugin idea.
Most of the code was generated with Codex as a coding co-pilot, but maintenance responsibility stays with the developer (the human still carries the pager).
Compatibility
| Plugin Release | NetBox |
|---|---|
0.8.2 |
4.5.4 to 4.7.2 |
Later NetBox versions are not included automatically. See testing details for validation reports and test instructions.
Starting with 0.8.1, GeoView requires an authenticated, active user with
dcim.view_site or dcim.view_device. The menu is hidden otherwise, and the
same rule protects every GeoView endpoint, including tiles and routing. Anonymous
requests redirect to login even when NetBox's LOGIN_REQUIRED is disabled;
authenticated users without either permission receive HTTP 403. This also
applies on NetBox 4.5.10.
Permissions are evaluated through NetBox, including group/default permissions,
superusers and EXEMPT_VIEW_PERMISSIONS. Exemptions do not bypass GeoView's login
requirement. No separate GeoView permission or plugin model is needed. Object
constraints still limit the sites/devices shown, and users need view access to
related filter objects they want to select.
Saved filters must be enabled and shared or owned by the current user.
Only GeoView's supported filter fields are applied from saved filters; arbitrary
NetBox filters such as cf_* custom-field filters are not currently supported.
Installation
Install netbox-geoview from PyPI inside the NetBox virtual environment:
python -m pip install --upgrade netbox-geoview==0.8.2
Optional: install directly from a tagged GitHub source archive:
pip install https://github.com/phlpr/netbox_geoview/archive/refs/tags/v0.8.2.tar.gz
Configuration
Example plugin settings for configuration.py:
PLUGINS = ["netbox_geoview"]
PLUGINS_CONFIG = {
"netbox_geoview": {
"start_latitude": 47.59397,
"start_longitude": 14.12456,
"start_zoom": 7,
"min_zoom": 2,
"max_zoom": 19,
"valhalla_url": "https://valhalla1.openstreetmap.de/route",
"valhalla_timeout": 10,
"valhalla_costing_options": ["auto", "bicycle", "pedestrian"],
"valhalla_default_costing": "auto",
"valhalla_request_defaults": {
"alternates": 1,
"directions_options": {
"units": "kilometers",
},
},
"valhalla_headers": {
"X-Client-Id": "your-company-netbox-geoview",
},
"valhalla_query": {},
"default_tile_layer": "OpenStreetMap",
"scroll_wheel_zoom": True,
"site_marker": {
"color": "#f1c40f",
"symbol": "",
"icon_url": "",
"icon_size": [28, 40],
"icon_anchor": [14, 40],
"popup_anchor": [0, -34],
},
"site_group_markers": {
"burgenland": {"color": "#f1c40f"},
"karnten": {"color": "#e74c3c"},
"niederosterreich": {"color": "#3498db"},
"oberosterreich": {"color": "#2ecc71"},
"salzburg": {"color": "#ff69b4"},
"steiermark": {"color": "#16a085"},
"tirol": {"color": "#9b59b6"},
"vorarlberg": {"color": "#34495e"},
"wien": {"color": "#f39c12"},
},
"tile_layers": [
{
"name": "OpenStreetMap",
"url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
"attribution": "© OpenStreetMap contributors",
},
{
"name": "OpenStreetMap DE",
"url": "https://tile.openstreetmap.de/{z}/{x}/{y}.png",
"attribution": "© OpenStreetMap contributors",
},
{
"name": "OpenStreetMap HOT",
"url": "https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",
"attribution": "© OpenStreetMap contributors, Humanitarian OpenStreetMap Team",
},
{
"name": "MapTiler Satellite",
"url": "https://api.maptiler.com/maps/satellite/{z}/{x}/{y}.jpg",
"attribution": "© MapTiler",
"query": {
"key": "YOUR_MAPTILER_API_KEY",
},
},
{
"name": "MapTiler Hybrid",
"url": "https://api.maptiler.com/maps/hybrid/{z}/{x}/{y}.png",
"attribution": "© MapTiler",
"query": {
"key": "YOUR_MAPTILER_API_KEY",
},
},
],
"tile_provider_url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
}
}
The same example is included in configuration.example.py.
Available settings:
start_latitude: initial map latitudestart_longitude: initial map longitudestart_zoom: initial map zoom levelmin_zoom: minimum allowed zoom levelmax_zoom: maximum allowed zoom levelvalhalla_url: base URL of the Valhalla route endpointvalhalla_timeout: timeout in seconds for route requestsvalhalla_costing_options: route profile options shown in UIvalhalla_default_costing: default route profilevalhalla_request_defaults: additional request payload defaultsvalhalla_headers: optional HTTP headers for Valhalla requestsvalhalla_query: optional query string parameters for Valhalla requestsdefault_tile_layer: default base layer name or IDscroll_wheel_zoom: enables zooming with the mouse wheelsite_marker: default marker appearance for selected sitessite_group_markers: marker overrides by site group name or slugtile_layers: list of available base layersquery: optional query string parameters per layer, useful for API keysheaders: optional HTTP headers per layertile_provider_url: upstream tile URL template with{z},{x}, and{y}
Satellite Providers
Providers with official API-key-based access that fit this plugin well:
MapTiler Satellite: simple raster tile API with API key in the request. Official docs: MapTiler Cloud APIMapTiler Hybrid: raster hybrid style with satellite imagery plus labels and borders, also usable with an API key. Inference from MapTiler's documented style family plus verified tile endpoint.Mapbox Satellite: raster tiles with access token authentication. Official docs: Mapbox Tilesets ReferenceEsri World Imagery: enterprise-capable imagery via ArcGIS location services and token-based authentication. Official docs: ArcGIS service endpoints and Esri Leaflet basemap example
Recommendation:
MapTiler Satelliteis the easiest fit for the current plugin because it follows a straightforward raster tile pattern with an API key.Mapbox Satellitealso fits well and can be configured today withquery.access_token.Esri World Imageryis a strong enterprise option, but its exact request pattern depends on the ArcGIS endpoint and token model you want to use.
Requirements
- GeoView
0.8.2: NetBox4.5.4through4.7.2. - Python
>=3.12 - No additional Python runtime dependencies are required beyond NetBox's own environment
- Installation in the NetBox virtual environment (see Installation)
- Plugin activation in
configuration.py:PLUGINS = ["netbox_geoview"]PLUGINS_CONFIG = {"netbox_geoview": {...}}
- For MapTiler layers: valid API key (
query.key) - Optional for routing: reachable Valhalla endpoint (
valhalla_url)
Development Test Data
Release 0.6.0 includes an idempotent management command that creates a
reusable development data set:
python manage.py seed_geoview_testdata
The command is intended only for development and test databases. It creates or updates clearly prefixed sites, locations, device types, devices, roles, and custom fields. See TESTDATA.md for details and for using a custom JSON definition.
Firewall / Network Allowlist
NetBox GeoView fetches external map and route data server-side. So the egress rules must be applied on the NetBox host (or its outbound proxy), not only on client browsers.
Required for default tile setup:
HTTPS/443totile.openstreetmap.orgHTTPS/443totile.openstreetmap.deHTTPS/443toa.tile.openstreetmap.fr
Required when using MapTiler layers:
HTTPS/443toapi.maptiler.com
Optional when routing is enabled (Valhalla):
HTTPS/443to your configured Valhalla host fromvalhalla_url- For the shipped example:
HTTPS/443tovalhalla1.openstreetmap.de
Valhalla itself is MIT-licensed and can be self-hosted commercially. The
example endpoint is a public demonstration service, not an enterprise service:
fair-use limits apply and no availability guarantee is provided. Applications
using that endpoint should send an identifying X-Client-Id header. For
production or high-volume use, self-host Valhalla or use a provider with an
appropriate SLA.
The default map and routing data is based on OpenStreetMap. Keep the visible
© OpenStreetMap contributors attribution and comply with the ODbL when using
or redistributing derived data.
If your environment uses an explicit outbound proxy, make sure NetBox can reach these hosts through that proxy and that TLS inspection does not break certificate validation.
Metadata
Release files for netbox-geoview 0.8.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| netbox_geoview-0.8.2.tar.gz | 126.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| netbox_geoview-0.8.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 250.9 kB
Release files / netbox_geoview-0.8.2.tar.gz
| Download URL | netbox_geoview-0.8.2.tar.gz |
|---|---|
| Size | 126.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a374791e6fafc02126446608392e48f94add9abe6c5be37e937c1a6323754bed
|
|
BLAKE2b-256 checksum How to use checksums |
67b3fc903c80da5b64a16e66ec481b8cc8ff9738a3f8b37b9d5a557d5879ef21
|
| 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 Oct 1, 2026.
Transparency logRelease files / netbox_geoview-0.8.2-py3-none-any.whl
| Download URL | netbox_geoview-0.8.2-py3-none-any.whl |
|---|---|
| Size | 124.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5ec0474d32e8db0a1468daf78c72df5e4f045379de62201669b6f22c320d8706
|
|
BLAKE2b-256 checksum How to use checksums |
d99e5740c38c76053ea085824d73cc632058bd01dfbe4204fa0331c64d36cbbe
|
| 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 Oct 1, 2026.
Transparency log