# Workflow Build Process

You can create workflows using the [web interface](https://documentation.dnanexus.com/developer/workflows/building-and-running-workflows) or using the CLI using tools provided by the [DNAnexus SDK](https://documentation.dnanexus.com/downloads). This page focuses on creating a workflow in a terminal. It walks you through important features of the DNAnexus workflow build infrastructure that help you build your workflows programmatically.

{% hint style="info" %}
The [DNAnexus SDK](https://documentation.dnanexus.com/downloads), `dx-toolkit`, is required to build workflows from JSON definitions.
{% endhint %}

For information on building Nextflow workflows, see [Running Nextflow Pipelines](https://documentation.dnanexus.com/user/running-apps-and-workflows/running-nextflow-pipelines).

## Workflow Directory Structure

DNAnexus workflows can be built using the [`dx build`](https://documentation.dnanexus.com/user/helpstrings-of-sdk-command-line-utilities#build) command, which takes the workflow JSON representation from your local workstation and uploads it to a [workflow object](https://documentation.dnanexus.com/developer/api/running-analyses/workflows-and-analyses) on the Platform. The DNAnexus SDK expects the workflow definition to reside in a directory with the following structure:

```
MyWorkflow
├── dxworkflow.json
└── Readme.md
```

### Workflow Metadata

The file `dxworkflow.json` is a DNAnexus workflow metadata file. If it is detected in the directory provided to `dx build`, the dx-toolkit attempts to build a workflow on the Platform by passing the workflow specification in `dxworkflow.json` to [`/workflow-xxxx/new`](https://documentation.dnanexus.com/api/running-analyses/workflows-and-analyses#api-method-workflow-new).

### Readme File

The `Readme.md` file, if present, is inserted into the `description` field of the workflow.

## Building a Workflow

Having placed the workflow metadata in `MyWorkflow`, you can load your workflow on the DNAnexus Platform:

```shell
dx build MyWorkflow
```

The built workflow is in a [closed](https://documentation.dnanexus.com/developer/api/data-object-lifecycle), immutable state. Adding `--keep-open` option keeps the workflow open allowing you to edit the workflow from the DNAnexus UI.

```shell
dx build MyWorkflow --keep-open
```

## Getting a Workflow

Similarly to apps and applets, developers can use the command [`dx get`](https://documentation.dnanexus.com/user/helpstrings-of-sdk-command-line-utilities#get) to download the workflow description from the Platform, for example:

```shell
dx get MyWorkflow
```

This creates a directory `MyWorkflow` (after the workflow's name) containing the workflow representation in the working directory. It can be used again to create a new workflow with `dx build`.
