Guide for Python Package Authors & Maintainers#

Are you considering submitting a package for review with pyOpenSci? You’ve come to the right place! Below you will find the steps that you need to follow to submit a package to pyOpenSci for peer review.

Peer review resources#

Package scope

Learn about the requirements and scope of packages that pyOpenSci reviews.

The Scope of Packages that pyOpenSci Reviews
How review works

We review packages openly using GitHub Issues.

How pyOpenSci’s open software peer review works
Review timeline

Curious about the general timeline for pyOpenSci reviews?

An Overview Of the Peer Review Process
Review Guidelines & Policies

Read about our peer review policies.

Peer Review Guidelines & Policies

Before you begin this process, please be sure to read the review process guidelines.

Note

Before you consider submitting to us, please consider the following:

  1. Please be sure that you have time to devote to making changes to your package. During review, you will receive feedback from an editor and two reviewers. Changes could take time. Please consider this before submitting to us. You can read more about the timeline to make changes in our peer review policies page.

  2. A diverse group of volunteer editors and reviewers leads peer review. Please be considerate when engaging with everyone online.

1. Do you plan to continue to maintain your package?#

One of the goals of pyOpenSci is to maintain a curated list of community-approved, maintained, and vetted tools that support open science workflows.

As such, we review packages that will be useful to the community and maintained over time. While we understand that burnout is real, and you may move on in the future to other projects, we ask that you commit to maintaining your package for at least 1-2 years after the review process is complete.

If that maintenance commitment is too much, you might consider submitting your package to a journal that is more focused on publication only.

Who should submit the package for review?#

If you have a team of people maintaining your package, please be sure that the submitting author is the person who “owns” or leads that maintenance. That person will become the long-term point of contact for pyOpenSci.

  • Please also include the names of all maintainers on the project as we also want to ensure that everyone working on the project receives full credit for their effort.

Note

If your package is more of a tool to support a specific workflow that either:

  • may not be maintained long term or

  • may be so specific that it won’t have a user base outside of your lab or work environment

please consider submitting it directly to a publisher like the Journal of Open Source Software (JOSS). A publisher like JOSS has less emphasis on long-term software maintenance and focuses more on publication quality and citation/credit.

2. Does Your Package Meet Packaging Requirements?#

Before submitting your project for review with pyOpenSci, make sure that your package meets all of the requirements listed in the editor checks (see below). We use these checks as a baseline for all submissions and pre-submissions to pyOpenSci.

If you have questions about any of the elements listed below, you can check out our pyOpenSci Python packaging guide which includes an overview discussion of best practices for Python packaging, including discussions of:

  • Tools that you can use to create your package

  • Tools for creating and publishing documentation.

  • Resources for creating files such as the README file, code of conduct, contributing guide, and more.

## Editor in Chief checks

Hi there! Thank you for submitting your package for pyOpenSci
review. Below are the basic checks that your package needs to pass
to begin our review. If some of these are missing, we will ask you
to work on them before the review process begins.

