Configuration
Configuration files
When you launch a pipeline script, Nextflow detects configuration files from multiple sources and applies them in the following order (from lowest to highest priority):
$NXF_HOME/config(defaults to$HOME/.nextflow/config)nextflow.configin the project directorynextflow.configin the launch directory- Config files specified with
-c <config-files>
You can use the -C <config-file> option to specify a fixed set of configuration files and ignore all other files.
Syntax
Nextflow configuration uses a similar syntax as Nextflow scripts. Configuration options must be set declaratively, but the value of a config option can be an arbitrary expression.
A config file may contain any number of assignments, blocks, and includes. You can add comments just like in scripts. A config assignment sets a config option to a value: The config option consists of an option name prefixed by any number of scopes. Scopes group related config options. See Configuration options for the full set of config options. The value is typically a literal value, such as a number, boolean, or string. However, you can use any expression: You can specify config options in the same scope as a block: As a result, deeply nested config options can be assigned in multiple ways. The following three assignments are equivalent: You can include configuration files in other configuration files with the Relative paths are resolved against the location of the including file. Config files should only be included at the top level or in a profile. This ensures the included config file is valid on its own and in the context in which it is included.Assignments
workDir = 'work'
docker.enabled = true
process.maxErrors = 10params.helper_file = "${projectDir}/assets/helper.txt"Blocks
// dot syntax
docker.enabled = true
docker.runOptions = '-u $(id -u):$(id -g)'
// block syntax
docker {
enabled = true
runOptions = '-u $(id -u):$(id -g)'
}executor.retry.maxAttempt = 5
executor {
retry.maxAttempt = 5
}
executor {
retry {
maxAttempt = 5
}
}Includes
includeConfig keyword:process.executor = 'sge'
process.queue = 'long'
process.memory = '10G'
includeConfig 'path/extra.config'
Constants and functions
The following constants are globally available in a Nextflow configuration file: Alias for The directory where the workflow was launched. The directory where the main script is located. The directory where the workflow work directory is located. Map of pipeline secrets. See Secrets for more information. The following functions are globally available in a Nextflow configuration file: Get the value of the environment variable with the specified name in the Nextflow launch environment.baseDir: PathprojectDir.launchDir: PathprojectDir: PathworkDir: Pathsecrets: Map<String,String>env( name: String ) -> String
Parameters
You can define pipeline parameters in config files using the params scope:
// dot syntax
params.max_cpus = 64
params.publish_mode = 'copy'
// block syntax
params {
max_cpus = 64
publish_mode = 'copy'
}
When including a config file, the included config is evaluated with the parameters defined before the include. The included config cannot see parameters defined after the include.
You should declare parameters in the config file only when other config options use them. When you use a parameter in the script, you should declare it there and override it in config profiles as needed:
// main.nf
params.input = null
// nextflow.config
params {
publish_mode = 'copy'
}
workflow.output.mode = params.publish_mode
profiles {
test {
params.input = "${projectDir}/test/input.txt"
}
}
See Pipeline parameters for information about how Nextflow resolves pipeline parameters at runtime.
Process configuration
You can use the process scope to specify process directives separately from the pipeline code.
For example:
process {
executor = 'sge'
queue = 'long'
clusterOptions = '-pe smp 10 -l virtual_free=64G,h_rt=30:00:00'
}
This configuration executes all processes using the SGE executor with the given settings. You can use the This configuration assigns 16 CPUs, 64 GB of memory, and the You can use the The When you include a process with an alias, selectors for the alias take priority over selectors for the original name. For example, if you define a process as You don't need to enclose label and process names in quotes unless they contain special characters ( You can use regular expressions in process selectors to apply the same configuration to all processes matching the pattern: This configuration requests 2 CPUs and 4 GB of memory for processes labeled as You can negate a selector expression by prefixing it with the special character This configuration sets 2 CPUs for processes labeled as Nextflow applies process configuration settings in the following order (from lowest to highest priority): For example: This configuration:Process selectors
withLabel selector to configure all processes annotated with a label:process {
withLabel: big_mem {
cpus = 16
memory = 64.GB
queue = 'long'
}
}long queue to all processes with the big_mem label.withName selector to configure a specific process by its name:process {
withName: hello {
cpus = 4
memory = 8.GB
queue = 'short'
}
}withName selector matches both:
hello and include it as sayHello, both withName: hello and withName: sayHello apply, with withName: sayHello taking priority.-, !, etc.) or are keywords or built-in type identifiers.Selector expressions
process {
withLabel: 'hello|bye' {
cpus = 2
memory = 4.GB
}
}hello or bye.!:process {
withLabel: 'hello' { cpus = 2 }
withLabel: '!hello' { cpus = 4 }
withName: '!align.*' { queue = 'long' }
}hello and 4 CPUs for all processes not labeled as hello. It also specifies the long queue for processes whose name does not start with align.Selector priority
withLabel selectors matching any of the process labelswithName selectors matching the process namewithName selectors matching the process included aliaswithName selectors matching the process fully qualified nameprocess {
cpus = 4
withLabel: hello { cpus = 8 }
withName: bye { cpus = 16 }
withName: 'aloha:bye' { cpus = 32 }
}
hello labelbye (or imported as bye)bye (or imported as bye) invoked by a workflow named aloha
Config profiles
Configuration files can define one or more profiles. A profile is a set of configuration settings that can be selected at runtime using the -profile command line option.
Configuration profiles are defined in the profiles scope. For example:
profiles {
standard {
process.executor = 'local'
}
cluster {
process.executor = 'sge'
process.queue = 'long'
process.memory = '10GB'
}
cloud {
process.executor = 'cirrus'
process.container = 'cbcrg/imagex'
docker.enabled = true
}
}
This configuration defines three profiles: standard, cluster, and cloud. Each profile provides a different configuration for a given execution environment. When you do not specify a profile, Nextflow uses the standard profile by default.
You can enable configuration profiles at runtime as a comma-separated list:
nextflow run main.nf -profile standard,cloud
Nextflow applies config profiles in the order in which they were defined in the config, regardless of the order you specify them on the command line.
When using the strict syntax, Nextflow applies profiles in the order you specify them on the command line.
Workflow handlers
Use a trace observer in a plugin to add custom workflow handlers to a pipeline via configuration.
You can define workflow event handlers in the config file:
workflow.onComplete = {
println "Pipeline complete"
println "Command line: $workflow.commandLine"
}
workflow.onError = {
println "Error: something went wrong"
}
This approach is useful for handling workflow events without modifying the pipeline code. See Workflow handlers for more information.