napari 0.8.0#

Sun, Jul 12, 2026

We’re happy to announce the release of napari 0.8.0! napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for browsing, annotating, and analyzing large multi-dimensional images. It’s built on top of Qt (for the GUI), vispy (for performant GPU-based rendering), and the scientific Python stack (numpy, scipy).

For more information, examples, and documentation, please visit our website, https://napari.org.

napari follows EffVer (Intended Effort Versioning); this is a Macro release containing awesome new features, but may require dedication of some significant time when upgrading projects to use this version.

Highlights#

  • Add floating axes canvas overlay (#8262)

  • Histogram for the Image layer controls and contrast limits popup (#8391)

  • Unify use of theme colors (#8927)

  • [Shapes] When using Shift to draw circle/square, allow shape to grow in direction of mouse drag (#9018)

  • Theme colors adjustments (#9078)

  • Add information about PyQt5 deprecation (#9079)

  • Drop Python 3.10 and implement 3.11+ changes (#9104)

  • Selectable camera modes with Separate (default) and Shared views across ndisplay (#9151)

New Features#

  • Add floating axes canvas overlay (#8262)

  • Histogram for the Image layer controls and contrast limits popup (#8391)

  • Selectable camera modes with Separate (default) and Shared views across ndisplay (#9151)

Improvements#

  • Add handler for show message when napari fails to import (#8609)

  • UX: Add viewer mouse binding (alt) to the scroll wheel to scroll layers (#8731)

  • Make tips more generally usable (#8762)

  • Add handler to show message when napari fails to import (#8803)

  • Unify use of theme colors (#8927)

  • Make multiscale level labels static to avoid delayed updates (#9006)

  • Accept pathlib.Path in reader and writer plugin utilities (#9042)

  • Fix: adapt frame box upper bound to data size (allow >6-digit indices) (#9064)

  • Theme colors adjustments (#9078)

  • feat: add metadata submenu to the layers menu (#9107)

  • Enable clickable links for tips that have URLs (#9114)

  • Use level-0 extent for multiscale bounding box overlay (#9142)

  • Show active level in Auto entry of multiscale combobox (#9143)

Performance#

  • [Labels, Perf] Refactor painting to use masks and bounding boxes (#8636)

Bug Fixes#

  • Make multiscale level labels static to avoid delayed updates (#9006)

  • Gate drag_to_zoom to pan/zoom mode or no layers selected (#9016)

  • [Shapes] When using Shift to draw circle/square, allow shape to grow in direction of mouse drag (#9018)

  • Fix: adapt frame box upper bound to data size (allow >6-digit indices) (#9064)

  • Fix half-voxel offset (#9065)

  • make LabelColorMapBase deep-copyable (#9069)

  • Make Wayland XCB/GLX workaround modular for non-NVIDIA GPUs (#9070)

  • Fix colorbar box (#9071)

  • Remove stretch from features table widget layout (#9099)

  • Limit dims scroll to 1 step at a time (#9117)

  • Fix get_status for RGB images in 3D display mode (#9135)

  • Fix problem with ignoring annotation when drag and drop (#9136)

  • Fix multiscale _set_view_slice when switching to 3D (#9141)

  • Use level-0 extent for multiscale bounding box overlay (#9142)

  • Guard against stale index for layer paint methods (#9149)

  • Fix: Restore tooltip symbol QSS after #9003 (#9161)

API Changes#

  • Remove compat.py (and StrEnum export), update imports, and remove case-insens lookup (#9133)

Deprecations#

  • Next round of deprecation for scale_bar.unit (#9029)

Documentation#

  • Up-to-date compile constraints instructions (docs#1043)

  • Update version_switcher for 0.7.1 (docs#1044)

  • Fix formatting in version_switcher.json (remove spurious comma) (docs#1045)

  • Update pre-commit config, apply rules (docs#1046)

  • python >=3.11 for all docs references (docs#1052)

  • Add tip to use -h or --help flags with the compile_constraints.sh script (docs#1053)

  • Remove github-advanced-security[bot] from list of reviewers of 0.7.1 (docs#1055)

  • Add initial release notes for 0.8.0 (docs#1056)

  • Update README with links for the dev and published docs (docs#1058)

  • Feature documentation for image layer histogram (docs#1059)

  • examples: remove deprecated scale_bar.unit and enable viewer.scale_bar.visible = True (#9012)

Other Pull Requests#

  • Fix linkchecker action constraints to file for py312 (docs#1048)

  • [pre-commit.ci] pre-commit autoupdate (docs#1050)

  • Use shared workflow for remove ready to merge label (docs#1054)

  • Prevent selection from overwriting feature_defaults (#8769)

  • Use Qt6 colorScheme to detect system theme (#8904)

  • Remove check of Qt version that disable gradient in themes (#8961)

  • QSS cleanup: remove plugin manager qss and some even older plugin sorter qss (#9003)

  • typing: add type annotations to _tracebacks.py (#9011)

  • Update dask, hypothesis, ipython, matplotlib, pytest, tqdm, virtualenv (#9036)

  • [pre-commit.ci] pre-commit autoupdate (#9040)

  • [Maint] Remove unneeded _set_highlight calls in Shapes key and mouse binds (#9060)

  • Fix flaky fullscreen test: skip on all Qt >= 6.9.0 (#9074)

  • [pre-commit.ci] pre-commit autoupdate (#9080)

  • ci: trigger dependency check on PR edits (#9084)

  • Add -h | --help arguments to compile_constraints.sh (#9090)

  • Actually use pride logo (#9091)

  • fix(typing): fix mypy error in qt_list_view.py (#9093)

  • fix(typing): add typing and fix mypy error in qt_tree_view.py (#9094)

  • fix(typing): add typing and fix mypy error in screenshot_dialog.py (#9095)

  • fix(typing): add typing and fix mypy errors in tree/group.py (#9096)

  • fix(typing): add typing and fix mypy errors in debugging.py (#9097)

  • fix(typing): add typing and fix mypy errors in custom_types.py (#9098)

  • fix(typing): add typing and fix mypy error in qt_tooltip.py (#9101)

  • fix(typing): add typing and fix mypy error in qt_spinbox.py (#9102)

  • fix(typing): add typing and fix mypy error in qt_scrollbar.py (#9103)

  • bump numpy to 2.5.0 in mypy constraints to fix [unused-ignore] errors (#9106)

  • fix(typing): add typing and fix mypy errors in qt_range_slider_popup.py (#9108)

  • fix(typing) : add typing and fix mypy error in qt_progress_bar.py (#9109)

  • fix(typing): add typing and fix mypy error in qt_message_popup.py (#9111)

  • fix(typing): add typing and fix mypy error in qt_font_size.py (#9112)

  • fix(typing): add typing and fix error in qt_dims_sorter.py (#9113)

  • Use shared version of label clean workflow (#9116)

  • [pre-commit.ci] pre-commit autoupdate (#9122)

  • fix(typing): add typing and fix mypy error in qt_about.py (#9125)

  • Minimum support for zarr>=3 for builtins (#9134)

  • Stop using pickle when copying/pasting spatial features of layer (#9146)

  • Remove image_reader_to_layerdata_reader (#9147)

  • Remove color_dict_to_colormap (#9148)

  • QApplication mouse event to trigger event filter of test_toggle_menubar (#9152)

  • Remove pyautogui and update failing tests on Windows-Qt6 (#9153)

  • gitignore various agent related file names (#9154)

  • Update certifi, coverage, fsspec, hypothesis, ipython, npe2, pillow, pydantic-settings, pytest, pytest-rerunfailures, scipy, tqdm, virtualenv, wrapt (#9158)

  • macos-15 runner instead of macos-latest (now macos-26) to prevent segfaults (#9162)

  • Remove method and functions marked for removal in 0.8.0 (#9177)

16 authors added to this release (alphabetical)#

(+) denotes first-time contributors 🥳

16 reviewers added to this release (alphabetical)#

(+) denotes first-time contributors 🥳