Please check our [Python packaging guide](https://www.pyopensci.org/python-package-guide) for more information on the elements
below.

- [ ] **Installation** The package can be installed from a community repository such as PyPI (preferred), and/or a community channel on conda (e.g., conda-forge, bioconda).
  - [ ] The package imports properly into a standard Python environment `import package`.
- [ ] **Fit** The package meets criteria for [fit](https://www.pyopensci.org/software-peer-review/about/package-scope.html#what-types-of-packages-does-pyopensci-review) and [overlap](https://www.pyopensci.org/software-peer-review/about/package-scope.html#package-overlap).
- [ ] **Documentation** The package has sufficient online documentation to allow us to evaluate the package's function and scope *without installing the package*. This includes:
  - [ ] User-facing documentation that overviews how to install and start using the package.
  - [ ] Short quickstart tutorials that help a user understand how to use the package and what it can do for them.
  - [ ] API documentation (documentation for your code's functions, classes, methods, and attributes): this includes clearly written docstrings with variables defined using a standard docstring format.
- [ ] Core GitHub repository Files
  - [ ] **README** The package has a `README.md` file with a clear explanation of what the package does, instructions on how to install it, and a link to development instructions.
  - [ ] **Contributing File** The package has a `CONTRIBUTING.md` file that details how to install and contribute to the package.
  - [ ] **Code of Conduct** The package has a `CODE_OF_CONDUCT.md` file.
  - [ ] **License** The package has an [OSI approved license](https://opensource.org/licenses).
NOTE: We prefer that you have development instructions in your documentation too.
- [ ] **Issue Submission Documentation** All of the information is filled out in the `YAML` header of the issue (located at the top of the issue template).
- [ ] **Automated tests** Package has a testing suite and is tested via a Continuous Integration service.
- [ ] **Repository** The repository link resolves correctly.
- [ ] **Package overlap** The package doesn't entirely overlap with the functionality of other packages that have already been submitted to pyOpenSci.
- [ ] **Archive** (JOSS only, may be post-review): The repository DOI resolves correctly.
- [ ] **Version** (JOSS only, may be post-review): Does the release version given match the GitHub release (v1.0.0)?

**Optional:** Let projects know that it's a great idea for projects to have a .github repository for the project organization where they can host a commonly used LICENSE, Code of Conduct, and even a YAML file with label definitions. These items will then be automatically applied to every repository in the organization to ensure consistency (but can be customized within repos too). The [SunPy project](https://github.com/sunpy/.github/) has a great example of this.

---
- [ ] [Initial onboarding survey was filled out ](https://forms.gle/F9mou7S3jhe8DMJ16)
We appreciate each maintainer of the package filling out this survey individually. :raised_hands:
Thank you, authors, in advance for setting aside five to ten minutes to do this. It truly helps our organization. :raised_hands:
---

*******

## Editor comments

Hint

Do you have questions about Python packaging or our peer review process?

Post your question(s) in our Discourse forum under coding-help. We will do our best to help you with questions surrounding:

  • Package structure

  • Setting up continuous integration

  • PyPI and conda publication

  • Getting started with test suites

  • Creating and publishing documentation

  • Anything related to our peer review process.

Also, check our Packaging Guide. This guide includes:

3. Is Your Package in Scope for pyOpenSci?#

Next, check to see if your package falls within the topical and technical scope of pyOpenSci. If you aren’t sure about whether your package fits within pyOpenSci’s scope (below), submit a presubmission inquiry issue on the software-review repository. After you submit an inquiry, a pyOpenSci editor will provide feedback regarding the fit of your package for pyOpenSci review. This can take up to a week.

Our current categories for determining package scope are below:

Click here to view our technical and domain scope requirements.

4. Submit Your Package for Peer Review#

To submit your package for peer review, you can open an issue in our pyopensci/software-review repo repository and fill out the Submit Software for Review issue template.

5. Editor-in-Chief Reviews Package for Scope and Minimal Infrastructure Criteria#

Once the issue is opened, our editor-in-chief and an editor from our editorial board will review your submission within 2 weeks and respond with next steps. The editor may request that you make updates to your package to meet minimal criteria before review. They may also reject your package if it does not fall within our scope.

Click here to view the editor checks that will be used to evaluate your package.

6. The Review Begins#

If your package meets the minimal criteria for being reviewed, it may then be given to an editor with appropriate domain experience to manage the review process. That editor will assign 2-3 reviewers to review your package. Reviewers will be asked to provide review feedback as comments on your issue within 3 weeks. Reviewers can also open issues in your package repository. We prefer issues that link back to the review as they document changes made to your package that were triggered by our review process.

7. Response to Reviews#

You should respond to reviewers’ comments within 2 weeks of the last-submitted review. You can make updates to your package at any time. We encourage ongoing conversations between authors and reviewers. See the guide for package reviewers for more details about reviewers’ engagement with package maintainers during a review.

8. Acceptance into pyOpenSci#

Once the reviewers are happy with the changes that you’ve made to the package, the editor will review everything and accept your package into the pyOpenSci ecosystem. Congratulations! You are almost done!

My Package is Approved, Now What?#

Congratulations on being accepted into the pyOpenSci community of maintainers! Once your package is approved, a few things will happen:

  1. We will ask you to ensure that your package is being tracked/archived using Zenodo. You will then create a tagged release representing the version of the package accepted by pyOpenSci.

  2. We will ask you to add the pyOpenSci badge pyOpenSci Peer Reviewed to the top of your README.md file.

  3. We will promote your package on our social media channels!

  4. We will invite you to write a blog on our website spotlighting your package. The blogs our maintainers write are among the most popular content on the website!

If you’d like to submit your package to JOSS, you can do so now. Remember that JOSS will accept our review as theirs, so you DO NOT need to go through another review. Read more below.

Journal of Open Source Software (JOSS) Submission#

pyOpenSci has a partnership with JOSS, where our review is accepted by JOSS by default if the package fits into the JOSS scope.

  • When you submit your package for pyOpenSci review, you can opt to include a submission to JOSS after passing pyOpenSci review. In this case, your package will be evaluated by JOSS through the pyOpenSci review

  • To complete the JOSS submission, you will also need to craft a paper.md file describing the package following JOSS’ standards (see below). More details on the requirements for JOSS can be found on their website.

  • If you choose to opt into the pyOpenSci/JOSS partnership in your review, you DO NOT need to go through a second review with JOSS. JOSS accepts our review as theirs. Please start a review process with JOSS and reference the pyOpenSci review issue where your package was accepted. Make sure that you let the JOSS editor know that we have already accepted your package. The JOSS editor will review your paper. Once your package is accepted, you will be given a JOSS cross-ref-enabled DOI and badge to display on your README file.

Note

Acceptance to pyOpenSci does not guarantee acceptance to JOSS. In particular, JOSS doesn’t accept the full variety of packages that are in scope for pyOpenSci. For example, thin API wrappers fall within pyOpenSci’s scope but are usually not accepted by JOSS. Be sure to review JOSS’s submission requirements before writing up a paper about your package.

Post review - welcome to the pyOpenSci community!#

Congratulations! Once your package has been accepted into the pyOpenSci ecosystem, you’ll be invited to join our community Slack where you can connect with other package maintainers, get help with maintenance questions, and stay updated on community developments.

Ongoing support from pyOpenSci#

We’re committed to supporting you throughout your package’s maintenance journey:

Annual check-ins: We’ll reach out each year to see how your package is doing and learn about any updates we can help highlight through our blog, social media, or newsletter.

Community resources: Take advantage of our Slack community to connect with other maintainers, share experiences, and get advice on common maintenance challenges. We’re also building additional resources and tools to help package maintainers succeed.

Maintenance assistance: If you have specific maintenance challenges, our Slack community is a great place to ask questions. There is a lot of packaging and community expertise in our vibrant community!

When you need help or want to step down#

Life changes and priorities shift. If maintaining your package becomes challenging, please reach out to us. We’re here to help, and we have several options:

  • Finding co-maintainers or new maintainers: If you are interested, we can try to connect you with community members interested in contributing to or taking over maintenance of your package.

  • Package archival: If maintenance isn’t sustainable, we can work together to archive your package.

If the package is archived, we will remove it from our curated list of vetted tools.

Maintenance policies#

For detailed information about our maintenance expectations, annual check-in process, and archival procedures, please take a look at our post-review process documentation. Remember, you maintain full ownership of your package. We’re here to support you, not interfere with your development process.