We hope these questions will help you in your napari plugin journey! We endeavour to update this regularly. If you need additional information or assistance, check out the Contact page or you can reach a human at firstname.lastname@example.org.
napari is a community partner on the image.sc forum and all help and support requests should be posted on the forum with the tag napari. We look forward to interacting with you there.
Bug reports should be made on napari’s github issues using the bug report template. If you think something isn’t working, don’t hesitate to reach out - it is probably us and not you!
Plugin authors are encouraged to add links to their listing, showing users of their plugin where to find help.
If the plugin author has not indicated where to get help, the image.sc community is a great place to ask questions about napari and napari plugins.
Using the napari hub
We use fuse.js for the plugin search engine. You should be fine with most queries, but if you want to perform more advanced search queries, you can use extended search operators to fine tune your search results.
By default, whitespace will be considered as an AND operator. To combine results using OR, use the pipe operator:
console | animation
To find results that include a word (without fuzzy matching), use the apostrophe operator:
To find results that start with a particular string, use the prefix operator.
Similar to find results that end with a particular string, use the suffix operator:
The napari hub is a service of the Chan Zuckerberg Initiative in collaboration with napari, built by the CZI imaging team. You can learn more about who is steering this ship by visiting the about page.
Building and sharing plugins
To add your plugin to the napari hub, simply push it to PyPI. If you used the napari plugin cookiecutter as a template for your plugin, it comes already configured to deploy to PyPI when you tag a versioned release.
We poll PyPI for updates every 5 minutes.
We source metadata for your plugin's listing from both PyPI and Github. In addition to a bunch of standard PyPI stuff, we support additional custom fields, like a user-friendly description to complement your Github README. Check out Customizing your plugin's listing to see what metadata we will present and where we source it from.
The napari hub supports Shields.io shields for your repository linking to your plugin’s listing page. If you want to add a shield to your README or other markdown files, you can copy & paste the snippet:
If you just want the badge SVG, you can access that at the URL below.
Yes, you can! The napari-hub-cli is a command-line tool that lets you preview your metadata and make sure that you’ve included everything the hub is looking for. Simply install it on your local development machine and point it at your local repository.
If you remove your plugin from PyPI or yank a release, it will be removed from the napari hub within approximately 5 minutes.
If you want your plugin to be available on PyPI, but not be visible on the napari hub, let us know by submitting an issue or sending an email to email@example.com and we’ll manually remove it from our listings.
We check PyPI every 5 minutes, so if you just pushed it to PyPI, you might just need to go and get a cup of coffee.
Search PyPI directly for your plugin among those tagged with “Framework :: napari”
If your plugin is on PyPI, but not showing up in that search, then you don’t have the “Framework :: napari” trove classifier properly defined.
If your plugin does show up under “Framework :: napari” on PyPI, but not on the hub, go and grab a cup of coffee. If it still doesn’t show up after 5 minutes, open an issue and our team will look into it as soon as we can.
We only pull plugin info from Github when we detect a new plugin or new release on PyPI. However, if you’d like to update your plugin listing with the latest metadata from your Github repo, just let us know by submitting an issue and we can manually trigger a refresh of your plugin metadata from Github.
To be considered an “open source” plugin, the hub must be able to detect that your plugin is distributed with an OSI-approved open source license. That happens in one of two ways:
- If you’ve linked to a Github repository, we’ll source the license from Github’s API, which inspects your LICENSE file and infers the correct license.
- If Github fails to identify your license, we’ll fallback on whatever you’ve specified in your Python setup. Note: this MUST be a valid SPDX license identifier in order to be detected as an “open source” license, such as “BSD-3-Clause”... “BSD-3” will not be recognized as “open source”.
For more information on how we source this metadata, see the "License" section of "Customizing your plugin's listing"