Skip to main content
Version: 2.0

CLI

The Durable Workflow CLI (dw) is a shell interface to the standalone server. It lets operators start, list, signal, cancel, and terminate workflows, manage schedules, inspect task queues, and check server health — all from the command line.

The same CLI works against any Durable Workflow server, regardless of which language your workflows are written in.

Install

curl -fsSL https://durable-workflow.com/install.sh | sh

Verify

dw --version

Configure

Point the CLI at your server:

export DURABLE_WORKFLOW_SERVER_URL=http://localhost:8080
export DURABLE_WORKFLOW_AUTH_TOKEN=your-token
export DURABLE_WORKFLOW_NAMESPACE=default

Or pass them per-command:

dw --server=http://localhost:8080 --token=your-token workflow:list

Commands

Server

dw server:health          # Check server health
dw server:info # Show server version, capabilities, and worker fleet

Workflows

dw workflow:list                                          # List workflows
dw workflow:start --type=MyWorkflow --input='["arg1"]' # Start a workflow
dw workflow:describe <workflow-id> # Describe a workflow
dw workflow:signal <workflow-id> <signal-name> # Send a signal
dw workflow:query <workflow-id> <query-name> # Run a query
dw workflow:cancel <workflow-id> # Request cancellation
dw workflow:terminate <workflow-id> # Force terminate
dw workflow:history <workflow-id> # Show run history

Schedules

dw schedule:list                          # List schedules
dw schedule:create --type=MyWorkflow \
--cron='0 * * * *' # Create hourly schedule
dw schedule:describe <schedule-id> # Describe a schedule
dw schedule:pause <schedule-id> # Pause a schedule
dw schedule:resume <schedule-id> # Resume a schedule
dw schedule:trigger <schedule-id> # Trigger immediately
dw schedule:delete <schedule-id> # Delete a schedule

Workers and Task Queues

dw worker:list                    # List registered workers
dw worker:describe <worker-id> # Describe a worker
dw task-queue:list # List active task queues
dw task-queue:describe <queue> # Describe a task queue

Namespaces

dw namespace:list                             # List namespaces
dw namespace:create --name=production # Create a namespace
dw namespace:describe <namespace> # Describe a namespace

Search Attributes

dw search-attribute:list                                  # List search attributes
dw search-attribute:create --name=env --type=keyword # Register an attribute

Exit Codes

The CLI uses a stable exit-code policy so scripts and CI pipelines can react to specific failure modes without parsing stderr. Values follow Symfony Console's canonical 0/1/2 for success / failure / usage, and extend from there.

CodeNameMeaning
0SUCCESSOperation completed successfully.
1FAILUREGeneric failure — command ran but did not succeed.
2INVALIDInvalid usage — bad arguments, unknown options, or local validation. Also returned for HTTP 4xx responses that are not covered below (e.g. 400, 422).
3NETWORKCould not reach the server (connection refused, DNS failure, TLS handshake failure, transport error).
4AUTHAuthentication or authorization failure. Returned for HTTP 401 and 403.
5NOT_FOUNDResource not found. Returned for HTTP 404.
6SERVERServer error. Returned for HTTP 5xx.
7TIMEOUTRequest timed out before the server responded. Also returned for HTTP 408.

Example:

dw workflow:describe chk-does-not-exist
echo $? # 5 (NOT_FOUND)

dw server:health --server=http://unreachable:9999
echo $? # 3 (NETWORK)

The canonical source is DurableWorkflow\Cli\Support\ExitCode in the CLI repository.

Reference

See the CLI repository README for the full command reference, advanced flags, and release notes.