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.
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.
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.
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.
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:
pyqt6for 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
appdirstoplatformdirs(#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
trianglefromnapari[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
bermudato testing dependencies (#8827)[pre-commit.ci] pre-commit autoupdate (#8831)
Add more debug information on fail to import Qt (#8834)
maint: replace
StringEnumbase class with withStrEnum(#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 createinstead ofsoftprops/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
ghworking 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 reviewers added to this release (alphabetical)#
(+) denotes first-time contributors 🥳
Anniek Stokkermans - @AnniekStok
Carlos Mario Rodriguez Reza - @carlosmariorr
Carol Willing - @willingc
Caroline Malin-Mayor (docs) - @cmalinmayor +
Constantin Aronssohn - @cnstt
David Stansby - @dstansby
Draga Doncila Pop - @DragaDoncila
github-advanced-security[bot] - @github-advanced-security[bot]
Grzegorz Bokota (docs) - @Czaki
hiroalchem - @hiroalchem
Jacopo Abramo - @jacopoabramo
Juan Nunez-Iglesias - @jni
Kabilar Gunalan - @kabilar
Lorenzo Gaifas - @brisvag
Lucien Hinderling - @hinderling +
Margot Chazotte - @MargotCh
Melissa Weber Mendonça - @melissawm
Peter Sobolewski - @psobolewskiPhD
Wulin Teo - @wulinteousa2-hash +
Yann Pellegrini - @Yann-P