napari: a multi-dimensional image viewer for Python
Authors/Creators
-
Sofroniew, Nicholas1
-
Lambert, Talley2
-
Bokota, Grzegorz3
-
Nunez-Iglesias, Juan4
-
Sobolewski, Peter5
- Sweet, Andrew1
-
Gaifas, Lorenzo6
- Evans, Kira1
- Burt, Alister7
- Doncila Pop, Draga8
- Yamauchi, Kevin9
-
Weber Mendonça, Melissa10
-
Rodríguez-Guerra, Jaime11
- Liu, Lucy10
-
Buckley, Genevieve8
-
Vierdag, Wouter-Michiel12
-
Anderson, Ashley1
-
Monko, Timothy13
-
Willing, Carol14
-
Rodríguez-Reza, Carlos M.15
- Royer, Loic16
- Can Solak, Ahmet16
-
Harrington, Kyle I. S.1
-
Abramo, Jacopo17
-
Ahlers, Jannis8
-
Ajina, Sesan18
-
Althviz Moré, Daniel10
-
Ambroset, Mélodie19
-
Amsalem, Oren20
-
Andò, Edward21
-
Annex, Andrew22
-
Archit, Anwai23
-
Aronssohn, Constantin
-
Balzaretti, Filippo24
- Boone, Peter
-
Bestak, Kresimir25
- Bragantini, Jordão16
-
Bunten, David26
-
Bussonnier, Matthias11
-
Caporal, Clément27
-
Chazotte, Margot25
-
Coccimiglio, Ian28
-
Čočková, Zuzana29
-
Eglinger, Jan30
-
Eisenbarth, Andreas31
- Freeman, Jeremy1
-
Fukai T., Yohsuke32
- Gohlke, Christoph33
- Gunalan, Kabilar
-
Halchenko, Yaroslav Olegovich34
- Har-Gil, Hagai35
-
Harfouche, Mark36
-
Hilsenstein, Volker31
-
Huijben, Teun A.P.M.37
- Hutchings, Katherine38
-
Kawai, Hiroki39
-
Kozar, Robert40
-
Lauer, Jessy41
-
Le Meur-Diebolt, Samuel38
-
Lefebvre, Austin E. Y. T.42
-
Lichtner, Gregor43
-
Liu, Hanjin44
- Liu, Ziyang45
- Lowe, Alan46
-
Malin-Mayor, Caroline47
-
Marconato, Luca48
-
Martin, Sean49
- McGovern, Abigail8
- Migas, Lukasz50
-
Miller, Nadalyn51
-
Miñano, Sofía52
-
Muñoz, Hector53
-
Müller, Jan-Hendrik23
- Nauroth-Kreß, Christopher54
-
Newstein, Peter55
-
Obenhaus, Horst A.56
-
Palecek, David57
-
Pape, Constantin23
- Pellegrini, Yann
-
Perlman, Eric58
-
Theart, Rensu Petrus59
- Pevey, Kim
-
Peña-Castellanos, Gonzalo10
-
Phelps, Jasper60
-
Pierré, Andrea61
- Pinto, David
- Reksoatmodjo, Anthony62
-
Ross, David63
-
Russell, Craig T.64
- Ryan, James
-
Selzer, Gabriel65
-
Sharma, Rupesh66
- Sheikh, Imad Uddin67
-
Sirmpilatze, Nikoloz52
-
Smith, MB68
-
Smith, Paul38
- Sofiiuk, Konstantin
-
Soltwedel, Johannes69
-
Stansby, David38
-
Teo, Wulin70
-
Vanaret, Jules71
- Wadhwa, Pam11
-
Weigert, Martin72
-
Windhager, Jonas73
- Winston, Philip74
-
Yu, Qin75
-
Zhang, Liudeng76
-
Zhao, Rubin77
-
Witz, Guillaume78
-
Leomil Zoccoler, Marcelo79
-
Yadav, Aniket Singh80
-
Hinderling, Lucien81
-
Kabde, Omkar82
-
Roald-Arbøl, Mikkel83
- 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.Pathin 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(andStrEnumexport), 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
-hor--helpflags with thecompile_constraints.shscript (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.unitand enableviewer.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 | --helparguments tocompile_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) QApplicationmouse event to trigger event filter oftest_toggle_menubar(#9152)- Remove
pyautoguiand 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-15runner instead ofmacos-latest(nowmacos-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 🥳
- Aniket - @Aniketsy
- Anwai Archit - @anwai98 +
- Carlos Mario Rodriguez Reza (docs) - @carlosmariorr
- Caroline Malin-Mayor - @cmalinmayor
- Davin Potts - @applio +
- Grzegorz Bokota (docs) - @Czaki
- Imaduddin Sheikh - @isheikh8492 +
- Juan Nunez-Iglesias - @jni
- Kabilar Gunalan - @kabilar
- Kyle I. S. Harrington - @kephale
- Lorenzo Gaifas - @brisvag
- Mikkel Roald-Arbøl - @roaldarbol +
- Omkar Kabde - @omkar-334 +
- Peter Sobolewski (docs) - @psobolewskiPhD
- Rupesh - @Rupeshhsharma +
- Talley Lambert - @tlambert03
- Teun Huijben - @TeunHuijben +
- Tim Monko (docs) - @TimMonko
- Tony Reksoatmodjo - @Modjular +
18 reviewers added to this release (alphabetical)
(+) denotes first-time contributors 🥳
- Aniket - @Aniketsy
- Carlos Mario Rodriguez Reza (docs) - @carlosmariorr
- Carol Willing - @willingc
- Caroline Malin-Mayor - @cmalinmayor
- carsen-stringer - @carsen-stringer
- Davin Potts - @applio +
- Draga Doncila Pop - @DragaDoncila
- Gabriel Selzer - @gselzer
- Grzegorz Bokota (docs) - @Czaki
- Imaduddin Sheikh - @isheikh8492 +
- Jacopo Abramo - @jacopoabramo
- Juan Nunez-Iglesias - @jni
- Kyle I. S. Harrington - @kephale
- Lorenzo Gaifas - @brisvag
- Mikkel Roald-Arbøl - @roaldarbol +
- Peter Sobolewski (docs) - @psobolewskiPhD
- Teun Huijben - @TeunHuijben +
- Tim Monko (docs) - @TimMonko
Notes
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
- Repository URL
- https://github.com/napari/napari