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.
| Code | Name | Meaning |
|---|---|---|
0 | SUCCESS | Operation completed successfully. |
1 | FAILURE | Generic failure — command ran but did not succeed. |
2 | INVALID | Invalid usage — bad arguments, unknown options, or local validation. Also returned for HTTP 4xx responses that are not covered below (e.g. 400, 422). |
3 | NETWORK | Could not reach the server (connection refused, DNS failure, TLS handshake failure, transport error). |
4 | AUTH | Authentication or authorization failure. Returned for HTTP 401 and 403. |
5 | NOT_FOUND | Resource not found. Returned for HTTP 404. |
6 | SERVER | Server error. Returned for HTTP 5xx. |
7 | TIMEOUT | Request 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.