# Bundle Working Group Meetings (archive)
## October 10
- Gonzalo
- Opened:
- [napari-cursor-tracker](https://github.com/conda-forge/staged-recipes/pull/24225)
- [napari-microtubule-analyzer](https://github.com/conda-forge/staged-recipes/pull/24227)
- [pyefd](https://github.com/conda-forge/staged-recipes/pull/24229) - dependency
## October 4, 2023
- Gonzalo
- Opened:
- [napari-ufish](https://github.com/conda-forge/staged-recipes/pull/24126)
- [napari-rembg](https://github.com/conda-forge/staged-recipes/pull/24127)
- [rembg](https://github.com/conda-forge/staged-recipes/pull/24128) - dependency
- [ufish](https://github.com/conda-forge/staged-recipes/pull/24129) -dependency
- Updated:
- https://github.com/conda-forge/blik-feedstock/pull/4
- https://github.com/conda-forge/blik-feedstock/pull/5
- https://github.com/conda-forge/blik-feedstock/pull/8
- https://github.com/conda-forge/cryohub-feedstock/pull/6
- https://github.com/conda-forge/pycromanager-feedstock/pull/38
- https://github.com/conda-forge/lfdfiles-feedstock/pull/11
## September 27, 2023
- Gonzalo:
- Opened:
- [napari-paralell](https://github.com/conda-forge/staged-recipes/pull/24057)
- [napari-openfibsem](https://github.com/conda-forge/staged-recipes/pull/24059)
- [napari-conference](0https://github.com/conda-forge/staged-recipes/pull/24094)
- [pyvirtualcam](https://github.com/conda-forge/staged-recipes/pull/24096)
## September 20, 2023
- Gonzalo:
- Opened:
- [generate-dense-patches](https://github.com/conda-forge/staged-recipes/pull/23979)
- Updated:
- https://github.com/conda-forge/napari-psf-simulator-feedstock/pull/1
- https://github.com/conda-forge/staged-recipes/pull/23859
- https://github.com/conda-forge/pycustomfocus-feedstock/pull/4
- https://github.com/conda-forge/napari-segment-blobs-and-things-with-membranes-feedstock/pull/16
- https://github.com/conda-forge/pycromanager-feedstock/pull/33
- https://github.com/conda-forge/pycustomfocus-feedstock/pull/5
- https://github.com/conda-forge/napari-psf-simulator-feedstock/pull/2
- https://github.com/conda-forge/arcos4py-feedstock/pull/6
## September 6, 2023
- Jaime:
- conda-standalone [converted](https://github.com/conda/conda-standalone/issues/35) into its own source repository with a regular contribution workflow. v23.7.2 is out on conda-forge.
- menuinst v2 [alphas](https://github.com/conda/menuinst/releases/tag/2.0.0a0) are out. A matter of cutting the first v2 stable and start asking for reviews in the other repos. Follow progress in https://github.com/conda/menuinst/issues/142
- Gonzalo: napari plugin conda forge recipes
- Opened:
-
- Updated:
- https://github.com/conda-forge/oiffile-feedstock/pull/4
- https://github.com/conda-forge/cellfinder-core-feedstock/pull/17
- https://github.com/conda-forge/napari-micromanager-feedstock/pull/4
- https://github.com/conda-forge/napari-clusters-plotter-feedstock/pull/13
- https://github.com/conda-forge/omero-py-feedstock/pull/12
- https://github.com/conda-forge/napari-hough-circle-detector-feedstock/pull/2
- https://github.com/conda-forge/magic-class-feedstock/pull/26
- https://github.com/conda-forge/napari-ism-feedstock/pull/8
- https://github.com/conda-forge/napari-boxmanager-feedstock/pull/11
- https://github.com/conda-forge/napari-boxmanager-feedstock/pull/12
- https://github.com/conda-forge/blik-feedstock/pull/4
- https://github.com/conda-forge/cryotypes-feedstock/pull/1
- https://github.com/conda-forge/cryohub-feedstock/pull/5
- https://github.com/conda-forge/netpbmfile-feedstock/pull/6
- https://github.com/conda-forge/arcos4py-feedstock/pull/5
- https://github.com/conda-forge/epitools-feedstock/pull/2
- https://github.com/conda-forge/ndtiff-feedstock/pull/21
- https://github.com/conda-forge/napari-segment-feedstock/pull/5
- https://github.com/conda-forge/napari-graph-feedstock/pull/1
- https://github.com/conda-forge/lfdfiles-feedstock/pull/9
## August 23, 2023
- Gonzalo: napari plugin conda forge recipes
- Opened:
- [large-image-viewer](https://github.com/conda-forge/staged-recipes/pull/23744)
- [napari-boardgame-maker](https://github.com/conda-forge/staged-recipes/pull/23743)
- [napari-flim-phasor-plotter](https://github.com/conda-forge/staged-recipes/pull/23746)
- [napari-h5](https://github.com/conda-forge/staged-recipes/pull/23747)
- [spots-in-yeasts](https://github.com/conda-forge/staged-recipes/pull/23848)
- [napari-clipboard](https://github.com/conda-forge/staged-recipes/pull/23860)
- [napari-bfio](https://github.com/conda-forge/staged-recipes/pull/23859)
- [napari-shape-odyssey](https://github.com/conda-forge/staged-recipes/pull/23858)
- Updated:
- https://github.com/conda-forge/argh-feedstock/pull/16
- https://github.com/conda-forge/brighteyes-ism-feedstock/pull/6
- https://github.com/conda-forge/yt-napari-feedstock/pull/3
## August 9, 2023
- Jaime: menuinst CEP passed, finally allowing us to finalize the [upstreaming work](https://github.com/napari/packaging/issues/15#issuecomment-1428392548):
- This involves a couple PRs here and there, mentioning here for visibility and awareness:
- https://github.com/conda/conda/pull/11882 - enable menuinst code paths (previously only available on Windows). Backwards compatibility means the changes are minimal.
- https://github.com/conda/conda-build/pull/4405 - validate `$PREFIX/Menu/*.json` files before packaging them, thanks to the schemas provided in menuinst v2
- https://github.com/conda/constructor/pull/474 - use the new shortcuts in constructor-made installers
- And a pending PR for conda-standalone that doesn’t exist yet
- More work on conda-standalone: https://github.com/conda/conda-standalone/pulls?q=is%3Apr+merged%3A2023-08+is%3Aclosed
- Gonzalo: napari plugin conda forge recipes
- Opened:
- [napari-emd](https://github.com/conda-forge/staged-recipes/pull/23556)
- [onedrivedownloader](https://github.com/conda-forge/staged-recipes/pull/23568) (dependency)
- Updated:
- [acquifer-napari](https://github.com/conda-forge/staged-recipes/pull/23322)
- [epitools](https://github.com/conda-forge/epitools-feedstock/pull/1)
- [napari-correct-drift](https://github.com/conda-forge/napari-correct-drift-feedstock/pull/1)
- [napari-file-watcher](https://github.com/conda-forge/staged-recipes/pull/21789)
- [napari-indices](https://github.com/conda-forge/staged-recipes/pull/22963)
- [napari-live-recording](https://github.com/conda-forge/napari-live-recording-feedstock/pull/4)
- [napari-organoid-counter](https://github.com/conda-forge/staged-recipes/pull/19238)
- [napari-sam](https://github.com/conda-forge/napari-sam-feedstock/pull/6)
- [cellfinder-core](https://github.com/conda-forge/cellfinder-core-feedstock/pull/17)
- [dclab](https://github.com/conda-forge/dclab-feedstock/pull/7)
- [deep-labelprop](https://github.com/conda-forge/staged-recipes/pull/23193)
- [lfdfiles](https://github.com/conda-forge/lfdfiles-feedstock/pull/8) (dependency)
- [ndtiff](https://github.com/conda-forge/ndtiff-feedstock/pull/20)
- [pycromanager](https://github.com/conda-forge/pycromanager-feedstock/pull/29) (dependency)
- [pymmcore-plus](https://github.com/conda-forge/pymmcore-plus-feedstock/pull/22)
- [qt-command-palette](https://github.com/conda-forge/staged-recipes/pull/23538) (dependency)
- [spatial-image](https://github.com/conda-forge/staged-recipes/pull/23472) (dependency)
- [tiledb-bioimg](https://github.com/conda-forge/staged-recipes/pull/22968)
- [useq-schema](https://github.com/conda-forge/useq-schema-feedstock/pull/11)
## August 2, 2023
- Gonzalo: napari plugin conda forge recipes
- Opened:
- [napari-caphid](https://github.com/conda-forge/staged-recipes/pull/23526)
- [foco-improc](https://github.com/conda-forge/staged-recipes/pull/23528) (dependency)
- [npex](https://github.com/conda-forge/staged-recipes/pull/23527) (dependency)
- [qt-command-palette](https://github.com/conda-forge/staged-recipes/pull/23538) (dependency)
- Updated:
- https://github.com/conda-forge/napari-seedseg-feedstock/pull/1
- https://github.com/conda-forge/napari-geoscience-viewer-feedstock/pull/1
- [napari-allencell-segmenter](https://github.com/conda-forge/napari-allencell-segmenter-feedstock/pull/11)
- [napari-bbox](https://github.com/conda-forge/napari-bbox-feedstock/pull/1)
- [napari-filaments](https://github.com/conda-forge/napari-filaments-feedstock/pull/2)
- [napari-ism](https://github.com/conda-forge/napari-ism-feedstock/pull/6)
- [napari-sc3d-viewer](https://github.com/conda-forge/napari-sc3d-viewer-feedstock/pull/3)
- [snouty-viewer](https://github.com/conda-forge/snouty-viewer-feedstock/pull/3)
- [aicssegmentation](https://github.com/conda-forge/aicssegmentation-feedstock/pull/3)
- [connected-components-3d](https://github.com/conda-forge/connected-components-3d-feedstock/pull/11)
- [macro-kit](https://github.com/conda-forge/macro-kit-feedstock/pull/11) (dependency)
- [magic-class](https://github.com/conda-forge/magic-class-feedstock/pull/23) (dependency)
- [perfmetrics](https://github.com/conda-forge/perfmetrics-feedstock/pull/3)
- [sc-3d](https://github.com/conda-forge/sc-3d-feedstock/pull/5) (dependency)
- [starlette-admin](https://github.com/conda-forge/starlette-admin-feedstock/pull/2) (dependency)
- [useq-schema](https://github.com/conda-forge/useq-schema-feedstock/pull/9) (dependency)
- [vodex](https://github.com/conda-forge/vodex-feedstock/pull/2) (dependency)
## July 26, 2023
- Discussion on constructor-based installer interacting with other conda installations - for example adding entries in `~/.conda/environments.txt`
- Relevant issue https://github.com/napari/packaging/issues/83
- Jaime has a plan! https://github.com/napari/packaging/issues/83#issuecomment-1651602351
- Jaime:
- menuinst fork work
- a couple of months of actual time to get all pieces into place
- Voting in place CEP August 3 deadline
- Summary:
- packages valid packages
- Current plugins on napari-hub:
- Current plugins available on conda-forge:
- Current plugins with PR on conda-forge:
- Missing PR on conda-forge:
- Opened:
- [msi-explorer](https://github.com/conda-forge/staged-recipes/pull/23466)
- [pyimzml](https://github.com/conda-forge/staged-recipes/pull/23467) (dependency)
- [pymmcore-widgets](https://github.com/conda-forge/staged-recipes/pull/23468) (dependency)
- [spatialdata](https://github.com/conda-forge/staged-recipes/pull/23471) (dependency)
- [spatial-image](https://github.com/conda-forge/staged-recipes/pull/23472) (dependency)
- [multiscale-spatial-image](https://github.com/conda-forge/staged-recipes/pull/23473) (dependency)
- [wheezy.template](https://github.com/conda-forge/staged-recipes/pull/234690) (dpendency)
- [xarray-dataclasses](https://github.com/conda-forge/staged-recipes/pull/23474) (dependency)
- [neurom](https://github.com/conda-forge/staged-recipes/pull/23476)
- Updated:
- [napari-aphid](https://github.com/conda-forge/napari-aphid-feedstock/pull/2)
- [brighteyes-ism](https://github.com/conda-forge/brighteyes-ism-feedstock/pull/2)
- [napari-amdtrk](https://github.com/conda-forge/napari-amdtrk-feedstock/pull/1)
- [napari-annotate](https://github.com/conda-forge/napari-annotate-feedstock/pull/1)
- [napari-bil-data-viewer](https://github.com/conda-forge/napari-bil-data-viewer-feedstock/pull/3)
- [napari-box-manager](https://github.com/conda-forge/napari-boxmanager-feedstock/pull/6)
- [napari-feature-classifier](https://github.com/conda-forge/napari-feature-classifier-feedstock/pull/4)
- [napari-filaments](https://github.com/conda-forge/napari-filaments-feedstock/pull/2)
- [napari-itk-io](https://github.com/conda-forge/napari-itk-io-feedstock/pull/3)
- [napari-live-recording](https://github.com/conda-forge/napari-live-recording-feedstock/pull/4)
- [napari-matplotlib](https://github.com/conda-forge/napari-matplotlib-feedstock/pull/2)
- [napari-mrcfile-reader](https://github.com/conda-forge/napari-mrcfile-reader-feedstock/pull/2)
- [napari-hdf5-netcdf-viewer](https://github.com/conda-forge/napari-hdf5-netcdf-viewer-feedstock/pull/1)
- [napari-nifti](https://github.com/conda-forge/napari-nifti-feedstock/pull/1)
- [napari-sam](https://github.com/conda-forge/napari-sam-feedstock/pull/1)
- [napari-stl-exporter](https://github.com/conda-forge/napari-stl-exporter-feedstock/pull/7)
- [napari-time-series-plotter](https://github.com/conda-forge/napari-time-series-plotter-feedstock/pull/8)
- [vessel-express-napari](https://github.com/conda-forge/vessel-express-napari-feedstock/pull/1)
- [napari-workshop-browser](https://github.com/conda-forge/napari-workshop-browser-feedstock/pull/1)
- [napari-stable-diffusion](https://github.com/conda-forge/napari-stable-diffusion-feedstock/pull/1)
- [napari-tomotwin](https://github.com/conda-forge/napari-tomotwin-feedstock/pull/4)
- [imaxt-multiscale-plugin](https://github.com/conda-forge/imaxt-multiscale-plugin-feedstock/pull/1)
- [ndtiff](https://github.com/conda-forge/ndtiff-feedstock/pull/16/) (dependency)
- [oneat](https://github.com/conda-forge/oneat-feedstock/pull/3) (dependency)
- [hesperos](https://github.com/conda-forge/hesperos-feedstock/pull/16) (dependency)
- [hidapi](https://github.com/conda-forge/hidapi-feedstock/pull/8) (dependency)
- [pycromanager](https://github.com/conda-forge/pycromanager-feedstock/pull/27)
- [cztile](https://github.com/conda-forge/cztile-feedstock/pull/1) (dependency)
- [lfdfiles](https://github.com/conda-forge/lfdfiles-feedstock/pull/7) (dependency)
- [psf](https://github.com/conda-forge/psf-feedstock/pull/3) (dependency)
- [netpbmfile](https://github.com/conda-forge/netpbmfile-feedstock/pull/5) (dependency)
## July 19, 2023
- Gonzalo: napari plugin conda forge recipes
- Summary:
- packages valid packages
- Current plugins on napari-hub: 334
- Current plugins available on conda-forge: 258
- Current plugins with PR on conda-forge: 71
- Missing PR on conda-forge: 5
- Merged:
- [napari-nlm](https://github.com/conda-forge/staged-recipes/pull/19830)
- [napari-mzarr](https://github.com/conda-forge/staged-recipes/pull/23188)
- [napari-workshop-browser](napari-workshop-browser)
- Gonzalo: napari/napari-plugin-manager: Working on [listed issues .](https://github.com/napari/napari-plugin-manager/issues/14)
- [PR: Use display name of plugins](https://github.com/napari/napari-plugin-manager/pull/15)
## July 12, 2023
- Gonzalo: napari plugin conda forge recipes
- Summary:
- 328 packages valid packages
- Current plugins on napari-hub: 333
- Current plugins available on conda-forge: 256
- Current plugins with PR on conda-forge: 72
- Missing PR on conda-forge: 0
- Opened:
- [napari-acquifer](https://github.com/conda-forge/staged-recipes/pull/23322)
- [napari-superres](https://github.com/conda-forge/staged-recipes/pull/23324)
- [napari-vedo-bridge](https://github.com/conda-forge/staged-recipes/pull/23319)
- [napari-workshop-browser](https://github.com/conda-forge/staged-recipes/pull/23320)
- [tootapari](https://github.com/conda-forge/staged-recipes/pull/23321)
- Dependency: [acquifer](https://github.com/conda-forge/staged-recipes/pull/23326)
- Updated versions:
- [in-silico-fate-mapping](https://github.com/conda-forge/staged-recipes/pull/22195)
- [napari-animation-feedstock](https://github.com/conda-forge/napari-animation-feedstock/pull/4)
- [napari-figure](https://github.com/conda-forge/staged-recipes/pull/23191)
- [napari-gemspa](https://github.com/conda-forge/staged-recipes/pull/22960)
- [napari-geoscience-viewer](https://github.com/conda-forge/staged-recipes/pull/22961?)
- [napari-graph](https://github.com/conda-forge/staged-recipes/pull/23192)
- [napari-mzarr](https://github.com/conda-forge/staged-recipes/pull/231880)
- [napari-nanopyx](https://github.com/conda-forge/staged-recipes/pull/23189)
- [napari-seedseg](https://github.com/conda-forge/staged-recipes/pull/22964)
- [epitools](https://github.com/conda-forge/staged-recipes/pull/22958)
- Dependency: [gemspa-spt](https://github.com/conda-forge/staged-recipes/pull/22970)
- Dependency: [napari-tiledb-bioimg](https://github.com/conda-forge/staged-recipes/pull/22965)
- Dependency: [infer-subc](https://github.com/conda-forge/staged-recipes/pull/22971)
- Gonzalo: napari/napari-plugin-manager: Working on [listed issues .](https://github.com/napari/napari-plugin-manager/issues/14)
- [PR#13 merged](https://github.com/napari/napari-plugin-manager/pull/13)
## Jun 27, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Ashley | CZI |
| Jaime | Quansight |
| Kyle | CZI |
- Gonzalo: napari plugin conda forge recipes
- Summary:
- 321 valid packages
- Current plugins on napari-hub: 326
- Current plugins available on conda-forge: 255 (~79%)
- Current plugins with PR on conda-forge: 59
- Missing PR on conda-forge: 0
- Opened
1. [eats-worm](https://github.com/conda-forge/staged-recipes/pull/231860)
1. [multireg](https://github.com/conda-forge/staged-recipes/pull/23190)
1. [napari-figure](https://github.com/conda-forge/staged-recipes/pull/23191)
1. [napari-graph](https://github.com/conda-forge/staged-recipes/pull/23192)
1. [napari-labelprop](https://github.com/conda-forge/staged-recipes/pull/23187)
1. [napari-mzarr](https://github.com/conda-forge/staged-recipes/pull/23188)
1. [napari-nanopyx](https://github.com/conda-forge/staged-recipes/pull/23189)
1. Dependency: [deep-labelprop](https://github.com/conda-forge/staged-recipes/pull/23193)
- Updated versions
- [PR napari-boxmanager-feedstock 0.3.14 merged](https://github.com/conda-forge/napari-boxmanager-feedstock/pull/4)
- [PR napari-boxmanager-feedstock 0.3.16 merged](https://github.com/conda-forge/napari-boxmanager-feedstock/pull/4)
- Gonzalo: napari/napari-plugin-manager: Working on [issues listed](https://github.com/napari/napari-plugin-manager/issues/14)
- [PR: Disable conda dropbdown if non conda installed](https://github.com/napari/napari-plugin-manager/pull/13)
- [PR: Use display name of plugins](https://github.com/napari/napari-plugin-manager/pull/15)
- Gonzalo: napari/packaging
- Working windows fixes and compatibility for the constructor-manager stack
- Refactoring to conda/mamba simplify installer
- Adding support for rollback in case of resetting installations being stopped in the middle
## Jun 14, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Ashley | CZI |
| Jaime | Quansight |
| Kyle | CZI |
- Jaime: Working solution for menuinst shortcuts w/ protocols + filetypes
- Jaime: menuinst, still need to address MacOS <10.15 compatibility (probably not that relevant)
-- https://github.com/conda/menuinst/pull/119
-- https://developer.apple.com/documentation/appkit/nsworkspace/1534810-launchapplication
- done separating with napari plugin manager
-- merged into napari main
-- left npe2api module that isn't used anywhere; might do a followup PR
- also helping out on Kira's keybinding PR (https://github.com/napari/napari/pull/5604)
- Ashley: release conda-based bundled app with 0.4.18?
-- [jaime] all are built for 0.4.17 except apple silicone
-- need to update the recipe for napari for things like changes in plugin manager
-- [jaime] big question about including application manager with bundled app (e.g. for 0.4.18)
-- [jaime] what about associating with filetypes?
-- [ashley] question about buyin about sockets for the napari<->OS bridge
-- [jaime] add as a compatible application?
- Jaime: QC
## May 31, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Ashley | CZI |
| Jaime | Quansight |
| Gonzalo | Quansight |
| Grzegorz | core dev |
- Jaime: [PR on menuinst](https://github.com/conda/menuinst/pull/119/files) finally passing. Don't ask why. It's passing, and that's the important part. 🥳
- Renaming package, changing build string: https://github.com/conda-forge/napari-feedstock/issues/47
- Prevent downstream packages from implicitly installing pyqt
- Current workaround: use glob to filter build string if you want pyside (not great)
- Grzegorz: there is also an issue with Python 3.11 compatibility to consider during change
- Should backport or make this change with napari 0.5.0 (or 0.4.18) release?
- Precedent: separate pyqt/pyside variants were added with 0.4.13
- Implicitly adds a lower bound to dependent packages
- Grzegorz: possible to add constraints (i.e. treat `napari` dep as `napari-pyside` when installing plugin).
- Jaime: previously not accepted as https://github.com/conda-forge/conda-forge.github.io/issues/1770
- Maybe can be part of plugin manager/installer
- Proposal
- plan to make backward-compatible `napari-base` (as is convention in conda ecosystem)
- 250-300 plugin recipes may need to be updated (partially automated w/ migration, may take weeks)
- *alternatively* - add a rule to recipe linter and monitor (less work, will take longer)
- Instead, starting from next release perhaps just use `napari` as base package
- Not ideal, but *much* less work
- Update instructions to tell users to `conda install napari pyqt`
- Add post-install message? Pre-activation message?
- Grzegorz will discuss with core devs
- Jaime (or Gonzalo 😝) will update the issue above with a comment
- Gonzalo: updating constructor/constructor-manager PRs now and addressing feedback
- Next week (June 5 - 9) is Quansight retreat in Italy
## May 17, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Kyle | CZI |
| Jaime | Quansight |
| Grzegorz | core dev |
<a id="org0881314"></a>
<a id="org9a42ca2"></a>
## Jaime
briefcase bundles are using CI resources
plugin manager was spread everywhere
UX expectations for bundled apps? restart button specifically:
- restart button that gets added on bundles for relaunching the process (maybe was added for briefcase only?)
- might be a bad idea with constructor
- [grzegorz] check who added it to see if it was
- concerns about what happens if a plugin does something like update numpy, but constructor/constructor manager needs to handle that
- [grzegorz] restart can relaunch with the same command line parameters or restoring state (list of open files/widgets/etc.)
- restart button, if it is readded then it will be implemented differently
- suggests removing it
Remove mentions of briefcase in the documentation
Constructor app documentation
- related to the CZI/napari 2 year
- perma-draft
- will remove briefcase mentions
<a id="org3b19bd0"></a>
## Notes
<a id="orgdce9593"></a>
### CI
[Grzegorz] It would be good to have CI use fewer resources, like test first and only if tests pass, then bundle.
[Jaime] Refactor common parts of workflow into a single one. Aggregation step to check for important stuff, then only run optional stuff later.
[Grzegorz] Yes, and only do it on a single linux VM with simple tests first.
[Grzegorz] Also, have workflows shared across the GH organization
[Jaime] Conda has "actions" repo that has shared workflows. Try basic dependency trees in a prototype organization, then port to napari. Can be used to setup things like common tests across an org.
[Jaime links: <https://github.com/conda/actions/tree/main> and <https://github.com/conda/conda/blob/main/.github/workflows/tests.yml>]
[Jaime] Maybe split the tests to have some more basic tests to use before PR/comprehensive. Could reunify PR + comprehensive workflows
[Grzegorz] Reduces readability/ability to modify by reunifying workflows.
[Jaime] If it can help readibility/maintainability.
[Grzegorz] I'll open a GH issue
## May 3, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Gonzalo | Quansight |
| Ashley | CZI |
| Kyle | CZI |
| Jaime | Quansight |
| Grzegorz | core dev |
- Gonzalo presented an overview of the bundled app effort ([slides](https://docs.google.com/presentation/d/1GBr_crWNrg30Kn0a4hYrYFfsAqp5vYF13W7EcN0yHEo/edit#slide=id.p))
- Jaime: https://github.com/napari/packaging/pull/29
- Grzegorz: use pamba to eliminate the infinite work from conda package conversions
## March 22, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Gonzalo | Quansight |
| Laura | TestCo |
| Ashley | CZI |
| Ziyang | CZI |
| Jaime | Quansight |
### Summary
- Menuinst (url protocol)
- a lot of difficulties so it is taking a lot longer, 90% done now
- will continue to simplify setup as we continue to upstream changes
- question on windows: dialog ask if want to open with CMD instead of napari
- Jaime to check
- macOS version is working
- should we use native framework like objectiveC, etc?
- platform specific code goes to menuinst
- difficult to find line to separate between application code / menuinst
- kinda growing out of original menuinst scope depending on the platform
- maybe windows gets a separate binary launcher? not available upstream until september
- Code completion for NAP-2 after addressing internal feedback and will be ready for community review
- Another small PR going to happen on napari side to do update checking in help menu, etc
- Laura to do QA testing of the constructor once ready
- Went through some initial issues and tracking them, not a blocker
- Docs PRs
- leave open while we work on these code changes
- Start docs work for plugin developers on conda plugin, could have a review checklist on napari hub for best practices
- some docs already exists universally in conda forge and can be referenced on recipe build, etc
- 290 Packages! Thank you Gonzalo!
- Hidden plugin request from plugin dev hitting edge case of hidden repo
- excluding specific plugins
- PR merged for the plugin dialog and following up on comments
- is there conda version of pip install -e? for local installs
- no straight forward way
## Feb 22, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Gonzalo | Quansight |
| Laura | TestCo |
| Ashley | CZI |
| Pam | Quansight |
### Summary
- Documentation
- For constructor manager for developments https://github.com/napari/docs/pull/113
- Packaging
- Still working on the 3 PRS
- Constructor manager backend: https://github.com/napari/packaging/pull/34
- Constructor manager client: https://github.com/napari/packaging/pull/46
- Constructor manager UI: https://github.com/napari/packaging/pull/63
- QA
- Testing plan. napari bundle scenarios
- [link to plan](https://docs.google.com/spreadsheets/d/10bbIK_hsSmnek2jBuFPJ5H1l0Fgp5rKmV86BAoyxp9o/edit#gid=0)
- Access issues. Privacy and security. It seems to be backwards
- Plugin dialog updates
- https://github.com/napari/napari/pull/5198
- Open a separate PR to remove hub API code
- Menuinst (url protocol)
- Adding url protocols: https://github.com/conda/menuinst/pull/117
- Issue with URL passing on macOS: https://github.com/conda/menuinst/issues/118
- Swift AppKit launcher: https://gist.github.com/aganders3/5a3f4293970b082165796ef59f4d1f25
- Demo video of action from URL on macOS - note have to manually start the "listener" plugin for actions to work (sorry for poor quality GIF)

- Conversation about socket-IPC in napari: https://github.com/napari/napari/issues/5563
- TODO
- Gonzalo
- will open an issue with napari to discuss locking such that napari (bundled app) only opens a signle instance. https://github.com/napari/napari/issues/5583
- Pam
- Remove the changed hub code from the plugin updates PR
- Create a new PR to remove any hub code from napari
---
## Feb 8, 2023
| Name | Affiliation|
| ---------------------- | -----------|
| Pam | Quansight |
| Laura | TestCo |
| Ziyang | CZI |
| Jaime | Quansight |
### Summary
- Documentation
- Documentation ready for menuinst https://github.com/conda/menuinst/pull/112
- pending PR for documentation Jaime to continue working on https://github.com/napari/docs/pull/75
- one doc PR remain draft for now https://github.com/napari/docs/pull/74
- road map for menuinst in https://hackmd.io/4gnbno24RVS_r6hHDj54-A
- Plugin dialog had one issue with Test (Grzegorz is helping)
- Testing plan for the bundle
- Had some questions for Jaime (tracked in https://hackmd.io/scrjBW1PQr-v4aea0g-vJg)
- Testing plan to be demo
### Summary
## December 14, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Isabela | Quansight Labs |
| Pam | Quansight |
| Laura | |
| Jun | CZI |
| Ashley | CZI |
| Jaime | Quansight |
### Summary
- Jaime needs apple ID related support notarization - he will reach out to Ziyang
- https://github.com/napari/packaging/pull/51#issuecomment-1351881373
- 3 remaining PRs: installation mgr backend, install mgr CLI, backend connection to the GUI
- plugin front-end PR ready for merge, Pam to reach out to Ziyang to ask about merging
- What is needed from documentation standpoint:
- User: how to install, update, and rollback https://github.com/napari/docs/issues/67
- Assign to Jaime
- plugin dev: creating plugins that are compatible with the bundled app https://github.com/napari/docs/pull/52 (merged)
- core dev: how to put napari package on Conda forge and other release process stuff https://github.com/napari/docs/pull/48
- Discussed strategy to continue with code implementation and documentation as planned BUT to hold on release until we get clarity on how instapot strategy will impact the release strategy.
- important to note: the work we're doing is not throwaway and will be used!
## November 30, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Ziyang | CZI |
| Isabela | Quansight Labs |
| Peter | |
| Pam | Quansight |
| Laura | |
| Ashley | CZI |
| Jun | CZI |
| Gonzalo | Quansight |
### Summary
- [napari/packaging #34](https://github.com/napari/packaging/pull/34) is the big PR needed to move forward.
- Need to check that [napari/packaging #42](https://github.com/napari/packaging/pull/42) is final.
- Still targeting the end of the week for this work, but need to check in with full group and give another update
- Gonzalo leads us through the temporary UI for the installation manager.
- No testing questions yet
- Checking the opening flow,
- What is remaining to close out the first release?
- Documentation (3 audiences)
- for user: explaining what bundled app is, and how to use it (install, update, uninstall, etc)
- for plugin developer
- for maintainers
- documentation timing: to be discussed next meeting
- PRs on napari/packaging
- one PR on napari/napari
## November 16, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Ziyang | CZI |
| Gonzalo | Quansight |
| Pam | Quansight |
### Summary
* Aciton: Pam is targeting to submit a PR today to get the arrow button (when plugin card is collapsed) to show it as sideways instead of the "up" orientation
* Action: Gonazalo is working with Ashley to switch the endpoint used to decrease the amount of time to load
* Documentation is shifted to start in Dec, Ziyang already reached out to Nadyln
## November 2, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Ashley | CZI |
| Jun | CZI |
| Ziyang | CZI |
| Nathan | CZI |
| Gonzalo | Quansight |
| Isabela | Quansight |
| Jaime | Quansight |
### Summary
* Revert section
* jaime clarified reverting might not be possible, rather it's a rollback. an example below:
* Decicion: keep the revert section BUT change the text to avoid the "overwrite" wording
* Decision: instead of dropdown, prefill with the last version with date that user had installed it (note: we'll only have 2 versions that the user can work with - toggle in between)
* Other packages
* Decision: remove and keep it in the info section
* Decision:
* install napari version: drop
* drop version list from preference panel
* merge main page and snapshot page
* keep open button, use os behavior, drop quit button
* repalce default/running icon with update status
* replace open in plugin manager button with instuction
### Section by section review
#### napari Installations (top level of sidebar)
- Update info: good as-is.
- New install: remove.
- Default version: remove.
Because there are no baseline preferences we want to keep, and updates will only be available some of the time, this screen is being cut. Update info will appear on the top of the napari version info page.
#### napari Version/Install Info (nested levels of sidebar)
**Install info**
- Version: good as-is
- Default and status (ie. Running): remove.
- Open/Quit: Keep open, remove quit. Open behavior will depend on OS expectations for what opening that application will mean (for example, does it switch to the already open window or open another instance of that application?)
In place of the default/status section, the proposal was to add the last modified date of the install and update status (ie. is this the most recent version of napari or not). This will fit better with the changes to the revert/roll back feature described below because the last modified date will now be more important.
**Plugins**
- Button to open in plugin manager: remove (nice to have and may be added back, but may require too much effort for this timeline).
- Plugin list: Change source from `conda` to `conda/conda-forge`, adjust alignment since the list is not monospaced, add Build section to the list. The Other Packages section will also be moved into this, more details in that section.
**Other Packages**
Remove this section. Add the ability to show/hide non-plugin packages to what is currently the Plugins section.
The motivation was that Other Packages takes up a good bit of space with limited benefit. It is a long list that can already be found in napari Info for bug reports and support. Much of it won’t be meaningful to people in cases other than bug reports.
**Revert**
- Description: needs to be updated to suit the snapshot behavior (discussed below).
- Version/select: remove.
- Button text/feature name: needs to be updated to suit the snapshot behavior (discussed below).
In the meeting, we spent a good amount of time discussing how reverting would work from both an implementation and UX perspective. Because the goal is to limit environment management and provide more of a single install with options to control that installation, the plan is to move forward with a feature that keeps a snapshot of the users most recent major version change. This snapshot will be what they revert/roll back to. They do not have multiple snapshots to choose from.
With this, we’ll need to update the description text and replace the version select with a prefilled description of the snapshot they’ll be rolling back to (with date and version listed).
**Installation Actions**
- Reset: good as-is.
- Uninstall: keep, but add a description to make it clear what the scope of uninstalling is.
## October 19, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Ziyang | CZI |
| Nathan | CZI |
| Pam | Quansight |
| Gonzalo | Quansight |
| Isabela | Quansight Labs|
| Ashley | CZI|
### Summary
* Isabela - Installation UX mockups
* Main Install dialog
* Decision: go with preferences style instead of card UI style
* Preferences
* is the installation the same as version update dialog? NO
* can they be combined? --> didn't get to this part
* "Add installation" section not needed
* Do we have a rollback option?
* option 1: once user updates, old version is deleted
* pro: closer to standard software update process
* con: if plugins aren't available, users don't have the option to rollback directly in the viewer (however they can manually go to the website and install the older version)
* note: if user manually downloads from the website, they'll have to manually download their plugins
* option 2: once user updates, both new and old version is kept
* pro: if plugins aren't compatible, users can directly rollback in viewer along with their plugins
* con: higher implementation effort
* Decision: go with rollback but TBD on what UI looks like and exact behavior
* Action: Isabela to mockup rollback UI/UX for next packaging meeting on 11/2
## October 19, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Ziyang | CZI |
| Nathan | CZI |
| Pam | Quansight |
| Gonzalo | Quansight |
| Isabela | Quansight Labs|
### Summary
* Isabela - Installation UX mockups
* Questions
* should we split the plugin and installation manager GH issue? since plugin applies to both pip install and bundle...vs installation is specific to bundled app --> TBD
* use case: I have many diff versions of napari and i want to delete some. will the user be able to delete them? --> YES
* use case: i have 0.4.14 and there's a new version. upon updating to the new version (0.4.16), will the user have the option to keep the old version? answer --> YES
* Is "restore" in scope --> LOWER PRIORITY
* Do we need a "run command" button at the bottom? --> NO
* Will users have the same plugins upon updating --> YES, although some will not be downloaded if there's a conflict
* Comments
* one environment with each version, env name no longer needed
* "update the v##"" will be a global button that goes at the top and not within each card
* when opening napari, it will open the default version. default is the latest version BUT user can override in the installation manager
* we like showing the plugins and the other packages in the cards (as a dropdown)
* user can launch other existing versions from installation manager --> replace the work "activate" with either "launch" or "open "
* Decision: we meet again in one week 10/26 for round 2 of designs. Although front end work can start in the meantime
* Ziyang will add another meeting for next week
## October 5, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Jaime | Quansight |
| Ziyang | CZI
| Pam | Quansight |
### Summary
* round robin update
* Jaime: fixing CF failed installation; strong case for napari hub quality check so that we don't have to fix plugin and dependency problems (mainly bc developers aren't reading the documentation)
* Action: Ziyang is going to bring it up to the hub team for a quality check
* Action: Jaime to compile a list of complications in the ecosystem (https://github.com/napari/packaging/pull/29)
* Pam: continued work on plugin installation frontend
* Action: create PR this week
* Decision: we're good with the current UI/UX, Jun to pass on the message Isabela
* Gonzalo: launched the update process, will try to install each plugin to see if it's compatible....@Ziyang to help here
* Action: Jaime/Gonzalo to bring decision to community/GH re strategies tied to update in place
* Action: Jun to connect with Isabela on installation manager UX
* timeline calibration
* Updated timeline to reflect the latest progress
## September 21, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Jaime | Quansight |
| Ziyang | CZI
| Pam | Quansight |
### Summary
* Need to fix our workflow, break someone else's build when they use it
* also fixing the release workflow
* installation manager prototype status
* Jaime to follow up with Gonzalo and decide on scope for the prototype
* Continue working on the plugin manager UI
* Iterate on UX design for installation manager
* UX design: base on the post in the issue
## September 7, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Jaime | Quansight |
| Ziyang | CZI
| Isabela | Quansight |
| Pam | Quansight |
| Gonzalo | Quansight |
### Summary
- napari installation manager backend prototype is almost done. Next week there should be a complete prototype.
- Plugin manager backend depends on that.
- napari plugin manager UI - what is still needed and what are thoughts on the [most recent request for a split drop down](https://github.com/napari/napari/issues/4952#issuecomment-1234029188)?
- Mockup in progress; this proposal can work, but there are some questions if this is a) possible in Qt, b) if this makes sense with the plugin card UX on a higher-level c) which element of installation makes the most sense to have collapsed (tenative answer is the PyPI vs conda)
- Reviewing project board. Checking in on timeline.
- Gonzalo updates. Split between installation manager backend and "frontend tooling that isn't the UI"
- Pam updates. Getting up to speed with frontend work to prepare for plugin manager UI changes.
- Seeing an increase in issues based on mix ups with PySide2 or PyQt5 dependencies among plugin developers. How can we help support this ([there is documentation on best practices](https://napari.org/stable/plugins/best_practices.html))?
- Jaime update. Switching constructors needed to happen and is now a part of another project, so this will be happening without impacting the bundled app timeline.
## August 24, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Jaime | Quansight |
| Ziyang | CZI
| Isabela | Quansight |
| Pam | Quansight |
| Gonzalo | Quansight |
### Summary
- Meeting times
- Update calendar event to be every other week
- Move meeting time 1 hour later
- [name=Isabela] presenting the plugin manager design mock up
- Related to [napari/napari #4952](https://github.com/napari/napari/issues/4952)
- Discussion on what's the minimum requirements we need and what we need to cut to avoid scope creep
- Gonzalo
- Update for he and Jaime. Working on backend of installation manager.
- Installation manager and plugin manager overlap and may benefit from overlaping.
- Jaime:
- Caught up with all the "ready-for-review" recipes Gonzalo had put on staged-recipes
- Started a CI pipeline for "installability" analysis for our plugins. PR in progress here. The end goal is to have metadata that allows us to predict with reasonable whether a plugin is compatible with our current napari or not before the Install button is pressed. What we do with that metadata (prevent, warn, advice) is still pending discussion.
- Brainstormed with Gonzalo about the role of the plugin manager vs the installation manager. There's significant functionality overlap between both when it comes to installing/updating/removing plugins in a given napari installation (which, let's remember, is nothing more than a managed conda environment). If we consider the plugin manager one more plugin itself, we can choose not to include it in the bundle, and instead forward that functionality over to the installation manager, the UI of which might come preactivated for that specific installation if called from a running napari instance. We still need to study this structure a bit more, but it looks like a good way to reuse components both in terms of backend functionality and frontend design.
## August 10, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Jaime | Quansight |
| Ziyang | CZI
| Isabela | Quansight |
| Pam | Quansight |
### Summary
- [Jun] Project board
- action: pull in issues into the project board "feature groups"
- [Jaime] How to handle cross-repo integrations and artifact distribution.
- Ziyang suggests keeping the logic in `napari/packaging`, but calling the workflow from `napari/napari` -- via action or "workflow_dispatch"?
- [Isabela] Notes for this working group are now up to date on [napari/meeting-notes](https://github.com/napari/meeting-notes). I'll make a calendar event for me to remember to update them in batches.
- [Isabela] I have the beginning of a [user flow for installation and updates' current state](https://www.figma.com/file/WE4r7RNauLv9Pb7oKEs3pI/Install-%2B-Update-Flow?node-id=52%3A702). This needs some more feedback, so I'll reach out to get answers.
- Isabela to schedule follow up for the more detailed questions. Jaime and Jun.
- Proposed to put user flows on hold to work on plugin installation UX since dev work is dependent on this. We will return to the user flow afterwards
- [Ziyang] sanity check on timeline and update
---
## July 27, 2022
| Name | Affiliation|
| ---------------------- | -----------|
| Jun | CZI |
| Gonzalo | Quansight |
| Jaime | Quansight |
| Isabela | Quansight |
| Ziyang | CZI
### Summary
- Getting our bearings and next steps with NAP signed, H2 goals, and new repo. Let's return to the [project board](https://github.com/orgs/napari/projects/10).
- Needs to be based on h2 milestones
- action: jun will create new project board and will bring it to the next wg meeting for us to refinetogether. milestone groupings iwll be based off of feature roadmap
- Isabela: checking in on the UX work on the timeline and making sure I didn't drop the ball on something.
- Jaime: this discussion can start with about half the backend work done.
- Jun: we should check the user flow and meet up about it to make sure we can map our the user experience
- Ziyang: follow up on meeting feedback. How is this meeting fitting or supporting our needs?
- Jaime: most of project milestone updates could probably done async.
- Gonzalo: both async and in person versions work.
- Isabela: presenting work would be useful to do in person
- We need to check [working group docs agreements](https://napari.org/stable/community/working_groups.html) to make sure we are keeping community promises.
- Decision: Team to meet every other wednesday. Updates in zulip for the alternating wednesdays when we don't meet
- action: Jaime volunteered to start a weekly zulip thread in our working group for updates, discussions, and community shareout
- action:Ziyang is looking into updating the working group community invite to be every other week
#### Plugin migration state
- Current plugins on napari-hub: 208
- Current plugins available on conda-forge: 161
- Current plugins with PR on conda-forge: 45
- Missing PR on conda-forge: 2
- Created for dependencies: 68
---
## July 6, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Jun | | CZI |
| Gonzalo | | Quansight |
| Jaime | | Quansight |
| Isabela | | Quansight |
### Summary
- There's movement on the NAP! Hooray!
- Reviewing 2022 July–December timeline for work. Question: What does the "Collect feedback on user installation experience" section include concretely?
- Jaime: This was more about making sure we address the feedback we've gotten via issues and actively watching for this feedback (even if it's not labeled `bundle`). It's an ongoing reminder instead of a single, additive task.
- Where does the NAP fit in this timeline? What is and isn't blocked by it?
- How do we measure some of these tasks?
- Can we confirm that all that is written is accurate and clear if someone reads it with no other context?
- Disucssion on OKRs and high level milestones
- aligned on having 5 milestones, NAP approval + 4 features per roadmap
- group thought it would be good to have 3 KRs around installation, update in place, plugin installation
## June 29, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Jun | | CZI
| Gonzalo | | Quansight
| Isabela | | Quansight Labs
### Summary
- Reviewing 2022 July–December timeline for work and editing based on current NAP status and new info
- Reviewing working group effectiveness proposal (for measuring the effort)
## June 22, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Ziyang | | CZI
| Jun | | CZI
| Gonzalo | GPC | Quansight
### Summary
- Current plugin migration: PRs made for all missing plugins up to date. (Gonzalo)
- Plugins on napari-hub: 187
- Available on conda-forge: 133
- With PR in progress on conda-forge: 47
- Missing PR on conda-forge: 7
- Extra dependencies built for plugins on conda-forge: 60
- NAP status (Jaime)
- Add comments from Juan to the final document.
- Discussion of napari 6-month roadmap
- Added the timelines for the roadmap
- Discussed initial deliverables
- Kick-off meeting to be defined (middle July, Ziyang)
---
## June 15, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Ziyang | | CZI
| Jun. | | CZI
| Jaime | JRG | Quansight
| Gonzalo | GPC | Quansight
### Summary
- Current plugin migration: PRs made for all missing plugins up to date.
- Working on recipes and waiting on author approvals to become maintainers
- NAP status
- Awaiting approval, some comments from core members
- Status of NAP to be updated.
- Discussion of napari 6-month roadmap
- Next generation intsallers
- In app updates
- Plugin installation
- Document instructions
---
## June 8, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Ziyang | | CZI
| Jun. | | CZI
| Jaime | JRG | Quansight
| Gonzalo | GPC | Quansight
### Summary
- Current plugin migration: missing 59/182
- Working to migrate new plugins uploaded to the hub
- NAP status
- Awaiting approval, hopefully soon
- Once NAP is approved and merged have a meeting to go over all issues and priorities.
---
## May 18, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Laura | |
| Nathan | |
| Jun | |
| Jaime | | Quansight
| Gonzalo | | Quansight
### Summary
- Discussion of the current NAP for the update process
- Discussion of the NAP PR with the community
- Issues (Nathan)
- Installer process and plugin process
- How sustainable is the conda forge-process
-
---
## April 20, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| | | |
### Summary
- Started with a review of the [Bundled App project board](https://github.com/orgs/napari/projects/10)
- Update in place - UX design - Isabela. Update is that she's heard more questions as this has been worked out, but hasn't gotten to reply to them yet.
- Update in place - backend -
- Grzegorz gives feedback and Jaime provides updates and background (dependency management in bundle with binning, pyqt may be fixed soon with 5.15)
- Gonzalo demos the current behavior with changes based on prior feedback (release notes in the dialog, feedback appearing in the notification center, and added dialogs for errors and success)
- Answered questions to
- 1) remove the "Notify before updating" option from preferences
- 2) Make the success dialog into a notification, keep errors as dialogs, and add copyable info as a drawer for errors
- 3) Keep the release notes as a link
- 4) When updating on quit, a failed update will keep napari open with an error dialog and a successful update will quit that version of napari
- 5) When update is in progress, add estimated time remaining (if possible) or the steps it's performing so that the user is informed of update progress
## April 13, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Laura | |
| Gonzalo | | Quansight
| Justine | GPC | Quansight
| Jun | GPC | Quansight
| Ziyang | GPC | Quansight
### Summary
Gonzalo will open a new issue to capture conda workflow failing (this is separate from the existing mamba issue)
Jun to cross-reference release notes to tag issues/PRs with the milestone (this will show up in project board view #3)
If we don’t get responses on the latest post by Gonzalo on #4120, we will proceed with the latest build
we can shift documentation to after the release to focus the remaining few weeks on build
#### Plugin updates
#### napari Updates
#### Conda workflow failing
Affected PRs
## March 23, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Laura | |
| Jaime | | Quansight
| Gonzalo Peña-C | GPC | Quansight
### Summary
-
---
## March 16, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Jun | |
| Laura | |
| Jaime | | Quansight
| Gonzalo Peña-C | GPC | Quansight
| Isabela | | Quansight
### Summary
- We went over the board updates https://github.com/orgs/napari/projects/10/views/7
---
## March 9, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Jun | |
| Jaime | |
| Laura | |
| Gonzalo | |
| Isabela | |
### Summary
- Laura's bug report!
- Waver (?) issue closes the app in Windows; causes a warning in Mac
- Add layers creates a warning in Mac
- Are there links to these?
- Jaime
- we might need to pin more strictly (we don't want to modify napari dependencies that might be already in memory)
- some issues found with plugins might be metadata related/dependencies related.
- Open issue for logging for both errors and conda commands with debug log level
- Need feedback on https://github.com/conda-forge/napari-feedstock/pull/32
- Gonzalo:
- Checks we need to add automatically in a separate repo:
- Installability
- Loadability
- Unit test
- Isabela's design check in
- Is Isabela blocking anything? No :)
- [napari/napari #4074 Use napari hub api to list plugins](https://github.com/napari/napari/pull/4074) has been merged, but we would like the design feedback unaddressed on the PR to be its own issue so we return to it. (Action: Isabela to create issue)
- [napari/napari #4120 UX/UI workflow for bundles updates](https://github.com/napari/napari/issues/4120) has been pushed out of this release cycle for time, so it can still be worked on.
- Another round of mockups coming soon? :)
- Review/update project board
---
## February 16, 2022
| Name | Initials | Affiliation |
| ---------------------- | -------- | -------------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Jun Ni | JN | CZI |
| Isabela Presedo-Floyd | | Quansight Labs |
### Summary
#### Conda constructor
- Multiple envs are working and shortcuts too
- Bug with PySide/Qt. PR is open waiting for this to be merged to test.
#### Recipes
- 103 plugins
- 51 dependencies
#### UI/UX Plugins
- Isa: Do we have access to the actual issues?
- Add a one liner plus a hover popup with a link. Open an issue for the docs with the content of these docs.
#### UI/UX update workflow
- Isa: Exploring options of where we can inform the user about this.
#### Licensing
- Have a legal page on licenses that come from a bundle.
-
---
## February 16, 2022
| Name | Initials | Affiliation |
| ------------------ | -------- | -------------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Jun Ni | JN | CZI |
| Lia Prins | | CZI |
| Isabela Presedo-Floyd | | Quansight Labs |
### Summary
#### UX workflows
##### Updates
- How and when do users update (or get notified of needing an update) from the bundled application?
-
##### Compatible plugins
- How do we notify users of which plugins they cannot install (based on napari version, dependency conflicts)
#### Define package constraints
#### Napari projects separate envs
#### Licenses
Surface information within napari
#### Packages state
97 plugins
48 dependencies
---
## February 9, 2022
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Grzegorz Bokota | GB | |
| Jun Ni | JN | CZI |
### Summary
#### Packages state
* 82 recipes have been merged. 60 plugins and 22 dependencies
---
## February 2, 2022
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Robert Haase. | RH | |
### Summary
- Need to write plugin developer guidelines and tools
- Writes something on these lines https://focalplane.biologists.com/2021/09/04/collaborative-bio-image-analysis-script-editing-with-git/
#### Workflows
- Experimental workflows
- Drag and drop
- Worry: Many napari plugins will never reach napari-hub or pypi.
- Most of the devs do not care if the package s used or not by others
- How can we motivate more devs/scientists to publish their things?
---
## January 26, 2022
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Grzegorz Bokota | GB | |
### Summary
- Need to write plugin developer guidelines and tools
#### March release
Target features:
- New conda bundle
- At least 80% of packages migrated to Conda forge
- Update in place (may be clunky)
#### TODO
- Separate base environment from napari environment in bundle
- Define constraints (extra metapackage?) for conda versions
- Install plugins in the same env as napari
- When a new update appears, attempt to install plugins (with run dry) Otherwise try to install them 1 by 1
- Add record of plugin installation in order in the settings
#### Conda forge package pandemonium!
- ~140 plugins to migrate
- 72 plugins to migrate with dependencies already in conda-forge (PRs openned already)
- 68 plugins to migrate with dependencies that need to be built in conda-forge
- ~60 extra dependencies (a few might be tricky or not needed at all)
- couple of weeks to go around 80% of packages (should be good enough for bundle release)
## January 19, 2022
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Grzegorz Bokota | GB | |
### Summary
* PR is out of WIP and ready for review
#### Conda bundles
* Discussed using conda forge and not supporting Pypi/pip for the bundle
* Should we support use cases of installing non-public plugins?
* napari hub uses meta data from Pypi. In the short term, it will be rare for a plugin to be on conda forge and not pypi so we should be fine, but we can have a backup, maybe adding meta data to conda forge.
----
## January 13, 2022
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Isabela Presedo-F. | IPF | Quansight |
| Jaime Rodriguez-G. | JRG | Quansight |
### Summary
#### UX review with Isabela (01/13/22)
* Positive. Given the technical constrains of the Installer libraries on MacOS, notifications are a good compromise to report progress to the user in a non-invasive way.
* Investigate if adding a :package: emoji helps with visual identification of the notification.
* Looks good!
* Investigate possibilities for persistent notifications. Can notifications for processes that we know will take longer than five seconds last longer than the default?
* Timeout not configurable from the script; it's a user setting we don't have access to.
* Punctuation: single sentences ending in period. Google's [Notices](https://developers.google.com/style/notices) section does use periods for single sentence things
## January 12, 2022
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Grzegorz Bokota | GB | |
### Summary
#### Documentation
* We should probably have an installation tutorial. Justine will reach out to the Doc Working Group to see if they'll be able to create it.
* Follow up: Justine surfaced this in the community meeting. There is an existing tutorial that Draga made that could be updated. The Docs WG can take this on.
#### Conda bundles
* Added support for RTF text: we can have links to licenses in the website
* Audited the licenses in the bundle: we have several GPL projects
* Changed default installation paths:
* macOS: ~/Library/napari-x.y.z
* Shortcuts under ~/Applications
* Windows: ~/AppData/Local/napari-x.y.z
* Shortcuts in desktop and start menu
* Linux: ~/.local/napari-x.y.z
* Shortcuts in canonical location for X11 standards, compatible with GNOME and KDE
* Will mark the PR to non WIP soon
* Still need Windows cert
* Unblocked with Apple authorization step for now - getting an unexpected error
----
## January 5, 2022
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
### Summary
* Happy new year!
#### Conda bundles
* Notification dialogs with scripts to let the user know progress of installation steps
* Signed certificate - can run the installer with right click and open
* Two certificates have been added
* Third step to certify the contents of the package with Apple (needs to still be done and can be tricky - Justine to talk with Ziyang about this)
* Windows certificate
* Allows any certificate on the list
* Can be anywhere from $99-$5k
* Need to purchase - Justine to talk with Ziyang
* Small fixes on Linux are complete
* PR now has a long readme for documentation - Ziyang to review
* Pyside builds now implemented - can release in next build
* License information in installer
* Need to have final text
* Windows can only have plain text
* Probably need to do an audit of the licenses that we're bundling
----
## December 22, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
### Summary
#### Conda bundles
## December 15, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
### Summary
#### Conda bundles
* Jaime worked on fixes to mac installation guide. Will update screenshots when ready for further feedback.
* Jaime to test on Linux
* Laura to test on Windows
----
## December 8, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Jaime Rodriguez-G. | JRG | Quansight |
### Summary
#### Conda bundles
* Uninstaller for Windows should be able to clean up the shortcuts just fine (testing pending).
* Uninstallers for Mac and Linux, simple script to remove files and tell the user to delete the shortcut icon.
* PKG installer is now branded with custom text, needs some formatting still. Provides a log in case there's an error for reporting purposes.
#### Schedule
* Bundle functionally is almost there. Probably this week we can start testing.
* Should be ready by the end of the month. Need to check with Gonzalo on timing for the update-in-place feature. We can tentatively plan for adding the installation grid to napari.org in January.
* Still need to look into the Apple dev signing issue that shows an alert to the user. Jaime to look into this after uninstall.
----
## December 1, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Gonzalo Peña-C. | GPC | Quansight |
| Jaime Rodriguez-G. | JRG | Quansight |
### Summary
#### Conda bundles
New installers available. See -> https://github.com/napari/napari/actions/runs/1526575006
Now featuring conda activation in all platforms.
#### Menuinst
* Windows
Activation mechanism for windows did not previously account for activation scripts, so the process of activation had to be updated.
* Linux
Things work as expected so far, but more feedback is needed.
* OSX
Activation was not working because JRG uses micromamba and it has a slightly different activation syntax. New menuinst logic fixes this.
#### Napari Updates
* Update mechanism
PR in progress. https://github.com/napari/napari/pull/3731
This adds a new Qmessage box with checkboxes, adds a new setting for checking updates on startup, and on the first napari run it will ask if this wants to be opt-in.
The process will check for new verison on conda-forge (for now) and if it is a new version it will prompt the user for downloading it in the background.
Another entry is added to the Help menu for triggering updates.
The install process is still not in place but it will be handled in a separate PR.
----
## November 24, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Grzegorz Bokota | GB | |
### Summary
#### Conda bundles
* FINALLY rebuilt the `constructor` stack. You can see the multi-repo mess [here](https://github.com/users/jaimergp/projects/2).
* https://github.com/napari/napari/pull/3555
* https://github.com/napari/napari/actions/runs/1491755010
Questions:
* Read user settings and install plugins on first-run?
* Run napari after installation?
Feedback:
* Debug Linux: .desktop file name is wrong (`'{'\''napari'\''}_napari.desktop'`) because I forgot to remove some extra curly braces [here](https://github.com/conda/menuinst/pull/91/files#diff-061a9a2be38b364128cfa5732136bdec308aba133ea53d62414bdd672eaa5e48R160)
* Debug Linux: working directory cannot be None
* MacOS: More useful message if $HOME/napari works
***
## November 17, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Laura Marcos | LM | CZI |
| Justine Larsen | JL | CZI |
| Gonzalo Peña-C. | GPC | Quansight |
### Summary
#### Conda bundles
* Work still ongoing on the menuinst stack rebuild
* Added Gitpod configurations, as well as devcontainers and docker compose for Linux debugging
#### Windows issues on current bundle
* Helped debug pip / conda interactions on Windows with grayskull.
## November 10, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Laura Marcos | LM | CZI |
### Summary
#### Conda bundles
We are still doing great work to add multiplatform shortcuts to the `conda` packaging.
- This week we landed a milestone! [First Menuinst draft implementation finished!](https://github.com/conda/menuinst/pull/91). We can start testing and fixing rough edges.
- Working on enabling `conda` for the new menuinst [here](https://github.com/conda/conda/pull/11035).
- Creating conda packages for the new building tooling [here](https://github.com/jaimergp-forge).
- Experimental packages will be uploaded to https://anaconda.org/napari
- The constructor/conda/menuinst relationship is intricate and they cross-vendor each other. Very fun. Uploaded PDF [here](https://drive.google.com/file/d/1XNbKxPIwoburGx5NQUbEbONfRkGyiQz7/view?usp=sharing) in case it simplifies the explanation.
## November 3, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Justine Larsen | JL | CZI |
| Laura Marcos | LM | CZI |
### Summary
#### Conda bundles
- We have a schema for menuinst on which we can build the cross-platform implementation. See PR here: https://github.com/conda/menuinst/pull/91
- While that's being digested by the community, we will build the bundle using a constructor stack fork (menuinst, conda-standalone, constructor). These involve three different packages that vendor each other (fun!), so I will keep our forks in our napari channel for now, under the label bundle_tools or similar. I am tracking this in https://github.com/users/jaimergp/projects/2.
- This is only temporary until the Conda organization accepts the menuinst revamp. This will also allow conda-adjacent projects to implement the schema, so micromamba and the like can be used with constructor directly.
- I will also remind that we (will) have napari nightlies in anaconda.org/napari.
#### Apple dev license
- Ziyang working on getting the license with CZI, and we should have it pretty soon.
---
## October 27, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Justine Larsen | JL | CZI |
| Laura Marcos | LM | CZI |
### Summary
---
## October 20, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Justine Larsen | JL | CZI |
| Laura Marcos | LM | CZI |
### Summary
#### Conda bundles
- Progress on #3378: We can build nightly packages on our CI using conda-forge machinery! This will allow us to:
- A) upload nightly `conda` packages to anaconda.org/napari after configuring the cronjobs correctly.
- B) upload nightly bundles using `conda`-backed installers
- Sent a PR to `constructor` so we can customize the branding in PKG installers (right now, they have the default Anaconda branding).
- Standardized the `conda` / `menuinst` / `constructor` love triangle through a CEP (Conda Enhancement Proposal). Check proposal [here](https://github.com/conda/ceps/pull/8).
- This revamp will require a major release, which needs time, but we can use the draft implementations ourselves for now (they are build tools, so no runtime dependencies to account for).
- This is a obvious gap in the `conda` ecosystem now and Napari has triggered these efforts. We can discuss adding a little "sponsored by CZI" note or similar, if needed.
### Next steps
- Create bundles using nightlies
- Upload conda nightlies to the `napari` channel
- Investigate Linux Desktop debugging: either VM on AWS Workspaces or gitpod.io boxes
- Update: AWS Workspaces for Windows do not offer nested virtualization, so a Linux VM there is not feasible.
---
## October 13, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Laura Marcos | LM | CZI |
### Summary
#### 1. Napari menu items / shortcuts on MacOS / Linux
- Jaime had to patch `menuinst` (a `conda` dependency that governs the menu creation for `conda` packages) to provide support for Linux and MacOS targets. PRs submitted to `conda/menuinst`
- Menu metadata is being generated at https://github.com/conda-forge/napari-feedstock/pull/29
- Windows was tested through AWS Workspaces, MacOS locally. Both OSs work!
- However, testing on Linux was trickier due to Docker / GL / whatnot. Check next section to see what Jaime tried and what we can do now. Anyway, menu items seem to work on Linux too! Binder only provides XFCE, so it would be nice to try other DE like Gnome, KDE, Cinnamon or Mate.
#### 2. Deploying a Linux development environment with a functioning desktop
- Jaime tried several things:
- Running Virtualbox locally (too slow)
- Installing a VM on AWS Workspaces Windows. Felt wrong; left that as a last idea.
- Trying out [`remocolab`](https://github.com/demotomohiro/remocolab) on Google Colab; kicked out after 5 mins because it violates TOS.
- Trying out [`gitpod` following this guide](https://www.gitpod.io/blog/native-ui-with-vnc). Requires preconfiguring some Dockerfiles ([example](https://github.com/gitpod-io/definitely-gp/tree/master/vscode))
- This might be a nice addition to our repo configs.
- Developing on Binder. This worked! But you are disconnected after 5 mins of inactivity
#### 3. Napari user at Anaconda.org
- Solved! We have access now.
- This will enable us to start building nightly packages for conda
### Next steps
- More menu item debugging and have Anaconda merge and release the contributed changes.
- Build a nightly packaging pipeline for conda packages and push to anaconda.org/napari.
---
## October 6, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Justine Larsen | JL | CZI |
| Laura Marcos | LM | CZI |
| Pam Wadhwa | PW | Quansight |
### Summary
#### 1. Constructor
- Windows
- Trying assets on the other PR
- Constructor changes / Work
-
### Next steps
- Jaime to Reproduce Gonzalo's issue he found with MacOS
- Gonzalo working on the update 4.10>4.11
---
## September 29, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Justine Larsen | JL | CZI |
| Laura Marcos | LM | CZI |
| Nathan Clack | NC | CZI |
### Summary
#### 1. Briefacase and conda/mamba
*Windows* - Bundle could be created successfully but running Napari would have required different path adjustments / hacks. Instead of crafting a fragile solution there (and relying on by-chance relocatability of the build installation), we decided to use `constructor` directly on this platform (see below for more details.)
*Linux* - AppImage bundles can be created but JRG was not able to test on a machine running Linux natively. They might need same path adjustments as required before, in which case we would also consider switching to `constructor` for this platform. In this case, it provides a `*.sh` fat-script that installs everything in a way that is native to `conda`.
*Macos* - Bundles can be created and installed successfully. JRG can open them successfully on his Macbook but other users have reported problems (unspecified details yet). Will investigate. If needed, `constructor` is able to provide PKG installers, which should provide the same kind of user-friendliness as DMGs. They might also be faster (DMGs are terribly slow to unpack for some reason).
#### 2. Constructor (conda/mamba)
*Windows* - An NSIS-backed installer is built with `constructor`. It offers high customazibility too. For maximum user-friendliness, a shortcut icon on the Start menu should be provided. This is supported out of the box but the menu item needs to be added to the `conda` package that provides Napari through a wrapper package (see [issue](https://github.com/napari/napari/issues/3432)).
*Linux* - A `.sh` installer could (we haven't done it yet, but the code is there) be created (these are run with `bash installer.sh` and provides a CLI-based wizard). This is not the most user-friendly experience, but it should be good enough for Linux users anyway. Menu icons are not supported on this OS yet, but we should be able to add this to `constructor` and `menuinst`. This feature has been requested by several parties in the `conda` community too, so it would be well received if Napari were to "sponsor" this!
*Macos* - A `.pkg` installer could be created. We need to investigate how it behaves in terms of relocatibility / installation performance, but we could guess is not going to be worse than the DMG. The same `sh` installer available on Linux is possible here as well.
#### 3. Update mechanism (conda/mamba)
Working on the update mechanism for napari to be able to download packages as needed in the backgorund and prompt the user to install the new version once all packages are already downloaded, to provide a quick install process.
Also creating a separate environment for each napari version
### Next steps
- Make constructor assets for all platforms so we can add testing
- Evaluate a `napari-menu` package that handles creation of icons on different platforms
- Continue working on the update procedure for constructor based installs.
---
## September 22, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Justine Larsen | JL | CZI |
| Laura Marcos | LM | CZI |
### Summary
#### 1. Conda bundle folder (Jaime)
Instead of using an "(constructor or conda-pack based) installer inside a Briefcase installer", we can bundle a Conda environment directly within the bundle app. It seems to be working. More testing is needed on other platforms.
Current state of the POC can be found at [napari/napari#3378](https://github.com/napari/napari/pull/3378)
Artifacts to test for Mac and Linux can be found at:
https://github.com/napari/napari/actions/runs/1258330147#artifacts
#### 2. Plugins in user space (Jaime)
These would be handled differently since they would live on user space not in the bundled app as they currently are.
Need to work on how to "mock" the base environment "that lives" in the bundle app, so that conda uses this information to keep coherence of the environment, which is the greatest benefit of using conda/mamba vs using pip.
The bundle app would create a conda environment in user spaces and we would mock the metadata (conda-meta) folder of the base environment (inside the bundle app) so that all plugins installed on the plugins environment would be constrained to the base dependencies inside the bundle. We will also functionally freeze the base environment by **pinning** the base versions in the user environment.
[PrefixData details](https://github.com/conda/conda/blob/e3efd1c47bed3be0b53abffdb49b76a7dc471d7f/conda/core/prefix_data.py#L67)
#### 3. Patch builds on CI or built computer (Jaime)
##### Macos
POC Works, relocatability included, in Jaime's laptop. Need to test in other machines (preferrably without conda environments already set up) to ensure it works for real.
##### Linux
POC Works. Needs testing locally to ensure UI loads.
##### Windows
Some issues on CI, related to Qt plugins and encodings. Need to investigate further but cannot reproduce locally right now. If it doesn't work, `constructor` is able to create .exe installers out of conda-packages too.
#### 4. Conda packages (Gonzalo)
Added two plugins to conda-forge for testing purposes: `waver` and `napari-animation`.
Plugin listing can be taken care of in Napari Hub. Need to add metadata fields for conda-package and incentivize the developer to add this piece of information.
### Next steps
1. (Jaime) Continue working on the bundles. Fix Windows bundle.
2. (Gonzalo) Continue migrating napari pip plugins to conda packages.
### Pending things on the queue
#### A. Automation
- Automate checks on CI to check things load.
- Nightly releases.
#### B. QA Checks
- Open the bundle, check it runs and load examples
- Move the bundle to a different place, check it runs. Check examples
#### C. Create a napari organization in Anaconda.org
- To be able to add nightly releases to this org under a "dev" label.
**Who owns this user?** https://anaconda.org/napari
---
## September 15, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| Justine | | |
| Nathan | | |
### Summary
#### 1. New bundle strategies for Napari
The current bundling strategies for Napari rely heavily on Beeware's Briefcase. This tool is able to package a Python application along with its dependencies in a single file that can provide a relocatable installation in the target machines.
Each operating system is targeted with a native package format:
* Linux AppImage
* Windows Executable
* MacOS DMG
> Besides these installers, Napari can also be installed via `pip` and `conda` in all operating systems, but this approach is not very user-friendly for non-developers.
#### 2. The situation in MacOS sets the bar for how we deploy a bundle
MacOS is the trickiest platform to target natively. The DMG image format allows the user to simply drag and drop a directory containing all the needed files to run Napari. Normally, it's dragged on `/Applications` (or user-space equivalent). Once dragged into a location, MacOS allows the user to move it as desired.
In other words, these installations are _relocatable_.
Additionally, MacOS imposes several runtime restrictions that further complicate deployment in this platform:
* Once installed, an application should not alter its contents. Even if it technically possible, the `napari.app` folder should be considered read-only. As a result, the bundle contents should have everything needed to run.
* The main executable, `napari.app/Contents/MacOS/napari` needs to be the main binary running the application. In practice, it means that while subprocesses can be launched, the parent needs to stay alive through the whole lifecycle of the application. Briefcase allows this thanks to a binary wrapper around `python -m napari` (previous versions were bash scripts, but this doesn't cut it anymore).
If we also want to distribute through the App Store, the "each app is self-contained" philosophy is [even stricter](https://developer.apple.com/app-store/review/guidelines/):
* It needs to be [sandboxed](https://developer.apple.com/documentation/security/app_sandbox). Writing to userspace requires explicit permission systems.
* It cannot self update (needs to happen via Store).
* It cannot download or generate code not present in the bundle.
* It cannot extend its functionality through additional code not present in the bundle (ciao plugins? unclear). One interpretation of the rules is that this can happen as long as the _user_ initiates the action.
All in all, this is what we know. What can we do about it for Napari?
#### 3. Conda installations are not relocatable, BUT
This is a limitation. Due to how binary prefixes are patched, once installed, a conda package cannot be moved freely. It needs to be "cloned" (reinstalled from the tarball) to the target location.
Fortunately for us, there's a way to provide relocatable installations: through the installer itself. Anaconda provides a tool named `constructor` that can generate a fat shell script with all the tarballs and the extraction + installation logic. We can include the resulting installer in our bundle to provide all the dependencies. The only downside is that during the first execution we actually need to run the installer to set everything up.
#### 4. What we have tried
> See [PR](https://github.com/napari/napari/pull/3378) for the implementation described below.
Since the bundle cannot be altered after being built and `conda` installations are not relocatable, we thought we could add a "launcher" logic to the initialization routines in `napari.__main__`. Essentially, we have implemented this simple logic:
1. Detect if we are being run from the bundle executable. To make sure this can be checked, `bundle.py` now writes a sentinel file next to `napari.app/MacOS/napari`.
2. If that's the case, detect whether we have already installed our application to userspace. Default location is `~/.local/napari`.
3. If the default location is not populated, we run the installer to provide all Napari dependencies in that location and patch `sys.path`.
- We probably need to patch other environment variables after the environment activation, but surprisingly this was enough to get Napari running.
This works already! We can provide a conda-based bundle right now.
But it's not pretty. The initial installation using `constructor` takes ~5 minutes to complete and since everything is so barebones in the bundle itself (all dependencies are packaged in the installer, but they are not importable), we can't even tell the user we are doing some initialization tasks.
Using a `conda-pack` based deployment reduces the time to ~1m30s.
We would need to provide some kind of native dialog to show a progress bar or similar.
#### 5. This does not solve the App Store problem
Even if this is technically feasible with Briefcase, it's not doable through the App Store, given the review guidelines.
It would probably be rejected given the violation of:
* writing to userspace - we can technically ask for permission here and be ok but...
* we are still extending functionality through plugins
We are not sure to workaround plugin installation. There's a chance we can't provide that functionality directly in the UI, but only "accept" plugin installations through a `napari://` protocol kind of thing that gets triggered from the Hub webapp.
> Some comments on apps with plugins and the App Store (old) [here](https://stackoverflow.com/questions/5319982/mac-app-store-and-plugins)
#### 6. Other things we have tried
We want `conda` packages because it will end up providing a better plugin installation experience thanks to a consistent building environment in conda-forge (`manylinux` only gets so far) and a real SAT solver for the dependencies (trickier and trickier with ML frameworks like PyTorch or Tensorflow).
However, `conda` packages are not relocatable. What if we could actually make them relocatable through some conversion tools? We could bundle everything in the application and just install plugins to userspace (less of a violation for the App Store maybe?).
There are two tools that could have helped here (spoiler, I didn't succeed).
The first one is [PyOxidizer](https://pyoxidizer.readthedocs.io/en/stable/). A smart Rust-assisted compiler that will bundle a Python application in a binary file that can import packages from memory locations. However, it mainly supports installations from Pip packages, which means that everything is already relocatable from the beginning. This doesn't change our story and even if we wanted to use conda with it, it would probably involve heavy modifications upstream. Too much work for now.
The second one is named [Nuitka](https://nuitka.net/). This is a Python to C compiler that can end up bundling everything in relocatable libraries and binaries. While promising (it has mechanisms to auto follow the needed libraries, so as long as everything is installed locally it should work), I didn't get it to show a simple PyQt dialog saying "Hello World". It just hanged forever.
### Next steps
Some ideas:
* Instead of supporting relocation, _prevent_ relocation. This does not solve the "bundle contains an installer" problem.
* Audit our conda dependencies to see if we are lucky and our installation _happens_ to be relocatable. Maybe we only have the shebangs in text files and not binary prefixes.
* Update: we are indeed lucky! We do need to add checks so this is still the case in the future. Conda packages can be audited through their `conda-meta/info.json` files, which detail if they have binary files with hardcoded prefixes.
* Hack conda internals to force relative prefixes to `napari.app` -- not even sure if this is possible.
* If DMGs are so tricky and the App Store is not a feasible goal, we can use `constructor` to build a PKG installer.
---
## September 8, 2021
### Participants
| Name | Initials | Affiliation |
| ------------------ | -------- | ----------- |
| Jaime Rodriguez-G. | JRG | Quansight |
| Gonzalo Peña-C. | GPC | Quansight |
| | | |
| | | |
### Summary
#### Known facts
- Napari bundles rely on Briefcase to build self-contained installers for Windows, Linux and MacOS.
- Napari is extensible and offers a rich ecosystem users can install plugins from. Internally this is done by pip-installing them in the base napari environment / prefix.
#### Issues
- Pip packages are not guaranteed to be ABI compatible.
- Pip solver fails to guarantee a fully consistent environment even for the base installation. Adding plugins would only deteriorate this.
- Installing extra packages in the same location might get in the way of the signing process / deployment through OS Stores.
#### Proposal
- Switch to a conda-based setup where the Napari installation is, secretly, a conda environment that lives in userspace. This requires some work in [Briefcase itself](https://github.com/beeware/briefcase/issues/596).
- Plugins are installed to the same environment as Napari, but conda will guarantee that the ABIs involved are compatible.
- In case of conflicting dependencies, conda should error out and rollbacks successfully to a healthy state.
- Caveat: There’s a chance that some plugins cannot be installed together in the same environment due to explicit dependency incompatibilities (e.g. plugin A depends on library=2, but plugin B only uses its modern release library>3; this can get even trickier if those incompatibilities arise from 2nd order dependencies the plugin authors do not have control over).
>Answer: In this case, I am afraid there are no ways around it. ABI incompatibility will cause issues if libraries end up in the same process. There’s a chance we can have an environment manager built in to choose which one to run at start, but that’s not user friendly or easy to implement. Multiple Napari installations are possibly more natural in that regard. This needs to be discussed, but it’s an issue that we can be already suffering from with PyPI packages (even silently).
>Solution: deploy test pipelines to check that all plugins can be installed simultaneously
- Caveat: plugin authors need to package for Conda Forge.
>Answer: If they were doing it for PyPI, transitioning to CF should be very easy with the help of Grayskull.
- Caveat: submitting to Conda Forge requires a PR code review.
>Answer: Gonzalo and Jaime are both members of the reviewing team in Conda Forge.
- What about plugin conflicts?
>Answer: This is actually a feature not a bug. We want to provide the best experience to ours end users.
- What about conda-forge pinnings?
>No problems foreseen here
- Linux Bundles?
> Better to build inside a docker image, and hopefully overlaps eventually with the conda forge images
- Create conda-packages for current plugins
- Test with grayskull and conda-build / boa
- 65 currently?
### New planned features
1. Add conda packaging support on Briefcase. [See issue](https://github.com/beeware/briefcase/issues/596).
- This will probably involve shipping a Bundle with conda/mamba and the corresponding tarballs, which will be extracted to a given location on userspace (e.g. CONDA_ROOT=$HOME/.local/napari/vX.Y).
- Note: MacOS security features force us to use the same executable to install to userspace _and_ launch the application. This means we probably need to ship Python in the bundle anyway. Can this Python be updated?
1. Adapt plugin system to install from conda; pip as fallback (but still installing to the same conda environment!).
- Plugins will be installed to the same environment as the base Napari installation.
- Alternatively, we can investigate whether [stacked activation](https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#nested-activation) can be set up correctly. This is [tricky to do right](https://github.com/conda/conda/issues/9597), though (not sure how dependency resolution is handled in this case).
- Alternatively (bis), create environment copies and modify accordingly. This is like “hard stacking”; in other words, `conda create --clone`. It would be like having several Napari installations for the same version, in the end, so not sure what benefits we have here.
1. Auto update
- Check the output of `mamba update --dry-run` and see if we need to apply updates or not.
1. Failed updates should just be detected by conda, but what if it crashes or the PC shutdowns mid-update. What are our options here? Shall we implement rollbacks like this? Upstream to conda?
### Distribution plans
- Sign installers. See [issue](https://github.com/napari/napari/issues/3341#issuecomment-913187092).
- App Store (requirements to be defined)
- Other application stores
### Other notes
Conda is a loaded term. Here I am using it very liberally, meaning both the tooling ecosystem, the package format and the actual package manager. Conda has been reimplemented with some core parts replaced (mamba), and also completely in C++ (micromamba). These are faster versions, but not as feature complete (yet?); things like pip-interoperability are not there yet, and those might come in handy.
## Action points
- Create an issue for launcher proof of concept. See [Issue 3358](https://github.com/napari/napari/issues/3358)
- Automated conversion of plugin packages (PyPI -> Conda). See [Issue 3359](https://github.com/napari/napari/issues/3359)
- Long-term plans for pinned support package in Briefcase. See [Issue 3360](https://github.com/napari/napari/issues/3360)