geoviewer
A browser-based viewer for geospatial scientific data — netCDF, HDF5, and GRIB — inspired by NASA Panoply.
Browse a whitelisted server directory, pick a variable, and get an interactive lat/lon map with a time/level slider, colormap control, and a metadata panel. It runs as a single Panel app served over the web, with no uploads — files stay on the server.
Features
- Multi-format readers behind one interface: netCDF (classic and netCDF-4/HDF5-backed), HDF5, and GRIB (via cfgrib/eccodes).
- Variable list with automatic dimension-role detection (
x/y/z/time) via naming heuristics and unit hints. - Interactive map rendered with datashader rasterization (falls back to plain rendering when unavailable).
- Time and vertical-level sliders for N-D variables.
- Colormap picker and per-dimension role overrides.
- Metadata panel showing the selected variable's attributes.
- Directory whitelist with path-traversal protection — server-side browsing only.
Installation
Requires Python 3.11+.
pip install .
For an editable install that includes the test/lint tooling:
pip install -e ".[dev]"
With uv:
uv pip install .
GRIB support needs the eccodes C library; the eccodes wheel bundles it, or install it system-wide (conda install -c conda-forge eccodes).
Usage
Start the server, pointing NC_VIEWER_ROOTS at one or more directories to browse (colon-separated):
NC_VIEWER_ROOTS=/data/mydata:/data/more python -m panel serve app.py --port 5006
Then open http://localhost:5006/app.
To serve on a remote machine, use an SSH tunnel:
ssh -L 5006:127.0.0.1:5006 user@host
Natural Earth feature data (first render)
Coastlines, borders and the graticule come from Natural Earth data, which
cartopy downloads on first use and caches in ~/.local/share/cartopy. Behind
a blocking proxy the download fails; the map still renders, just without the
overlays (a warning names the unavailable features). To pre-seed the cache on
a proxied server, clear the proxy variables and render any map once:
env -u http_proxy -u https_proxy python -m panel serve app.py --port 5006
Environment variables
| Variable | Default | Description |
|---|---|---|
NC_VIEWER_ROOTS |
. |
Colon-separated whitelisted directories to browse |
NUMBA_CACHE_DIR |
<tmp>/numba_cache |
Numba JIT cache directory (used by datashader rasterization) |
Architecture
readers/ unified Reader abstraction (netCDF / HDF5 / GRIB) -> xarray
services/ catalog whitelist, dimension role model, slice LRU cache
ui/ Panel components (file browser, variable panel, map, controls, metadata)
app.py Panel entrypoint wiring callbacks
Testing
python -m pytest -q
License
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 geoviewer-0.3.0.tar.gz.
File metadata
- Download URL: geoviewer-0.3.0.tar.gz
- Upload date:
- Size: 24.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f14d4945c675d51ee48586e6a8cfc2a11282d6aab14dff98e735ef9a720fc4d
|
|
| MD5 |
b4637ec1c4b494945abe29b025c86121
|
|
| BLAKE2b-256 |
1d05252b06f359c7aea155438047fcd23bb34c6c68f433a75c74f05ff8206bae
|
Provenance
The following attestation bundles were made for geoviewer-0.3.0.tar.gz:
Publisher:
publish.yml on openEarthModelling/geoviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geoviewer-0.3.0.tar.gz -
Subject digest:
8f14d4945c675d51ee48586e6a8cfc2a11282d6aab14dff98e735ef9a720fc4d - Sigstore transparency entry: 2671927433
- Sigstore integration time:
-
Permalink:
openEarthModelling/geoviewer@7de881f24f180c26e5775ee607969c2a9b228029 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/openEarthModelling
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7de881f24f180c26e5775ee607969c2a9b228029 -
Trigger Event:
push
-
Statement type:
File details
Details for the file geoviewer-0.3.0-py3-none-any.whl.
File metadata
- Download URL: geoviewer-0.3.0-py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56a70069b015423cddf1e79a078c313965b2d2616ca2c568fc298f0a752242de
|
|
| MD5 |
66658bc0adf1e0aa86421104892a817e
|
|
| BLAKE2b-256 |
30d7887fbb20139caffa537a32d2a981e6065f236a393909924aa9fe0109762a
|
Provenance
The following attestation bundles were made for geoviewer-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on openEarthModelling/geoviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geoviewer-0.3.0-py3-none-any.whl -
Subject digest:
56a70069b015423cddf1e79a078c313965b2d2616ca2c568fc298f0a752242de - Sigstore transparency entry: 2671927475
- Sigstore integration time:
-
Permalink:
openEarthModelling/geoviewer@7de881f24f180c26e5775ee607969c2a9b228029 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/openEarthModelling
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7de881f24f180c26e5775ee607969c2a9b228029 -
Trigger Event:
push
-
Statement type: