napari: a multi-dimensional image viewer for Python
Bibliographic record
Abstract
napari 0.6.2 Tue, Jul 01, 2025 We're happy to announce the release of napari 0.6.2! napari is a fast, interactive, multi-dimensional image viewer for Python. It's designed for exploring, annotating, and analyzing multi-dimensional images. It's built on Qt (for the GUI), VisPy (for performant GPU-based rendering), and the scientific Python stack (NumPy, SciPy, and friends). For more information, examples, and documentation, please visit our website: https://napari.org/ Highlights The amazing new Grid mode! 🗺️ The visualization of Grid mode has been redone from the ground up! This new Grid mode (#7870) now puts each layer into its own view (a VisPy Viewbox) with cameras linked together. Now, you can pan and zoom one view, and all other views in the grid will follow along. Layers are no longer awkwardly transformed into the same world space and displayed in a grid, only to make comparing the details of each a challenge. Grid based exploration is now fluid, fast, and intuitive, especially when working with large images and 3D+ data! The mouse can even be used over one View, while updating the data, such as a label or shape annotation, in the selected layer of a different view. The usual napari overlays can now also be added to each grid, instead of just the canvas (eg. viewer.scale_bar.gridded = True). Grid mode spacing now works proportionally to the layer extents (i.e. [0,1), as in 0.6.0) or as a pixel value [1,1500) and will automatically adjust if needed. To coincide with this new Grid mode, we have chosen to reverse the ordering of layers in the grid (#8053). The first layer added to the viewer will now be at the top left of the grid, and the last layer added will be at the bottom right; new layers will be added to the bottom right of the grid. If you prefer the previous behavior, you can set the Grid Stride to -1 in the Preferences dialog. The Features Table Widget is now a napari builtin! 📊 The features table from napari-properties-viewer is now a builtin widget in napari (#7877) and greatly improved! This widget allows you to view and edit the properties of Points, Shapes, and Labels layers in a table widget. The widget can be opened from the Layers menu -> Visualize -> Features table widget (napari builtins) or from the command palette. You can also save the properties table to a CSV file. Check out the Features table widget example to learn more. Community developments! 📅 We are excited to share our new active roadmap which is a living document that will be updated as we continue to develop napari. This document is intended to help the community understand the priorities of the napari team and to help us all work together to make napari better. We are also now including all napari related events in the community calendar and as an image.sc post, including conferences, tutorials, sprints, virtual seminars, and more. If you have an event you would like to add, please reach out to us! Some great features for contributors! 🛠️ Contributing documentation is now a much smoother experience! By default, new documentation will build in around 3 minutes, instead of the previous 20 minutes. This speed is thanks to new, slimmer make commands (slimfast by default) that can also be triggered in PRs with a bot (eg. @napari-bot make docs). Read our updated docs contribution guide and reach out for help. The organization of the napari repo has been updated by moving into a src/ directory (#7952). This is modern best practice in Python projects (and what has long been standard in our napari-plugin-template) to avoid issues with relative imports and should now always result in importing the napari version installed in the current environment. For developers, especially of pull requests prior to this release, you may have many merge conflicts to resolve. Please ping the napari team if you would like help resolving these conflicts. There is now public API to access widgets docked in the viewer (#7965). Check out the new documentation on the napari website to learn more about using this API to communicate between widgets. If you previously used viewer.window._dock_widgets, you should now use viewer.window.dock_widgets. New Features Grid mode using vispy ViewBox and linked cameras (#7870) Features table widget as builtin (#7877) Improvements Add check if there is mix of local and non local installation (#7745) Reduce warmup of numba if non numba backend is selected (#7917) Optional rotation handle for selection box overlay + simplify inheritance for Vispy overlays (#7958) Add public API to get access to docked widgets (#7965) Allow to use ViewerModel as annotation of plugin constructor argument (#8002) Update [shapes]: 'make select_all_shapes' keybinding a toggle (#8014) Update[shortcuts]: add Ctrl/Cmd-A as secondary keybinding for select_all_shapes (#8015) Fix Shapes layer to work with Features Table (#8048) Reverse canvas grid order (#8053) Improve tooltips for Grid attributes (#8058) Performance [Shapes] Use the plural methods to update colors of all selected shapes at once (#7995) Bug Fixes Fix scalebar theme connection (#7902) Don't add widgets to non-contributable menus (#7926) Fix handle mouse events (#7936) Fix moving of first/last vertex of polygons added in ring mode (#7942) Update shapes highlight on zoom (#7953) Fix invalidate of extent cache in Layers (#7972) [Points] Fix events.data_indices for ActionType.ADDED event when adding single point (#7983) Fix interaction box initialization (#8011) Fix angles not showing correctly in UI (#8013) Bugfix: ensure multiscale images can be merged using contextual action (#8025) Fix Shapes layer to work with Features Table (#8048) Fix grid stride layering (#8057) Build Tools Bump requests from 2.32.3 to 2.32.4 in /resources (#8010) Documentation Update README to use imshow and add example to generate image (#7989) Update docstring in mouse_drag_callback.py (#8019) Add information about conda version and downloads to badges (#8054) Add links to napari troubleshooting documentation (#8061) Update version switcher for 0.6.1 (docs#713) Update contributing docs page (docs#715) Update code of conduct committee members (docs#716) Add features table widget (docs#718) Update docker build links (docs#720) Add initial documentation about widget communication (docs#721) update grid mode explanation and add video (docs#725) Update installation.md to link to conda getting started not miniconda (docs#726) Update governance docs (docs#729) Initial release notes for alpha of 0.6.2 (docs#734) Add active roadmap document (docs#735) Use darker blue for community meetings in napari calendar (docs#736) Add draft of 0.6.2 release notes (docs#743) 0.6.2rc1 release notes (docs#744) Final 0.6.2 Release Notes (docs#751) Add troubleshooting section about mixed local and non local installations (docs#752) Other Pull Requests Add docs constraints for python 3.12 (#7714) Include Qt PyPI server for pre-releases (#7803) Refactor layer overlays visuals from VispyLayer to VispyCanvas (#7835) Update dask, hypothesis, numpy, tensorstore, vispy (#7948) [pre-commit.ci] pre-commit autoupdate (#7951) Restore image in Readme (#7959) Add cron check to update reader extensions v3 (#7966) Update coverage, dask, fsspec, hypothesis, pydantic, tifffile, vispy (#7967) fix vendored script and trigger workflow on pull_request (#7968) [pre-commit.ci] pre-commit autoupdate (#7970) Remove layers_change event that is marked to be removed in 0.5.0 (#7971) [maintenance] Use Wandalen/wretry.action to auto-retry fail in --pre tests (#7986) Update hypothesis, ipython, jsonschema, tifffile (#7987) [pre-commit.ci] pre-commit autoupdate (#7988) Remove the reset_scroll_progress action and keybinding (#7990) Stop status thread on Keyboard Interruption (Ctrl+C) (#7994) Update hypothesis, magicgui, pandas, pyqt6, pytest, pytest-pretty (#8000) Update pyproject.toml to fix coverage paths (alt) (#8001) [Maintenance] Remove redundant initialization in Points layer and restructure for clarity (#8005) Fix numba fail of compile on GHA macOS runners (#8018) Update certifi, coverage, hypothesis, pydantic, superqt, tifffile, xarray (#8029) Update hypothesis, pytest, superqt (#8036) Stop benchmark reporting if benchmark action is skipped (#8037) Update app-model pin to >=0.4.0, update hypothesis, pygments, scipy (#8041) [pre-commit.ci] pre-commit autoupdate (#8042) Bump bermuda to 0.1.5 (#8052) Update hypothesis, lxml, numpydoc (#8060) Fix comment and manual dispatch triggered build jobs (docs#723) Test passing PR number instead of ref on triggered build (docs#738) [maint] fix circleCI branch naming in trigger action (docs#739) [Enh] When ready-to-merge is applied, do a full build of docs (docs#745) Only build artifact on ready-to-merge label (docs#749) 13 authors added to this release (alphabetical) (+) denotes first-time contributors 🥳 Ashley Anderson - @aganders3 Carol Willing - @willingc Draga Doncila Pop (docs) - @DragaDoncila Grzegorz Bokota (docs) - @Czaki Jacopo Abramo - @jacopoabramo + Juan Nunez-Iglesias (docs) - @jni Lorenzo Gaifas (docs) - @brisvag Lukasz Migas - @lukasz-migas Maximilian Mayrhauser - @Llewi + Melissa Weber Mendonça - @melissawm Peter Sobolewski (docs) - @psobolewskiPhD Rahul Kumar - @rahul713rk + Tim Monko (docs) - @TimMonko 11 reviewers added to this release (alphabetical) (+) denotes first-time contributors 🥳 Ashley Anderson - @aganders3 Carol Willing - @willingc Draga Doncila Pop (docs) - @DragaDoncila Grzegorz Bokota (docs) - @Czaki Jacopo Abramo - @jacopoabramo + Juan Nunez-Iglesias (docs) - @jni Lorenzo Gaifas (docs) - @brisvag Melissa Weber Mendonça - @melissawm Peter Sobolewski (docs) - @psobolewskiPhD Tim Monko (docs) - @TimMonko Wouter-Michiel Vierdag - @melonora
Fetched live from OpenAlex and de-inverted. Abstracts are not stored in this database: the inverted indexes are 8.6 GB of the frame’s 9.3 GB of text, and the host has 13 GB free.
How this classification was reachedexpand
Full frame machine prediction
Teacher imitationNot calibrated prevalence, not ground truth. Human validation pending. The Gemma side is a direct model label for every work in the frame, read from the title-only record. The Codex side is a classifier learned from the 10,348 direct Codex labels and calibrated to design-weighted sample rates; fields without enough sample support carry no Codex call. Candidate is the union of the two sides; consensus is their intersection. These outputs are machine_predicted_unvalidated and are not human labels.
Distilled classifier scores by category (both heads)
| Category | Codex | Gemma |
|---|---|---|
| Metaresearch | 0.002 | 0.005 |
| Meta-epidemiology (narrow) | 0.002 | 0.002 |
| Meta-epidemiology (broad) | 0.001 | 0.002 |
| Bibliometrics | 0.002 | 0.001 |
| Science and technology studies | 0.001 | 0.001 |
| Scholarly communication | 0.004 | 0.006 |
| Open science | 0.005 | 0.005 |
| Research integrity | 0.002 | 0.004 |
| Insufficient payload (model declined to judge) | 0.321 | 0.297 |
Machine scores (provisional)
The two teacher heads of the student model, read on this work. A score orders the frame for review; it never asserts a category, and the validation status ships verbatim with every row.
Baseline scores from an immature model (maturity gate not passed, 7 training rounds). Scores rank; they never assert a category.
score_only:v0-immature-baseline · verbatim from the scoring run: score_only means the number may rank works, and no category label ships from itClassification
machine, unvalidatedMachine predicted; a candidate call from one source (direct Gemma or distilled Codex), not a consensus.
How this classification was reached, model by model and score by score, is at the end of the page under "How this classification was reached".