You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Renamed `.checksum` to `.module-info`**: Leaves room for additional properties in the future
13
+
-**Removed `@` prefix from module scopes**: Local modules are distinguished from remote modules by presence/absence of `./` prefix
14
+
-**Removed version pinning from config**: Installed module versions are now inferred from the `meta.yaml` of each module in the `modules/` directory instead of being declared in `nextflow.config`
15
+
11
16
### Version 2.6 (2026-01-28)
12
17
-**Removed module parameters**: Module parameters specification moved to separate spec document.
13
18
@@ -60,41 +65,37 @@ Implement a module system with four core capabilities:
60
65
61
66
**DSL Syntax**:
62
67
```groovy
63
-
// Import from registry (scoped module name, detected by @scope prefix)
64
-
include { BWA_ALIGN } from '@nf-core/bwa-align'
68
+
// Include from registry (scoped module name without `./` prefix)
69
+
include { BWA_ALIGN } from 'nf-core/bwa-align'
65
70
66
71
// Existing file-based includes remain supported
67
72
include { MY_PROCESS } from './modules/my-process.nf'
68
73
```
69
74
70
-
**Module Naming**: NPM-style scoped packages `@scope/name` (e.g., `@nf-core/salmon`, `@myorg/custom`). Unscoped names (eg. local paths) supported for legacy compatibility. No nested paths with the module are allowed - each module must have a `main.nf` as the entry point.
75
+
**Module Naming**: Scoped modules `scope/name` (e.g., `nf-core/salmon`, `myorg/custom`). Local paths supported for backwards compatibility. No nested paths with the module are allowed - each module must have a `main.nf` as the entry point.
71
76
72
-
**Version Resolution**: Module versions pinned in `nextflow.config`. If not specified, use the latest available locally in `modules/` directory, or downloaded and cached in the `modules/` directory.
77
+
**Version Resolution**: Installed module versions are inferred from the `meta.yaml` of each module in the `modules/` directory. If a module is not present locally, the latest available version is downloaded from the registry.
73
78
74
79
**Resolution Order**:
75
-
1. Check `nextflow.config` for declared version
76
-
2. Check local `modules/@scope/name/` exists
77
-
3. Verify integrity against `.checksum` file
78
-
4. Apply resolution rules (see below)
80
+
1. Check local `modules/scope/name/` exists
81
+
2. Verify integrity against `.module-info` file
82
+
3. Apply resolution rules (see below)
79
83
80
84
**Resolution Rules**:
81
85
82
-
| Local State | Declared Version | Action |
83
-
|-------------|------------------|--------|
84
-
| Missing | Any | Download declared version (or latest if not declared) |
85
-
| Exists, checksum valid | Same as declared | Use local module |
86
-
| Exists, checksum valid | Different from declared |**Replace** local with declared version |
87
-
| Exists, checksum mismatch | Same as declared |**Warn**: module was locally modified, do not override |
88
-
| Exists, checksum mismatch | Different from declared |**Warn**: locally modified, will NOT replace unless `-force` is used |
86
+
| Local State | Action |
87
+
|-------------|--------|
88
+
| Missing | Download latest from registry |
89
+
| Exists, checksum valid | Use local module (version from `meta.yaml`) |
90
+
| Exists, checksum mismatch |**Warn**: locally modified, will NOT replace unless `-force` is used |
89
91
90
92
**Key Behaviors**:
91
-
-**Version change**: When the declared version differs from the installed version (and local is unmodified), the local module is automatically replaced with the declared version
92
-
-**Local modification**: When the local module content was manually changed (checksum mismatch with `.checksum`), Nextflow warns and does NOT override to prevent accidental loss of local changes
93
+
-**Local modification**: When the local module content was manually changed (checksum mismatch with `.module-info`), Nextflow warns and does NOT override to prevent accidental loss of local changes
93
94
-**Force flag**: Use `-force` with `nextflow module install` to override locally modified modules
94
95
95
96
**Resolution Timing**: Modules resolved at workflow parse time (after plugin resolution at startup).
96
97
97
-
**Local Storage**: Downloaded modules stored in `modules/@scope/name/` directory in project root (not global cache). Each module must contain a `main.nf` file as the required entry point. It is intended that module source code will be committed to the pipeline git repository.
98
+
**Local Storage**: Downloaded modules stored in `modules/scope/name/` directory in project root (not global cache). Each module must contain a `main.nf` file as the required entry point. It is intended that module source code will be committed to the pipeline git repository.
98
99
99
100
### 2. Semantic Versioning and Configuration
100
101
@@ -103,15 +104,8 @@ include { MY_PROCESS } from './modules/my-process.nf'
103
104
-**MINOR**: New processes, backward-compatible enhancements
104
105
-**PATCH**: Bug fixes, documentation updates
105
106
106
-
**Workflow Configuration** (`nextflow.config`):
107
+
**Registry Configuration** (`nextflow.config`):
107
108
```groovy
108
-
// Module versions (exact versions only, no ranges)
@@ -162,8 +156,9 @@ Using comparison operators (`>=`, `<`) with comma-separated ranges provides the
162
156
npm-style `^` and `~` notation while maintaining consistency with existing Nextflow version constraint syntax.
163
157
This avoids introducing new notation that would require additional parser support.
164
158
165
-
**Dependency Resolution**:
166
-
- Workflow's `nextflow.config` specifies exact versions for module dependencies
159
+
**Module Resolution**:
160
+
161
+
Installed module versions are inferred from the `meta.yaml` file for each module in the `modules/` directory.
167
162
168
163
### 3. Unified Nextflow Registry
169
164
@@ -209,12 +204,15 @@ Note: The `{name}` parameter includes the namespace prefix (e.g., "nf-core/fastq
209
204
```bash
210
205
nextflow module run scope/name # Run a module directly without a wrapper script
211
206
nextflow module search <query> # Search registry
212
-
nextflow module install [scope/name] # Install all from config, or specific module
207
+
nextflow module install scope/name # Install a module
213
208
nextflow module list # Show installed vs configured
214
209
nextflow module remove scope/name # Remove from config + local cache
215
210
nextflow module publish scope/name # Publish to registry (requires api key)
216
211
```
217
212
213
+
**General Notes**:
214
+
- All commands respect the `registry.url` configuration for custom registries
215
+
218
216
#### `nextflow module run scope/name`
219
217
220
218
Run a module directly without requiring a wrapper workflow script. This command enables standalone execution of any module by automatically mapping command-line arguments to the module's process inputs. If the module is not available locally, it is automatically installed before execution.
@@ -230,13 +228,13 @@ Run a module directly without requiring a wrapper workflow script. This command
230
228
**Behavior**:
231
229
1. Checks if module is installed locally; if not, downloads from registry
232
230
2. Parses the module's `main.nf` to identify the main process and its input declarations
233
-
3. Validates command-line arguments against the process input schema
231
+
3. Validates command-line arguments against the process input declarations
234
232
4. Generates an implicit workflow that wires CLI arguments to process inputs
235
233
5. Executes the workflow using standard Nextflow runtime
236
234
237
235
**Input Mapping**:
238
236
- Named arguments (`--reads`, `--reference`) are mapped to corresponding process inputs
239
-
- File paths are automatically converted to file channels
237
+
- File paths are automatically converted to files for process file inputs
240
238
- Multiple values can be provided for inputs expecting collections
241
239
- Required inputs without defaults must be provided; optional inputs use declared defaults
Download and install modules to the local `modules/` directory. When called without arguments, installs all modules declared in `nextflow.config`. When a specific module is provided, installs that module and adds it to the configuration.
285
+
Download and install a module to the local `modules/` directory.
288
286
289
287
**Arguments**:
290
-
-`[scope/name]`: Optional module identifier. If omitted, installs all modules from config
288
+
-`<scope/name>`: Module identifier.
291
289
292
290
**Options**:
293
291
-`-version <ver>`: Install a specific version (default: latest)
294
-
-`-force`: Re-download even if already installed locally
292
+
-`-force`: Overwrite any local changes
295
293
296
294
**Behavior**:
297
-
1. If `-version` not specified, resolves the module version from `nextflow.config` or queries registry for latest
298
-
2. Checks if local module exists and verifies integrity against `.checksum` file
295
+
1. If `-version` not specified, queries registry for the latest available version
296
+
2. Checks if local module exists and verifies integrity against `.module-info` file
299
297
3. If local module is unmodified and version differs: replaces with requested version
300
298
4. If local module was modified (checksum mismatch): warns and aborts unless `-force` is used
301
299
5. Downloads the module archive from the registry
302
-
6. Extracts to `modules/@scope/name/` directory
303
-
7. Stores `.checksum` file from registry's X-Checksum response header
304
-
8. Updates `nextflow.config` if installing a new module not already configured
300
+
6. Extracts to `modules/scope/name/` directory
301
+
7. Stores `.module-info` file from registry's X-Checksum response header
305
302
306
303
**Example**:
307
304
```bash
308
-
nextflow module install # Install all from config
309
305
nextflow module install nf-core/bwa-align # Install specific module (latest)
1.**Local vs managed module distinction**: Should local modules use the `@` prefix in include statements, or should a dot file (e.g., `.nf-modules`) be used to distinguish local modules from managed/remote modules?
565
-
566
-
2.**Module version configuration**: Should pipeline module versions be specified in `nextflow.config` or in a dedicated pipeline spec file (e.g., `pipeline.yaml`)?
567
-
568
547
---
569
548
570
549
## Appendix A: Module Schema Specification
@@ -620,8 +599,6 @@ name: myorg/custom-aligner
620
599
- Name: lowercase alphanumeric with underscores/hyphens (module identifier)
**Note:** The `@` prefix is used only in Nextflow DSL `include` statements (e.g., `include { FASTQC } from '@nf-core/fastqc'`) to distinguish registry modules from local file paths. The meta.yaml `name` field should not include the `@` prefix.
624
-
625
602
#### `version`
626
603
627
604
Semantic version following [SemVer 2.0.0](https://semver.org/):
0 commit comments