'Stricter Syntax' written in the style of the Stranger Things logo.

This is a major release where we require Nextflow’s strict syntax (including a bump of the minimum Nextflow version to 25.10.4), prepare for the upcoming Seqera container transition for modules, add more command aliases, and remove some old commands (including pytest migration tooling for modules).

As always, if you have any problems or run into any bugs, reach out on the #tools slack channel.

Highlights

Nextflow strict syntax in the pipeline template

Nextflow’s strict syntax mode is becoming the default from Nextflow v26.04. It enforces more consistent, unambiguous Nextflow code and configs, and improves error messages, and nf-core pipelines will be ready for it.

With this release, the pipeline template is strict syntax compliant and ships with a pre-commit hook that runs nextflow lint on your code.

If you want to understand what strict syntax means in practice and how to update your pipeline, the migration guide covers the most common patterns. For the broader picture of how nf-core is adapting to changes in Nextflow, see the nf-core syntax adoption roadmap blog post.

Auto-generated container config files

nf-core/tools now generates config files specifying the containers for each platform (Docker, Singularity/Apptainer and Conda) and architecture (AMD64, ARM64) that will be used by Nextflow automatically.

Whenever you install, update, or remove a module, we generate the corresponding container config files based on the container section in the meta.yml file (currently only applicable for FastQC and MultiQC and will be handled automatically by the new nf-core container commands in the future (see the corresponding container commands PR)). These files are stored in the conf/ directory.

conf/
├── base.config
├── containers_conda_lock_files_amd64.config
├── containers_conda_lock_files_arm64.config
├── containers_docker_amd64.config
├── containers_docker_arm64.config
├── containers_singularity_https_amd64.config
├── containers_singularity_https_arm64.config
├── containers_singularity_oras_amd64.config
├── containers_singularity_oras_arm64.config
...

You should not edit these config files manually, and Nextflow will automatically use the correct container for each process based on the platform and architecture.

See our blog post for more details about how this works and what will change in the future.

New command aliases

Continuing from previous releases, where we added p, m, and s aliases for the pipelines, modules, and subworkflows main commands, commands below modules, subworkflows, and pipelines now also have shorter aliases so you need to remember (“was it remove or uninstall?”) and type less.

CommandSubcommandAliases
modules & subworkflowsbump-versions (modules only)bump-version, bump, bv, b
createc
installadd, i
lintl
listls
patchp
removeuninstall, rm
testt
updateup, u
pipelinesbump-versionbump, bv, b
createc
downloadd
lintl
listls
schema lintschema l
syncs
test-datasets(command group)test-dataset, tds, td,t
listls
list-brancheslsb

So instead of:

nf-core modules install fastqc
nf-core modules remove samtools/sort
nf-core modules update

You can now write:

nf-core modules add fastqc
nf-core module rm samtools/sort
nf-core m up

Webhook notifications removed

The pipeline template no longer includes webhook-based notifications (hook_url, slackreport, adaptivecard).

Instead, we switched to using dedicated Nextflow plugins for this:

  • Slack: nf-slack (added in the GitHub actions for the megatests in the pipeline template)
  • Microsoft Teams: nf-teams

These plugins integrate directly with Nextflow and give you notification support without coupling it to the pipeline template. Thanks to @FriederikeHanssen for adding this!

Removed deprecated commands

The --migrate-pytest flag and all related migration tooling have been removed. This flag was introduced to help transition modules from pytest-based tests to nf-test, and that migration is now complete.

We now require the pipelines prefix for all pipeline commands. Previously deprecated prefix-free commands, such as nf-core create, have been removed.

Other improvements

Switch from pre-commit to prek in the pipeline template

We switched from pre-commit to prek to run git hooks in the tools repository as well as the pipeline template (and all other nf-core repositories). prek is a fast, Rust-based drop-in replacement for pre-commit that uses the same .pre-commit-config.yaml format, so no changes are needed for your existing configuration. It comes included with nf-core/tools and to replace your pre-commit setup with prek, you run

prek install --overwrite

and you should see moderately to slightly faster pre-commit checks.

Stricter module linting for meta and ext keys and required version topics

The linter now checks that meta and ext variables are used consistently in module main.nf files. Incorrect or misspelled key names are caught early before they cause hard-to-debug runtime issues. Thanks to @mahesh-panchal for adding this!

We also switched the linting of version topics to be strict, meaning that if a module or subworkflow does not emit a version topic, it will fail the linting.

