Skip to content Skip to footer

tasks: Packaging software

How to package and release your software?

Description

Making your code publicly available is a key step toward open, reusable, and citable research software.

Publishing means sharing your software in a way that others can find, use, and cite it - it is often achieved by putting your code in a shared code repository such as GitHub or in a dedicated package repository.

Packaging is the process of preparing your software in a neat “package” so that others can install and use it easily (e.g. using a simple command or download).

Releasing refers to packaging a particular stable version of your code for others to download and run.

Considerations

Packaging is the process of preparing your software so that others can install and use it easily. It may involve:

  • organising your code and files in a standard structure and providing package configuration files (e.g., package.json, pyproject.toml)
  • including metadata such as version number, authors, dependencies, and license,
  • adding configuration or build files,
  • ensuring users can install the software using a simple command or download.

Solutions

Here are some common ways to package and release your software:

  • Code hosting platforms – like GitHub, GitLab, and BitBucket - provide a place to share and publish your project’s source code. They are often the first step toward an open release and packaging too - they allow storing and distributing packages across multiple programming languages and formats.
  • Software registries and package repositories – once your code is ready to be installed or reused, you can package and publish it to discipline- or language-specific registries (for example, PyPI for Python, CRAN for R, npm for JavaScript, Maven Central for Java). These make it easy for users to install your software directly from their environment.
  • Container registries and workflow hubs – for more complex or reproducible environments, you can publish your software as a Docker/Singularity container or share it on workflow repositories (e.g. WorkflowHub, Dockstore) to support reproducible execution.

Code Hosting Platforms

Code hosting platforms are the most common way to share and collaborate on software projects. They provide online repositories that store your code and its history using version control (usually Git).

These platforms support:

  • publishing and visibility – your repository can be public and easily shared through a web link.
  • releases – you can tag a version (e.g. v1.0.0) and publish it as a release with release notes and downloadable archives.
  • automation – continuous integration and testing pipelines can automatically check that your code works as intended before each release.

Code hosting platforms form the hub of most modern software projects. Even if your users ultimately install your software from a package registry, the source code and development history usually live here. However, it is possible to create and host packages directly code hosting platforms - e.g. check this guide on how to create a Python package and publish it on GitHub.

Software Package Registries

Once software is stable and ready for others to install, you can distribute it through a package registry. These systems make software easy to install directly from the command line or within programming environments. Examples include PyPI (Python), CRAN (R), npm (JavaScript), conda-forge (multi-language), CPAN (Perl).

Registries provide:

  • simple installation – users can install your package with a single command (e.g. pip install, conda install, install.packages, etc.).
  • versioned distribution – each release is recorded with its version number, so users can reproduce work with specific versions.
  • metadata and discoverability – registries include information such as author, license, dependencies, and description, making your software findable by others.

Even though package registries are language-specific, the general principle is the same - they make your code accessible and reusable by a wide audience of users and developers.

Container and Workflow Registries

For complex research software that depends on multiple tools or specific environments, distributing containers or workflows ensures reproducibility. Containers package your software together with its runtime environment (libraries, operating system dependencies, etc.) so others can run it reliably anywhere. Workflows describe how multiple tools or scripts connect to form a complete computational process. Examples include Docker Hub, GitHub Container Registry, Singularity Library, WorkflowHub, Dockstore.

Container and workflow registries allow you to:

  • package and share ready-to-run code and environments – users can pull and run a container with no manual setup.
  • versioned distribution – each container or workflow can have tagged versions, just like source code releases.

Related pages

Training

EVERSE TeSS search results:
Skip tool table

Tools and resources on this page

Tool or resource Description Related pages
BitBucket Bitbucket is used for hosting and managing source code repositories, primarily using Git, and is designed to help software development teams collaborate on code, automate builds and deployments with Bitbucket Pipelines, and integrate with other tools like Jira. Releasing software
Docker Docker is a tool for creating isolated environments (application isolation) for software development called containers to enable consistent software running across platforms. Docker allows developers to build, share, run and verify applications easily. DockerHub is a repository for sharing and managing container images. Archiving software Continuous Integration... Creating a good README Reproducible software ...
Dockstore Dockstore is a free and open source platform for sharing reusable and scalable analytical bioinformatics tools and workflows.
GitHub GitHub is a platform that allows developers to create, store, manage, and share their code. It uses Git to provide distributed version control. GitHub provides access control, bug tracking, software feature requests, task management, continuous integration, and wikis for every project. Archiving software Performing a code review Computational workflows Documenting code Documenting software p... Documenting software u... Releasing software Using version control
GitLab DevOps platform that enables teams to collaborate, plan, develop, test, and deploy software using an integrated toolset for version control, CI/CD, and project management. Archiving software Performing a code review Computational workflows Documenting code Documenting software p... Documenting software u... Releasing software Using version control
Singularity Singularity is an open source container platform allows us to create and run containers that package up pieces of software in a way that is portable and reproducible. Singularity is designed for ease-of-use on shared multiuser systems and in High Performance Computing (HPC) environments. Singularity is compatible with all Docker images and it can be used with GPUs and MPI applications. Archiving software Reproducible software ...
WorkflowHub WorkflowHub is a registry for describing, sharing and publishing scientific computational workflows.
Contributors

How to cite this page

Eva Martín del Pico, Aleksandra Nenadic, "Packaging software". everse.software. http://everse.software/RSQKit/packaging_software .