napari 0.7.1#

⚠️ Note: these release notes are still in draft while 0.7.1rc1 is in prerelease testing. ⚠️

Wed, May 27, 2026

We’re happy to announce the release of napari 0.7.1! 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 Meso release containing awesome new features, but some effort may be needed when updating previous projects to use this version.

Highlights#

The napari 0.7.1 release is mainly a bug fix release, but it also includes some new features and improvements. Here are some of the highlights:

Signed Windows bundle#

Starting with the napari 0.7.1 release, our bundle on Windows is now signed with a NumFOCUS certificate, like our macOS bundle has been. This means that you should be able to run napari without any warnings about the application being from an unknown publisher. This is an important step forward for our Windows users, as it enhances security and trust in our application, especially in managed IT environments where unsigned applications may be blocked by default.

The certificate is issued for the NumFOCUS foundation, which supports napari and a large number of other open source projects.

If you encounter any issues related to this change, please let us know!

Selection of the rendered level for multiscale layers#

Prior to napari 0.7.1, when rendering a multiscale layer:

  • in 3D display, napari would always render the lowest resolution level of the pyramid

  • in 2D display, the pyramid level would be automatically selected based on the viewport

Thanks to #8917, users can now select a multiscale level to render. For the case of 3D display, for example, this allows for choosing a higher resolution rendering than before, as long as the selected level can fit within GPU texture limits. Meanwhile, for 2D display, you can fix the resolution level, which can be useful for annotation or previewing data prior to an analysis or export step.

The resolution dropdown in the layer controls allows the user to select different levels of a multiscale image.

Colorbars for points layer#

