> For the complete documentation index, see [llms.txt](https://help.fovus.co/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.fovus.co/docs/pipeline/miniwdl/miniwdl-quickstart.md).

# Quickstart

Run your first Fovus pipeline from a WDL workflow using miniwdl-fovus.

This walkthrough submits a hello-world WDL workflow using the `miniwdl-fovus` package, which executes each WDL task as a Fovus job instead of a local Docker container. You write two files locally, then run one command; `miniwdl-fovus run` handles authentication, storage mounting, and Fovus pipeline creation for you.

## What you'll build

A folder with two files:

* `hello.wdl` — a single-task WDL workflow, with Fovus Tokens wired in as workflow inputs
* `inputs.json` — Cromwell-style input JSON, including the Fovus Token values from `hello.wdl`

## Before you begin

* Python 3.9+ and `pip`, on a host that can FUSE-mount the Fovus shared filesystem
* Access to a Fovus workspace, with the workspace's storage mount already provisioned (or provisionable via `fovus storage mount`)
* A local folder for the two files

{% hint style="warning" %}
Do not co-install stock `miniwdl`. `miniwdl-fovus` depends on `miniwdl-fovus-runtime`, a Fovus-patched build of miniwdl (distribution renamed, import package still `WDL`). Installing plain `miniwdl` in the same environment collides on the `WDL` package.
{% endhint %}

***

{% stepper %}
{% step %}

#### Install miniwdl-fovus

```bash
pip install miniwdl-fovus
fovus auth login
```

`pip install miniwdl-fovus` pulls in `miniwdl-fovus-runtime` (the patched miniwdl) and the official `fovus` CLI as dependencies. `fovus auth login` is a one-time interactive step to authenticate the CLI against your Fovus account.
{% endstep %}

{% step %}

#### Add hello.wdl

Create `hello.wdl` in your pipeline folder. Resource requests use the same **Fovus Tokens** as `process{}` attributes — `benchmarkingProfileName`, `minvCpu`, `maxvCpu`, `minvCpuMemGiB`, `walltimeHours`, and so on — declared as keys in `runtime{}` and wired to workflow inputs so `inputs.json` can override them without touching the WDL file:

```wdl
version 1.0

workflow hello_fovus {
    input {
        String name

        # Fovus Tokens, exposed as workflow inputs so a
        # run can override them without editing this file.
        String benchmarkingProfileName = "Default CPU"
        Int minvCpu = 1
        Int maxvCpu = 2
        Int minvCpuMemGiB = 4
        Int walltimeHours = 1
    }

    call greet {
        input:
            name = name,
            benchmarkingProfileName = benchmarkingProfileName,
            minvCpu = minvCpu,
            maxvCpu = maxvCpu,
            minvCpuMemGiB = minvCpuMemGiB,
            walltimeHours = walltimeHours,
    }

    output {
        File greeting = greet.greeting
    }
}

task greet {
    input {
        String name
        String benchmarkingProfileName
        Int minvCpu
        Int maxvCpu
        Int minvCpuMemGiB
        Int walltimeHours
    }

    command <<<
        set -euo pipefail
        echo "Hello, ~{name}! This ran on Fovus." \
            > greeting.txt
    >>>

    output {
        File greeting = "greeting.txt"
    }

    runtime {
        docker: "ubuntu:22.04"
        # --- Fovus Tokens, injected from the workflow inputs above ---
        benchmarkingProfileName: benchmarkingProfileName
        minvCpu: minvCpu
        maxvCpu: maxvCpu
        minvCpuMemGiB: minvCpuMemGiB
        walltimeHours: walltimeHours
    }
}
```

For the full list of Fovus Tokens and the Fovus job-config field each one maps to, see the [miniWDL configuration reference](/docs/pipeline/miniwdl/miniwdl-config-reference.md).
{% endstep %}

{% step %}

#### Add inputs.json

Create `inputs.json` in the same folder:

```json
{
  "hello_fovus.name": "World",

  "hello_fovus.benchmarkingProfileName": "Default CPU",
  "hello_fovus.minvCpu": 2,
  "hello_fovus.maxvCpu": 4,
  "hello_fovus.minvCpuMemGiB": 8,
  "hello_fovus.walltimeHours": 1
}
```

Bump `minvCpu` / `maxvCpu` / `minvCpuMemGiB` per run — e.g. a small job for a smoke test, a larger one for production — without touching `hello.wdl`. Any input you omit here falls back to the WDL-declared default (`"Default CPU"`, 1, 2, 4, 1).
{% endstep %}

{% step %}

#### Submit

```bash
miniwdl-fovus run hello.wdl -i inputs.json --pipeline-name hello-world
```

The wrapper verifies `fovus auth`, mounts Fovus storage if needed, creates one Fovus pipeline for the run, and execs `miniwdl run` with the right config and run directory.

On success, `greeting.txt` is written under the run directory on the Fovus storage mount, and the run's pipeline on app.fovus.co shows one job (`greet`) that completed.

{% hint style="info" %}
Once storage is mounted and auth is set up, you can skip the wrapper and drive `miniwdl run` directly — see [Submit a pipeline (miniWDL)](/docs/pipeline/miniwdl/miniwdl-submission/local-manager.md).
{% endhint %}
{% endstep %}
{% endstepper %}

***

## What's next?

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><h4><i class="fa-chart-line" style="color:$primary;">:chart-line:</i> Monitor your pipeline</h4></td><td>Review status, jobs, files, and live output on the pipeline detail page.</td><td><a href="/docs/pipeline/monitor-manage/pipeline-monitoring.md">Monitor your pipeline</a></td></tr><tr><td><h4><i class="fa-paper-plane" style="color:$primary;">:paper-plane:</i> Submit a pipeline (miniWDL)</h4></td><td>Prerequisites, storage mounting, and driving miniwdl directly for real workflows.</td><td><a href="/docs/pipeline/miniwdl/miniwdl-submission.md">Submit a pipeline</a></td></tr><tr><td><h4><i class="fa-book" style="color:$primary;">:book:</i> miniWDL configuration reference</h4></td><td>Look up every Fovus Token runtime attribute and cfg key.</td><td><a href="/docs/pipeline/miniwdl/miniwdl-config-reference.md">miniWDL configuration reference</a></td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.fovus.co/docs/pipeline/miniwdl/miniwdl-quickstart.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
