Published July 14, 2026 | Version v0.8.0

napari: a multi-dimensional image viewer for Python

Authors/Creators

  • 1. Chan Zuckerberg Initiative
  • 2. Harvard Medical School
  • 3. napari; University of Warsaw, Faculty of Mathematics, Informatics, and Mechanics
  • 4. Monash eResearch Centre, Monash University
  • 5. The Jackson Laboratory
  • 6. napari
  • 7. MRC-LMB
  • 8. Monash University
  • 9. Iber Lab - ETH Zürich
  • 10. Quansight
  • 11. Quansight Labs
  • 12. European Molecular Biology Laboratory, Genome Biology Unit, Heidelberg, Germany
  • 13. University of Minnesota — Twin Cities
  • 14. Willing Consulting
  • 15. Kyoto University
  • 16. Chan Zuckerberg Biohub
  • 17. Leibniz-IPHT, Jena, Germany
  • 18. iLABS, Inc.
  • 19. INRAE, Nantes, France
  • 20. Harvard Medical School, BIDMC
  • 21. EPFL Center for Imaging
  • 22. SETI Institute/NASA ARC
  • 23. Georg-August-Universität Göttingen
  • 24. University of California, Santa Cruz
  • 25. Heidelberg University, Germany
  • 26. University of Colorado Anschutz
  • 27. Laboratory for Optics and Biosciences, Ecole Polytechnique, INSERM, CNRS, Palaiseau, France
  • 28. Unaffiliated
  • 29. Imaging Methods Core Facility at Biocev, Charles University
  • 30. Friedrich Miescher Institute for Biomedical Research (FMI), Basel (Switzerland)
  • 31. EMBL Heidelberg, Germany
  • 32. Pioneering Research Institute, RIKEN
  • 33. University of California, Irvine
  • 34. Dartmouth College
  • 35. Tel Aviv University, Israel
  • 36. Ramona Optics Inc, Durham, North Carolina, USA
  • 37. Biohub, San Francisco
  • 38. University College London
  • 39. The University of Tokyo / LPIXEL Inc.
  • 40. Naval Nuclear Laboratory
  • 41. Swiss Federal Institute of Technology (EPFL), Lausanne, Switzerland
  • 42. Calico Life Sciences LLC
  • 43. Universitätsmedizin Greifswald
  • 44. Kobe University
  • 45. Chan Zuckerberg Initiative Foundation
  • 46. UCL & The Alan Turing Institute
  • 47. HHMI Janelia Research Campus
  • 48. EMBL Heidelberg
  • 49. MetaCell
  • 50. Delft University of Technology
  • 51. Apex Systems
  • 52. Sainsbury Wellcome Centre - University College London
  • 53. University of California, Los Angeles
  • 54. University Hospital Würzburg - Institute of Neuroradiology
  • 55. University of Oregon
  • 56. Kavli Institute for Systems Neuroscience at NTNU, Trondheim, Norway
  • 57. Algarve Centre of Marine Sciences (CCMAR)
  • 58. Yikes LLC
  • 59. Department of Electrical and Electronic Engineering, Stellenbosch University
  • 60. EPFL
  • 61. Brown University
  • 62. Translucence Biosystems
  • 63. NanoString Technologies, Inc.
  • 64. European Bioinformatics Institute - European Molecular Biology Laboratory
  • 65. University of Wisconsin-Madison
  • 66. Mangalmay Institute of Management & Technology
  • 67. Indiana Wesleyan University
  • 68. AI lab for Living Technologies, University Medical Centre Utrecht (The Netherlands)
  • 69. DFG cluster of excellence 'Physics of Life', TU Dresden
  • 70. Houston Methodist Research Institute
  • 71. Aix Marseille University, CNRS, Fresnel, I2M, IBDM, Turing Centre for Living systems
  • 72. TU-Dresden / EPFL
  • 73. ETH Zurich / University of Zurich
  • 74. Tobeva Software
  • 75. European Molecular Biology Laboratory (EMBL)
  • 76. Baylor College of Medicine
  • 77. Chinese Academy of Sciences - SIAT, Shenzhen, China
  • 78. Data Science Lab, University of Bern, Switzerland
  • 79. Katana Labs
  • 80. Galgotias University
  • 81. Institute of Cell Biology, University of Bern, Switzerland
  • 82. Chaitanya Bharathi Institute of Technology
  • 83. University of Bonn

Description

napari 0.8.0

Tue, Jul 14, 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

Dropping Python 3.10 and PyQt5