Apptainer support in module template

The module template now includes Apptainer as a container option alongside Singularity. We switched already all nf-core modules to this new syntax and new modules created with nf-core modules create will have Apptainer directives included by default.

RO-Crate: contributors from manifest.contributors

nf-core pipelines rocrate now reads manifest.contributors from nextflow.config and maps those entries into the RO-Crate metadata. Pipeline contributors declared in the Nextflow manifest will automatically appear in the generated crate without any extra configuration. Thanks to @muffato for adding this feature, that was on my wishlist for a long time!

Module linting: compressed file syntax in stubs

The linter now checks that stub blocks use syntax according to the nf-core module specifications for gzipped output files.

AI and LLM contribution guidelines

Following the nf-core and AI blog post, we added guidance to the pipeline template for contributors using AI and LLM tools. It covers how to review, test, and mention AI-assisted contributions. Thanks @jfy133 for adding this!

Sync: respects an existing defaultBranch

nf-core pipelines sync no longer overwrites the defaultBranch setting in nextflow.config if it is already present. This (hopefully) prevents sync from clobbering intentional per-pipeline branch configuration.

Changelog

You can find the complete changelog and technical details on GitHub.

How to resolve common merge conflicts on pipeline sync PRs

All the template changes are listed in the Template section of the changelog. Below, we have collected the most common merge conflicts that you may find and how to resolve them.

Video walkthrough

Play

CHANGELOG.md

Resolution

Nothing was really changed in the template. Just keep your existing version.

.nf-core.yml

Changes

The nf_core_version field is updated to reflect the new template version. If your pipeline already carried a newer value (e.g. 3.5.2) you will see a downward conflict from the template.

Resolution

Keep the higher nf_core_version value. Remove any duplicate keys from the file.

README.md

Changes

The Nextflow and nf-core template version badges were updated to 25.10.4 and 4.0.1 respectively.

Resolution

Keep the newer values. If your pipeline already requires a newer Nextflow version, accept those and discard the older badge URLs from the template.

assets/multiqc_config.yml

Changes

The report_comment string was reformatted from a multi-line YAML block scalar to a single-line string.

Resolution

Accept the template’s single-line format. The content is identical; only the YAML line wrapping changed.

.gitignore

Changes

The template added entries to ignore .lineage/ directories.

Resolution

Accept both template changes and your own additions. You have to have your changes at the end of the file to keep nf-core pipelines lint happy (and avoid future merge conflicts).

.github/workflows/nf-test.yml

Changes

  • NFT_VER was bumped from 0.9.4.

Resolution

Accept the template changes. If your pipeline already requires a higher nf-test version, keep the higher value.

.github/workflows/awsfulltest.yml

Changes

The seqeralabs/action-tower-launch action reference was switched from a pinned commit hash to the semantic version tag @v2 and the nf-slack plugin was added.

Resolution

Accept @v2 from the template. Keep any pipeline-specific customisations to the Slack notification messages and nextflow_config block.

nextflow.config

Changes

  • In the manifest block, nextflowVersion was bumped to '!>=25.10.4'.

Resolution

Accept the new modules_testdata_base_path parameter and formatting. Keep the higher nextflowVersion value. Be sure to keep your doi entry, if you have one.

ro-crate-metadata.json

Changes

Several fields are regenerated from pipeline and template state on every sync.

Resolution

Accept all changes from the template branch. The file is fully regenerated by nf-core pipelines rocrate and should not contain manual edits.

modules.json

Changes

We updated FastQC and MultiQC to the latest versions in the template.

Resolution

Accept the updated sha sums for FastQC and MultiQC, if applicable. Keep your own changes to the file.

docs/CONTRIBUTING.md

Changes

We moved CONTRIBUTING.md from .github/CONTRIBUTING.md to docs/CONTRIBUTING.md to make them more visible. It also includes the new AI and LLM contribution guidelines.

Resolution

Keep the template version. Merge any pipeline-specific content from your own CONTRIBUTING.md into it.

workflows/*.nf — strict syntax process call formatting

Changes

The input channels of MultiQC have changed.

Resolution

Accept the new MultiQC input channel formatting, but keep your own channels etc.

modules/nf-core/

Changes

We updated the included modules (FastQC and MultiQC) to the latest version.

Resolution

Accept all template changes.


Published on
28 April 2026
Written by