(modules-page)=

# Overview

Nextflow scripts can include **definitions** (workflows, processes, and functions) from other scripts.
When a script is included in this way, it is referred to as a **module**.
Modules can be re-used within a pipeline and can be shared across projects.
By packaging definitions as modules, you avoid duplicating code and benefit from community improvements.

There are two ways to use modules in Nextflow:

- [Local modules](#local-modules)
- [Registry modules](#registry-modules)

See {ref}`using-modules-page` to learn how to install and use modules in a project.
See {ref}`dev-modules-page` to learn how to create and publish your own modules.
See {ref}`module-registry-page` to learn how to use the Nextflow module registry.

## Local modules

Local modules are stored and maintained directly in your project. You include definitions from local modules using the `include` keyword with a relative path:

```nextflow
include { CAT } from './modules/cat'

workflow {
    data = channel.fromPath('data/*.txt')
    CAT(data)
}
```

The above snippet imports a process named `CAT` from the *included module* into the *including script*. The include source `./modules/cat` refers to the script `./modules/cat.nf` relative to the including script path.

Local modules are well suited for project-specific components that are not intended for sharing.

## Registry modules

:::{versionadded} 26.04.0
:::

Registry modules are sourced from the [Nextflow registry](https://registry.nextflow.io) or a compatible module registry.
Like local modules, registry modules are stored in your project, but they are installed and managed using the `nextflow module` command.

Key features of registry modules:

- **Discoverability**: Search for modules by keyword or name and browse available versions.
- **Version management**: Pin specific versions or use the latest release, with automatic integrity checking via checksums.
- **Direct execution**: Run modules as standalone workflows for ad-hoc tasks or testing without writing a wrapper script.
- **Standard structure**: Each module includes a script (`main.nf`), spec (`meta.yml`), and documentation (`README.md`), providing a consistent structure for tooling and automation.

:::{note}
Modules from the [nf-core](https://nf-co.re/) community are automatically mirrored to the Nextflow module registry under the `nf-core` namespace.
:::

Install registry modules into your project and include them by name:

```console
$ nextflow module install nf-core/fastqc
```

```nextflow
include { FASTQC } from 'nf-core/fastqc'
```