The points allows coloring points based of their feature values; in napari 0.7.1 we added support for colorbars (#8624), so you can now easily see the mapping between feature values and colors, just like the colorbars for image colormapping. This is especially useful when you have a large number of points and want to quickly understand the distribution of feature values.

napari_colorbar

Scalebar with units#

In previous versions of napari, if you added A scale bar using View > Scale Bar > Scale Bar visible, it was shown with no units. In napari 0.7.1 we now set default unit to pixel in #8900 and also add calculation of units for scale bar based on currently added layers in #8907, if they have units set.

Scale bar with units

Lock layer to prevent accidental deletions#

In #8736 we added initial lock mechanism for layers. When a layer is locked, it cannot be accidentally deleted or destructively modified. This is especially useful when you have a complex project with many layers and want to prevent accidental changes to important layers. Note: the layer controls are not affected by the lock at this time. In the future we plan to expand this feature to prevent not only deletion but also other modifications.

Lock layer on layer list

New Features#

  • Add points layer face and border colorbar (#8624)

Improvements#

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

  • Example: Enhance theme sample widget with theme colors, widgets (#8662)

  • Do not connect to children events of EventedDict items if there is no callback (#8673)

  • ENH: For multiscale 2d: store materialized thumbnail_level (#8715)

  • UX: Add Layer.locked property to protect layers from accidental deletion (#8736)

  • Enh, minor, builtins: use urllib (and defer) instead of requests if reading a remote script path (#8785)

  • Perf: Defer importing scipy.spatial (#8789)

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

  • Update text in mac installer to improve UX (#8806)

  • Fix: Use Python’s tokenize script decoding for builtin reader (#8838)

  • Add note for user how to reset the reader preference (#8848)

  • Ensure all napari and plugin commands use . instead of : (#8883)

  • Improve dask check to support more dask-backed array types (#8896)

  • Set pixel as default scalebar unit (#8900)

  • ScaleBar units from layers (#8907)

  • Turn off contrast/color controls when surface has vertex_colors (#8909)

  • Actually use theme type from npe contrib (#8915)

  • Add multiscale level lock for scalar field layers (#8917)

  • Do not add a new colormap if one already exists in napari (#8924)

  • Improve sizing of dims ordering popup (#8952)

  • typing: add type hints to napari/utils/shortcuts.py (#8983)

Performance#

  • ENH: For multiscale 2d: store materialized thumbnail_level (#8715)

  • Enh, minor, builtins: use urllib (and defer) instead of requests if reading a remote script path (#8785)

  • Perf: Defer importing scipy.spatial (#8789)

  • Improve dask check to support more dask-backed array types (#8896)

  • Use pep562 to defer AVAILABLE_LABELS_COLORMAPS which imports skimage.color -> scipy.linalg (#8903)

Bug Fixes#

  • Add max depth_value to avoid clipping volumes in 3d (#8809) (#8810)

  • Fix TypeError with anisotropic data in 3D ray intersections (#8812)

  • Reuse QMarginSlidersPopup between rightclicks (#8819)

  • Fix: Use Python’s tokenize script decoding for builtin reader (#8838)

  • Fix: Blocks dims slider widget creation feedback to dims model (#8840)

  • Fix: play button loop mode duplication (#8841)

  • Improve dask check to support more dask-backed array types (#8896)

  • Wrap Labels multiscale data in MultiScaleData object in setter (#8922)

  • Fix Labels show_selected_label being silently dropped after color shuffle (#8947)

  • Fix Volume visual crash when adding invisible scalar field in 3D (#8968)

Documentation#

  • Fix typo in 0.7.0 release notes (docs#967)

  • Remove draft note from 0.7.0 release notes. (docs#968)

  • Reorganize cards in homepage (docs#970)

  • Rename “latest” version switch to “dev” (docs#971)

  • Use stable version for dev docs bundle links (docs#973)

  • Remove mention of unmaintained plugin in quick start (docs#976)

  • Rename navbar entries (API and Contribute) (docs#978)

  • Update team page (docs#980)

  • Add “Edit on Github” to secondary sidebar (docs#982)

  • Add deprecation warning section in contributing guide (docs#984)

  • Enable search as you type and remove sidebar search (docs#989)

  • Use flexible search field for navbar (docs#991)

  • Add more info about example tags and _.py (docs#994)

  • Remove napari-hub from navbar and add to sidebar (docs#995)

  • Update deprecation warning guidance to use FutureWarning (docs#997)

  • Update Jupyter notebook example screenshot (docs#1003)

  • Update multiscale documentation to describe new level selection (docs#1004)

  • Add release notes for 0.7.1a1 (docs#1009)

  • Add sample databases (docs#1010)

  • Minimal all-contributors setup (docs#1011)

  • Add Carlos to Core Team page (docs#1012)

  • Update release notes for 0.7.1 (docs#1019)

  • Add Curtis and Brian to SC members (docs#1020)

  • Add Windows bundle signing and reputation info (docs#1022)

  • Fix: pyqt6 for conda install instructions (docs#1023)

  • Document layer locking in napari GUI and API (docs#1025)

  • Clean up button css for homepage and gallery (docs#1026)

  • Example: Enhance theme sample widget with theme colors, widgets (#8662)

  • Add note to Camera.angles docstring about quaternion normalisation (#8864)

  • Docs: Bump lower version of napari-sphinx-theme (#8886)

  • Replace v (shorter) with viewer in the examples (#8940)

  • Add Carlos Rodríguez-Reza to core team section of citation file (#8971)

  • Unpin sphinx for docs (#8993)

  • add Yann-P to Citation.cff (#8994)

  • Add units to Dims docstring and clarify Layer.units (#8996)

Other Pull Requests#

  • ci(dependabot): bump the github-actions group with 3 updates (docs#975)

  • Fix minor typos (docs#1005)

  • ci(dependabot): bump the github-actions group with 3 updates (docs#1006)

  • Remove “auto author assign” workflow (docs#1008)

  • Update workflows to python 3.14 (#8666)

  • Improve typing in qt_dims_slider and clean local functions (#8683)

  • Drop triangle from 3.14 docs dependencies (#8703)

  • Use viewer-based caching for font manager (#8761)

  • Enable TC003 - typing-only-standard-library-import rule in ruff config (#8791)

  • Solve “Could not resolve type hint for required parameter ‘qt_viewer’.” (#8792)

  • Add app-model to mypy task dependencies and fix errors (#8794)

  • Update coverage, dask, fsspec, hypothesis, ipython, numpy, pint, pygments, pyside6, qtconsole, superqt (#8796)

  • Move from appdirs to platformdirs (#8797)

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

  • Enable TC002 ruff rule (#8804)

  • Fix layerlist_context by move Calable from TYPE_CHECKING block (#8805)

  • Add zizmor security CI check (#8811)

  • Ban expensive import in ruff (#8815)

  • Remove triangle from napari[all] (#8824)

  • Add a Linux aarch64 test run (py313, pyqt6) to –pre, PR, and comprehensive tests (#8825)

  • [maint] Use ubuntu-slim 1 vCPU runners for simple jobs (#8826)

  • [maint] Add bermuda to testing dependencies (#8827)

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

  • Add more debug information on fail to import Qt (#8834)

  • maint: replace StringEnum base class with with StrEnum (#8835)

  • Do not import builtins from core (and forbid doing so) (#8842)

  • ci(dependabot): bump the actions group with 8 updates (#8844)

  • Remove sentinel leftover from napari.utils.misc (#8846)

  • Fix checking autogenerated type stubs (#8847)

  • Deprecate str_to_rgb which is unused (#8849)

  • Revert Citation validator from ubuntu-slim to use ubuntu-latest (#8851)

  • Deprecate make_default_color_array (#8852)

  • Dependabot cooldown (#8853)

  • Use bash script instead of docker image for checking PR labels (#8856)

  • Check untyped defs in labels (#8861)

  • add jasper-tms to citation (#8862)

  • Rename tox test step names to include ‘qt_backend’ (#8866)

  • Update hypothesis, npe2, pandas, pillow, pydantic-extra-types, pyqt6 (#8868)

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

  • Deprecate color_dict_to_colormap with FutureWarning (#8871)

  • Update hypothesis, lxml, magicgui, platformdirs, pytest, rich, virtualenv (#8876)

  • Add session type to –info (#8880)

  • Improve make_release workflow’s release steps (#8882)

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

  • ci(dependabot): bump the actions group with 4 updates (#8889)

  • Restore ability to push changes to napari-bot/napari repo (#8891)

  • Checkout only citation.cff in milestone checker (#8892)

  • Use hynek for build wheel (#8893)

  • Deprecate image_reader_to_layerdata_reader (#8895)

  • Finish typing bounding box and brush circle overlays (#8902)

  • Update hypothesis, lxml, pydantic, pydantic-extra-types, virtualenv, xarray (#8906)

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

  • Update certifi, hypothesis, ipython, matplotlib, pydantic, pydantic-settings (#8920)

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

  • Scalar base data setter (#8925)

  • Instead of checking if milestone is added, add the milestone on merge (#8926)

  • Adapt tests that use zarr to work on zarr < 3 and zarr > 3.2.0 (#8943)

  • Don’t use random floats for image layer data in screenshot tests (#8945)

  • Update coverage, fsspec, hypothesis, pydantic, pydantic-settings, tensorstore, tifffile, virtualenv (#8949)

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

  • Fix auto milestone workflow (#8954)

  • Explicitly pass the repository name in command setting milestone (#8955)

  • Update python version used to generate title and body of update constraints PR (#8957)

  • Use gh release create instead of softprops/action-gh-release (#8958)

  • Remove CODEOWNERS (#8959)

  • Restore testing on windows-latest (Revert 5d6ab46) (#8960)

  • ci(dependabot): bump the actions group across 1 directory with 8 updates (#8963)

  • Pass token to make gh working in create release workflow (#8964)

  • Next fix of release workflow by pass directly dist/* (#8966)

  • Try to fix passing prerelease to gh release create (#8969)

  • Explicitly set repository in make release workflow (#8970)

  • Update hypothesis, pandas, pyside6, pytest-rerunfailures, virtualenv (#8981)

  • In vispy overalys use **kwargs instead of synchronizing signature (#8982)

  • Update numpy, tensorstore, tifffile (#8986)

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

  • Bump vispy to 0.16.2 (#8992)

  • Docs: Bump napari-sphinx-theme to use sticky banners (#8997)

  • Deprecate scale_bar.unit (#9007)

22 authors added to this release (alphabetical)#

(+) denotes first-time contributors 🥳

22 reviewers added to this release (alphabetical)#

(+) denotes first-time contributors 🥳