Sprocket. The Bioinformatics Workflow Engine.
Sprocket is a high-performance, modern, and open-source workflow engine for bioinformatics. Create, test, and run your analyses locally, then seamlessly move to HPC or the cloud to handle thousands of parallel workflows.
- Writewdl
version 1.3 task say_hello { input { String greeting } command <<< echo "~{greeting}, world!" >>> output { String out = read_string(stdout()) } requirements { container: "ubuntu:latest" } } - Runbash
$ sprocket run example.wdl --target say_hello greeting="Hello" { "say_hello.out": "Hello, world!" }
One tool from first line to full scale
Sprocket covers the whole life of a WDL workflow. Follow one through it, from the first check to the cluster.
Check
Validate every document before it runs.
Read about check and lintsprocket lintpoints to the exact line of each problem and suggests a fix. Invalid WDL exits with a non-zero code, so the same check can guard your CI, andsprocket formatkeeps every file in one style.$ sprocket lint example.wdl note[ContainerUri]: container URI uses a mutable tag ┌─ example.wdl:18:20 │ 18 │ container: "ubuntu:latest" │ ^^^^^^^^^^^^^^^ │ = fix: replace the mutable tag with its SHA256 equivalent warning[UnusedInput]: unused input `color` ┌─ example.wdl:30:16 │ 30 │ String color = "green" │ ^^^^^
Edit
See the same checks while you write.
The Visual Studio Code extension runs
Set up the editor extensionsprocket analyzer, Sprocket's language server, and lists validation and lint problems as you edit. It also adds WDL syntax highlighting and snippets. For Neovim, usesprocket.nvim.example.wdl~/Desktop4 problems- Sprocket(UnusedInput)[Ln 30, Col 16]
- Sprocket(MetaSections)[Ln 3, Col 6]
example.wdl[Ln 3, Col 6]: fix: add both the `meta` and `parameter_meta` sections
- Sprocket(ContainerUri)[Ln 18, Col 20]
example.wdl[Ln 18, Col 20]: fix: replace the mutable tag with its SHA256 equivalent (e.g., `ubuntu@sha256:foobar` instead of `ubuntu:latest`)
- Sprocket(MetaSections)[Ln 22, Col 10]
example.wdl[Ln 22, Col 10]: fix: add both the `meta` and `parameter_meta` sections
Run locally
Develop on your own machine first.
Write, run, and debug a workflow on your laptop before it goes anywhere near a cluster.
sprocket inputswrites a template of the inputs a workflow expects,sprocket validatechecks your values, andsprocket runexecutes it right there with the local Docker backend.macOS
Linux
Windows
$ sprocket run example.wdl --target main name="World" { "main.messages": [ "Hello, World!", "Hallo, World!", "Hej, World!" ] }
Scale
Move to a cluster by changing configuration, not code.
Point
sprocket.tomlat a Slurm or LSF cluster with Apptainer, or at a Task Execution Service (TES) server. Sprocket moves inputs and outputs to and from cloud storage as the workflow needs them. It is built toward a target of 20,000+ concurrent jobs.Amazon S3
Azure Blob Storage
Google Cloud Storage
# Set the default backend to Slurm + Apptainer. [run.backends.default] type = "slurm_apptainer" # The Slurm partition used by default for task execution. default_slurm_partition.name = "gpu" default_slurm_partition.max_cpu_per_task = 64 default_slurm_partition.max_memory_per_task = "96 GB"
The Slurm + Apptainer backend is experimental.
Reproduce
Every run leaves a complete record.
Each run gets its own directory with its inputs, outputs, logs, and every task attempt, and a SQLite database keeps the history. Turn on the call cache and a rerun after a failure reuses the tasks that already succeeded.
How provenance tracking works./out/ ├── sprocket.db # SQLite provenance database ├── runs/ │ └── main/ │ ├── <timestamp>/ │ │ ├── inputs.json │ │ ├── outputs.json │ │ ├── output.log │ │ └── calls/ # One directory per task call │ └── _latest -> <timestamp>/ └── index/ # Optional output indexing
[run.task] cache = "on"
Extend
Use our supporting tools, or build your own.
Lint every pull request with the Sprocket GitHub Action. To build your own tooling, analyze WDL from Python with
Start with the Python bindingssprocket-bio, use thewdlcrate in Rust, or submit runs to the experimental Sprocket server over its REST API.steps: # Lint every WDL document in the repository. - uses: stjude-rust-labs/sprocket-action@main with: action: lint except: TrailingComma,ContainerUri
How Sprocket Powers Your Workflows
Sprocket is built for speed and efficiency, orchestrating complex WDL-based workflows with the power of high-performance computing.
Explore documentationJoin Our Community
Connect with fellow researchers and developers, stay updated on the latest features, and share ideas to push the boundaries of bioinformatics.
Join us on Slack