
# `nextflow.cli`

The `nextflow.cli` package implements the command line interface.

## Class Diagram

```mermaid
classDiagram
    %%
    %% nextflow.cli
    %%
    class Launcher {
        cliOptions : CliOptions
        command : CmdBase
    } 
    Launcher --* CliOptions
    Launcher --* CmdBase

    %% CmdBase <|-- CmdClean
    %% CmdBase <|-- CmdClone
    %% CmdBase <|-- CmdConfig
    CmdBase <|-- CmdConsole
    %% CmdBase <|-- CmdDrop
    %% CmdBase <|-- CmdFs
    CmdBase <|-- CmdHelp
    CmdBase <|-- CmdInfo
    %% CmdBase <|-- CmdKubeRun
    %% CmdBase <|-- CmdList
    %% CmdBase <|-- CmdLog
    %% CmdBase <|-- CmdNode
    %% CmdBase <|-- CmdPlugin
    %% CmdBase <|-- CmdPull
    CmdBase <|-- CmdRun
    %% CmdBase <|-- CmdSecret
    %% CmdBase <|-- CmdSelfUpdate
    %% CmdBase <|-- CmdView
```

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

## Notes

The `Launcher` class is the entrypoint for Nextflow. It uses [JCommander](https://jcommander.org/) to parse the command-line arguments. Additionally, there is a class for each subcommand which implements the application logic of that command. By far the most complex command is `CmdRun`.
