{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/nextflow-io/schemas/main/module/v1/schema.json", "title": "Nextflow Module Schema", "description": "Schema for Nextflow module meta.yml files, supporting both nf-core community patterns and the Nextflow module system", "type": "object", "properties": { "name": { "type": "string", "description": "Module name. Can be a simple identifier (e.g., 'fastqc', 'bwa_mem') for local/nf-core modules, or a fully qualified scoped name (e.g., 'nf-core/fastqc', 'myorg/custom') for registry modules.", "examples": ["fastqc", "bwa_mem", "nf-core/fastqc", "myorg/salmon-quant"], "pattern": "^([a-z0-9][a-z0-9-]*/)?[a-z][a-z0-9_-]*$" }, "version": { "type": "string", "description": "Semantic version of the module (MAJOR.MINOR.PATCH). Required for registry publication", "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$", "examples": ["1.0.0", "2.1.3", "1.0.0-beta.1"] }, "description": { "type": "string", "description": "Brief description of what the module does", "minLength": 10, "maxLength": 500 }, "keywords": { "type": "array", "description": "Keywords for discovery and categorization", "items": { "type": "string", "minLength": 2 }, "minItems": 1, "uniqueItems": true }, "license": { "type": "string", "description": "SPDX license identifier for the module code itself", "examples": ["MIT", "Apache-2.0", "GPL-3.0-or-later"] }, "authors": { "type": "array", "description": "Original authors of the module (GitHub handles preferred)", "items": { "type": "string", "pattern": "^@?[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$" }, "minItems": 1 }, "maintainers": { "type": "array", "description": "Current maintainers of the module (GitHub handles preferred)", "items": { "type": "string", "pattern": "^@?[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$" } }, "requires": { "type": "object", "description": "Runtime requirements for the module", "properties": { "nextflow": { "type": "string", "description": "Nextflow version constraint using comparison operators", "examples": [">=24.04.0", ">=24.04.0,<25.0.0"], "pattern": "^[<>=!]+[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9]+)?(,\\s*[<>=!]+[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9]+)?)*$" } }, "additionalProperties": false }, "input": { "type": "array", "description": "Inputs of the module", "items": { "$ref": "#/$defs/structuredParameter" } }, "output": { "type": "array", "description": "Outputs of the module", "items": { "$ref": "#/$defs/structuredParameter" } }, "topics": { "type": "array", "description": "Topics of the module", "items": { "$ref": "#/$defs/structuredParameter" } }, "tools": { "type": "array", "description": "Software tools wrapped by this module with their metadata", "items": { "type": "object", "minProperties": 1, "maxProperties": 1, "patternProperties": { "^[a-zA-Z][a-zA-Z0-9_-]*$": { "$ref": "#/$defs/toolSpec" } } } } }, "required": ["name", "description"], "$defs": { "toolSpec": { "type": "object", "description": "Specification for a software tool used by the module", "properties": { "description": { "type": "string", "description": "Description of the tool and its purpose" }, "homepage": { "type": "string", "format": "uri", "description": "Tool's homepage URL", "pattern": "^https?://.*$" }, "documentation": { "type": "string", "format": "uri", "description": "Documentation URL", "pattern": "^(https?|ftp)://.*$" }, "tool_dev_url": { "type": "string", "format": "uri", "description": "Development/source code URL", "pattern": "^https?://.*$" }, "doi": { "description": "Digital Object Identifier for the tool's publication", "oneOf": [ { "type": "string", "pattern": "^10\\.\\d{4,9}/[^,]+$" }, { "type": "string", "const": "no DOI available" } ] }, "arxiv": { "type": "string", "description": "arXiv identifier", "pattern": "^arXiv:\\d{4}\\.\\d{4,5}(v\\d+)?$" }, "licence": { "type": "array", "description": "SPDX license identifier(s) for the tool", "items": { "type": "string" }, "minItems": 1, "uniqueItems": true }, "identifier": { "description": "bio.tools identifier or empty string", "oneOf": [ { "type": "string", "pattern": "^biotools:[a-zA-Z0-9_-]+$" }, { "type": "string", "maxLength": 0 } ] }, "manual": { "type": "string", "format": "uri", "description": "Manual/user guide URL" } }, "required": ["description"], "anyOf": [ { "required": ["homepage"] }, { "required": ["documentation"] }, { "required": ["tool_dev_url"] }, { "required": ["doi"] } ] }, "structuredParameter": { "oneOf": [ { "$ref": "#/$defs/paramSpec" }, { "type": "array", "items": { "$ref": "#/$defs/paramSpec" } } ] }, "paramSpec": { "type": "object", "description": "Specification for a module parameter", "properties": { "name": { "type": "string", "description": "Parameter identifier", "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$" }, "type": { "type": "string", "description": "Data type of the parameter value", "enum": [ "boolean", "float", "integer", "string", "list", "map", "file", "directory" ] }, "description": { "type": "string", "description": "Human-readable description of the parameter" }, "pattern": { "type": "string", "description": "Glob pattern for file/directory parameters" }, "optional": { "type": "boolean", "description": "Whether this parameter is optional", "default": false }, "enum": { "type": "array", "description": "List of allowed values", "uniqueItems": true }, "ontologies": { "type": "array", "description": "Ontology annotations (e.g., EDAM)", "items": { "type": "object", "patternProperties": { "^[a-zA-Z]+$": { "type": "string", "format": "uri", "description": "Ontology URI" } } }, "uniqueItems": true } }, "required": ["type", "description"] } }, "allOf": [ { "if": { "properties": { "name": { "pattern": "^[a-z0-9][a-z0-9-]*/" } }, "required": ["name"] }, "then": { "required": ["name", "description", "version"], "properties": { "version": { "description": "Version is required for scoped/registry modules (scope/name format)" } } } } ], "examples": [ { "name": "fastqc", "description": "Run FastQC on sequenced reads", "keywords": ["quality control", "qc", "adapters", "fastq"], "tools": [ { "fastqc": { "description": "FastQC gives general quality metrics about your reads.", "homepage": "https://www.bioinformatics.babraham.ac.uk/projects/fastqc/", "documentation": "https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/", "licence": ["GPL-2.0-only"], "identifier": "biotools:fastqc" } } ], "input": [ [ { "name": "meta", "type": "map", "description": "Groovy Map containing sample information" }, { "name": "reads", "type": "file", "description": "Input FastQ files", "ontologies": [] } ] ], "output": [ [ { "type": "map", "description": "Sample information" }, { "type": "file", "description": "FastQC report", "pattern": "*_{fastqc.html}", "ontologies": [] } ], { "name": "versions", "type": "file", "description": "File containing software versions", "pattern": "versions.yml" } ], "authors": ["@drpatelh", "@ewels"], "maintainers": ["@drpatelh", "@ewels"] }, { "name": "nf-core/bwa-align", "version": "1.2.4", "description": "Align reads using BWA-MEM algorithm", "keywords": ["alignment", "bwa", "mapping", "fastq", "bam"], "license": "MIT", "authors": ["@nf-core"], "maintainers": ["@nf-core"], "requires": { "nextflow": ">=24.04.0" }, "tools": [ { "bwa": { "description": "BWA aligner", "homepage": "http://bio-bwa.sourceforge.net/", "licence": ["GPL-3.0-or-later"] } }, { "samtools": { "description": "SAMtools", "homepage": "http://www.htslib.org/", "licence": ["MIT"] } } ], "input": [ [ { "name": "meta", "type": "map", "description": "Sample metadata map" }, { "name": "reads", "type": "file", "description": "Input FastQ files", "ontologies": [ { "edam": "http://edamontology.org/format_1930" } ] } ], { "name": "index", "type": "directory", "description": "BWA index directory" } ], "output": [ [ { "type": "map", "description": "Sample metadata" }, { "type": "file", "description": "Aligned BAM file", "pattern": "*.bam", "ontologies": [ { "edam": "http://edamontology.org/format_2572" } ] } ], { "name": "versions", "type": "file", "description": "Software versions" } ] } ] }