napari 0.8.0 drops support for Python 3.10 (#9104) and deprecates PyQt5 support (#9079).

These changes are being made to help maintenance of napari. Python 3.10 will reach end-of-life support in October 2026, while PyQt5 has already reached end-of-life, and is becoming increasingly difficult to maintain as a dependency. PyQt6, in contrast, has been the daily driver for the napari core team for many months. As we recognise that PyQt5 has extensive usage in the community, we have decided to deprecate it in this release and drop support in Q4 2026. If your project still depends on Qt5, consider migrating to PySide6 or PyQt6. As always, feel free to get in touch on our Zulip if you encounter any issues!

Histogram for Image layer

It's been a heckuva long time coming, but napari Image layers finally gain a built-in histogram (#8391)! Wonder no more about why your image looks black or totally washed out — you can now see the distribution of your pixels' brightness right there in the layer controls, or within the larger contrast limits widget (which, as a reminder, you can access by right clicking on the contrast limits slider).

You can access the brightness of the current slice (default), or the full layer, and it will sample progressively from remote chunks if you are looking at large remote data. Try it out!

<figure>
  <video width="100%" controls autoplay loop muted playsinline>
    <source src="../_static/images/histogram.webm" type="video/webm" />
    <source src="../_static/images/histogram.mp4" type="video/mp4" />
    <img src="../_static/images/histogram.jpg"
      title="Your browser does not support the video tag"
      alt="Video showing a napari viewer with a 2D canvas showing a slice of a large 3D image. The layer controls include a histogram of image intensities that updates as you pan around the canvas, and also, when selecting the full image, as pixels are drawn from remote data."
    >
  </video>
</figure>

Synced cameras between 2D and 3D views

Ever switched between 2D and 3D views to check out your data, only to be frustrated that the zoom and center has been reset? Now, by default, the cameras are synced between views (#9151)! The synced camera's zoom and center persists when switching between 2D and 3D, with the depth (Z) component synced through the dimension slider to complete the round-trip.

To unlock the cameras from each other for completely separate views, you can toggle viewer.camera.synced = False from the Camera popup (right-click 2D/3D button) or Toggle Synced Camera (Ctrl/Cmd+U) in the View menu. Set your preferred default in Preferences -> Application -> Synced Camera.

<figure>
  <video width="100%" controls autoplay loop muted playsinline>
    <source src="../_static/images/synced-cameras.webm" type="video/webm" />
    <source src="../_static/images/synced-cameras.mp4" type="video/mp4" />
    <img src="../_static/images/synced-cameras.jpg"
      title="Your browser does not support the video tag"
      alt="Video showing zoom and position staying in sync between 2D and 3D views of the same data."
    >
  </video>
</figure>

Auto-fill label contours when painting

Annotating blobs in 2D just got a lot faster! In paint mode, right-click to start a self-filling area annotation. Then draw your shape, and when you come back around to the start point, the shape will automatically fill with your selected label! (#9075) See it in action below:

<figure>
  <video width="100%" controls autoplay loop muted playsinline>
    <source src="../_static/images/auto-fill-labels.webm" type="video/webm" />
    <source src="../_static/images/auto-fill-labels.mp4" type="video/mp4" />
    <img src="../_static/images/auto-fill-labels.jpg"
      title="Your browser does not support the video tag"
      alt="Video showing an annotation around a coin, with the coin filling with the annotated label at the end."
    >
  </video>
</figure>

We intend to keep refining this functionality, so if you like it but it doesn't quite fit in your workflow, please {ref}get in touch <community>!

Paint into more arrays faster!

Labels painting is now much faster for zarr arrays, and you can now paint into other array types such as dask and tensorstore! Painting with very large brush sizes (e.g. 1,000) is now possible where it used to be extremely choppy. Give it a whirl! (#8636)

Floating axes overlay

Ever feel disoriented looking at your data? You're not alone. Until #8262, the axes overlay would live in the same space as your data, and would be out of view if you didn't have the top left corner of your data on the canvas. Now you can have a little 2- or 3-axis compass always on in a corner of the canvas. Find it in the View menu!

Improving the napari theme

Like many things in community-run open source, napari's theme grew organically as we added features and UI elements. #8927 unified the look of many of those elements, while #9078 improved the default light and dark themes by increasing contrast to meet Web Content Accessibility Guidelines. Want to build your own WCAG-compliant theme? Try out the new WCAG table in examples/theme_sample.py (#9175)!

New Features

  • Add floating axes canvas overlay (#8262)
  • Histogram for the Image layer controls and contrast limits popup (#8391)
  • Feat: add cellpose-inspired right-click to encircle mask creation interaction mode (#9075)
  • Toggleable synced (default) and separated camera views across ndisplay (#9151)

Improvements

  • Add example driving computation from gui (#8658)
  • 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)
  • Add WCAG contrast table to Theme Sample example (#9175)

Performance

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

Bug Fixes

  • Fix: napari script runner with multiprocessing (#8936)
  • 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)
  • Fix: update cached unit scale when layer data dimensionality changes (#9164) (#9181)

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

  • Update Theme contribution guidance (docs#1002)
  • 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)
  • Update organization ownership policy (docs#1061)
  • Update 0.8.0 release notes, add highlight (docs#1062)
  • Add video and fallback image for histogram highlight (docs#1063)
  • Fix video relative paths which had extra '..' (docs#1064)
  • Add Camera Guide to explain synced/separate camera modes (docs#1065)
  • Final update of release notes for 0.8.0 (docs#1066)
  • Final release notes for 0.8.0 (docs#1068)
  • 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)
  • ci(dependabot): bump the github-actions group across 1 directory with 5 updates (docs#1057)
  • 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)
  • [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)
  • Clean rest of elements marked as "to remove in 0.8.0" (#9191)

19 authors added to this release (alphabetical)

(+) denotes first-time contributors 🥳

18 reviewers added to this release (alphabetical)

(+) denotes first-time contributors 🥳

Notes

If you use this software, please cite it using these metadata.

Files

napari/napari-v0.8.0.zip

Files (4.0 MB)

Name Size Download all
md5:95b09d3ea1b6a9949e23e37ae6f85662
4.0 MB Preview Download

Additional details

Related works

Is supplement to
Software: https://github.com/napari/napari/tree/v0.8.0 (URL)

Software