Common Workflow Language User Guide


This guide will introduce you to writing tool wrappers and workflows using the Common Workflow Language (CWL). This guide describes the current stable specification, version 1.0.

Note: This document is a work in progress. Not all features are covered, yet.


A text editor

A CWL runner. It is recommended to start with the reference implementation. The full list of CWL runners is on the project homepage.


Setup Download files required for the lesson
00:00 1. Introduction What is Common Workflow Language?
Why might I want to learn to use CWL?
00:00 2. First Example How do I wrap a simple command line tool?
00:05 3. Essential Input Parameters How do I describe inputs to a command?
How do I specify the order in which inputs appear in a command?
00:15 4. Returning Output Files How do I describe outputs from a command?
00:25 5. Capturing Standard Output How do I capture a tool’s standard output stream?
00:35 6. Parameter References How do I reference input parameters in other fields?
00:45 7. Running Tools Inside Docker How do I run tools inside a Docker container?
00:55 8. Additional Arguments and Parameters How do I specify arguments that don’t require input values?
How do I refer to runtime parameters?
01:05 9. Array Inputs How do I specify input parameters in arrays?
01:15 10. Array Outputs How do I specify tool outputs as arrays?
01:25 11. Advanced Inputs How do I describe dependent and exclusive parameters?
01:35 12. Environment Variables How do I set the value of environment variables for a tool’s execution?
01:45 13. JavaScript Expressions What do I do when I want to create values dynamically and CWL doesn’t provide a built-in way of doing so?
01:55 14. Creating Files at Runtime How do I create required input files from input parameters at runtime?
How do I invoke a script rather than just a simple command line?
How do I make inputs available to my script?
02:05 15. Staging Input Files How do I stage input files in the working directory?
02:15 16. File Formats How can I allow type-checking of input and output files?
02:25 17. Metadata and Authorship How do I provide information for people to cite my tool descriptions?
02:35 18. Custom Types How do I create and import my own custom types into a CWL description?
02:45 19. Specifying Software Requirements How do I specify requirements/dependencies for a job?
What level of detail should I provide for a software requirement?
02:55 20. Writing Workflows How do I connect tools together into a workflow?
03:05 21. Nested Workflows How do I connect multiple workflows together?
03:15 22. Scattering Workflows How do I run tools or workflows in parallel?
03:25 Finish

The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.