Nextflow documentation is migrating

Nextflow documentation is being migrated to docs.seqera.io/nextflow. This site will remain available throughout the migration.

nextflow.script

The nextflow.script package implements the parsing and execution of Nextflow scripts.

Class Diagram

        classDiagram
    %%
    %% nextflow.script
    %%
    CmdRun --> ScriptRunner : run

    class ScriptRunner {
        scriptFile : ScriptFile
        session : Session
    }
    ScriptRunner --* ScriptFile
    ScriptRunner --> ScriptParser : execute
    ScriptParser --> BaseScript : parse

    class ScriptFile {
        source : Path
        main : Path
        repository : String
        revisionInfo : AssetManager.RevisionInfo
        localPath : Path
        projectName : String
    }

    class BaseScript {
        meta : ScriptMeta
        entryFlow : WorkflowDef
    }
    BaseScript --* ScriptBinding
    BaseScript --* ScriptMeta
    BaseScript --> IncludeDef : include

    IncludeDef --> ScriptParser : load0

    class ScriptBinding {
        scriptPath : Path
        args : List~String~
        params : ParamsMap
        configEnv : Map
        entryName : String
    }

    class ScriptMeta {
        scriptPath : Path
        definitions : Map
        imports : Map
        module : boolean
    }
    ScriptMeta "1" --* "*" ComponentDef : definitions
    ScriptMeta "1" --* "*" ComponentDef : imports

    ComponentDef <|-- FunctionDef
    ComponentDef <|-- ProcessDef
    ComponentDef <|-- WorkflowDef

    class FunctionDef {
        target : Object
        name : String
        alias : String
    }

    class ProcessDef {
        processName : String
        simpleName : String
        baseName : String
        rawBody : Closure~BodyDef~
    }
    ProcessDef --* ProcessConfig
    ProcessDef --* BodyDef
    ProcessDef --* ChannelOut

    class WorkflowDef {
        name : String
        body : BodyDef
        declaredInputs : List~String~
        declaredOutputs : List~String~
        variableNames : Set~String~
    }
    WorkflowDef --* BodyDef
    WorkflowDef --* WorkflowBinding
    WorkflowDef --* ChannelOut

    class ProcessConfig {
        configProperties : Map
        inputs : InputsList
        outputs : OutputsList
    }
    ProcessConfig --* InputsList
    ProcessConfig --* OutputsList

    class BodyDef {
        closure : Closure
        source : String
        type : ScriptType
        isShell : boolean
    }

    class ChannelOut {
        target : List~DataflowWriteChannel~
        channels : Map
    }

    class WorkflowBinding {
        vars : Map
    }

    class InputsList {
        target : List~InParam~
    }
    InputsList "1" --* "*" InParam

    class OutputsList {
        target : List~OutParam~
    }
    OutputsList "1" --* "*" OutParam

    %% InParam <|-- BaseInParam
    %% BaseInParam <|-- EachInParam
    %% BaseInParam <|-- EnvInParam
    %% BaseInParam <|-- FileInParam
    %% BaseInParam <|-- StdInParam
    %% BaseInParam <|-- TupleInParam
    %% BaseInParam <|-- ValueInParam

    %% OutParam <|-- BaseOutParam
    %% BaseOutParam <|-- EachOutParam
    %% BaseOutParam <|-- EnvOutParam
    %% BaseOutParam <|-- FileOutParam
    %% BaseOutParam <|-- StdOutParam
    %% BaseOutParam <|-- TupleOutParam
    %% BaseOutParam <|-- ValueOutParam

    

Note

Some classes may be excluded from the above diagram for brevity.

Notes

The execution of a Nextflow pipeline occurs in two phases. In the first phase, Nextflow parses and runs the script (using the language extensions in nextflow.ast and nextflow.extension), which produces the workflow DAG. In the second phase, Nextflow executes the workflow.

Note

In DSL1, there was no separation between workflow construction and execution – dataflow operators were executed as soon as they were constructed. DSL2 introduced lazy execution in order to separate process definition from execution, and thereby facilitate subworkflows and modules.