Gribberish

Read GRIB (GRIB1/GRIB2) weather and ocean data into napari using gribberish

  • Ian Hunt-Isaak

License BSD-3 PyPI Python Version tests codecov napari hub npe2

Open GRIB (GRIB1 / GRIB2) weather and ocean forecast files in napari, powered by the fast Rust-based gribberish decoder.

HRRR 2 m temperature over the continental US

HRRR 2 m temperature over the continental US — the Rocky Mountains show up cold on the left.

Every variable in a file becomes an image layer, and any non-spatial dimensions (forecast time, vertical level, ensemble member, …) become interactive slider axes.

Features

  • 📂 Reader — drag-and-drop or File ▸ Open any .grib, .grib2, .grb, or .grb2 file. Each variable loads as its own layer with units and long name attached, and the horizontal grid mapped to layer scale/translate when the coordinates are regular.
  • 🎛️ Multi-dimensional navigation — time / level / member dimensions become napari sliders, so you can scrub or animate through a forecast.
  • 🧭 Smart colormaps — sequential fields use plasma; directional fields (wave/wind direction, 0–360°) get a cyclic colormap so 0° and 360° match.
  • 🧰 Variable selector widget — choose exactly which variables to load and how to display them (separate / blended / grid).
  • 🌐 Sample data — stream a slice of NOAA HRRR straight from the public AWS Open Data bucket, showcasing gribberish's remote + indexed reading.

Installation

pip install "napari-gribberish[all]"   # includes napari + Qt

If you already have napari installed:

pip install napari-gribberish

Latest development version:

pip install "git+https://github.com/ianhi/napari-gribberish.git"

Note: requires napari ≥ 0.8 and Python ≥ 3.12.

Usage

Opening a file

Drag a GRIB file onto the napari window, or use File ▸ Open. From Python:

import napari

viewer = napari.Viewer()
viewer.open("forecast.grib2", plugin="napari-gribberish")
napari.run()

To avoid stacking many opaque layers on top of each other, the reader loads every variable but reveals only the first — toggle the others with the 👁 icons in the layer list.

Multi-dimensional data

Files with extra dimensions (here ERA5 with forecast time × pressure level × ensemble member) expose one slider per non-spatial axis. Drag them, or press ▶ to animate.

ERA5 opened in napari with time, level and member sliders

Variable selector widget

Plugins ▸ GRIB variable selector opens a dock where you pick a file, select which variables to load, and choose a display mode:

  • separate — one layer per variable, only the first visible (best for unrelated fields)
  • blend — all selected variables visible with additive blending (overlay a few fields)
  • grid — all selected variables side by side for comparison

The GRIB variable selector dock widget

Grid mode is handy for comparing related fields at a glance — note the wave-direction panel (bottom-left) automatically uses a cyclic colormap:

Four wave variables compared side by side in grid mode

Sample data

File ▸ Open Sample ▸ Gribberish ▸ HRRR surface (remote) streams 2 m temperature and 10 m wind gust from the public NOAA HRRR archive on AWS (requires network access).

Reading GRIB without napari

The plugin is a thin layer over gribberish's xarray backend, so the same files open directly with:

import xarray as xr

ds = xr.open_dataset("forecast.grib2", engine="gribberish", collapse_groups=True)

Contributing

Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.

uv run pytest          # run the test suite
uv run napari          # launch napari with the plugin installed

License

Distributed under the terms of the BSD-3 license, "napari-gribberish" is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Version:

  • 0.1.0

Last updated:

  • 2026-07-14

First released:

  • 2026-07-14

License:

  • BSD-3-Clause

Supported data:

  • Information not submitted

Open extension:

Save extension:

Python versions supported:

    Operating system:

    • Information not submitted

    Requirements:

    • numpy
    • magicgui
    • qtpy
    • gribberish[xarray]>=1.5
    • napari[all]; extra == "all"
    Website by the napari team, original design by CZI.