Durable Workflow Server is the self-hosted, language-neutral runtime for durable workflows. It records workflow state and history, matches tasks to workers, fires timers and schedules, manages namespaces, and resumes execution after process or infrastructure restarts.
Applications connect through first-party PHP, Python, and Rust SDKs. Workers run in your application environment and can scale independently from Server. For a managed runtime, use Durable Workflow Cloud. Laravel applications can also run the engine directly in embedded mode.
Documentation | Sample App | CLI | Waterline
The published Compose stack starts Server with MySQL, Redis, a queue worker, and the scheduler. It bootstraps the database and the default namespace before accepting traffic.
curl -fsSLO https://raw.githubusercontent.com/durable-workflow/server/main/docker-compose.published.yml
export DW_AUTH_TOKEN=dev-token
docker compose -f docker-compose.published.yml up -d --wait
curl http://localhost:8080/api/health
curl http://localhost:8080/api/ready
curl -H "Authorization: Bearer $DW_AUTH_TOKEN" \
http://localhost:8080/api/cluster/infoThis development configuration uses a single compatibility token. Production deployments should use role-scoped worker, operator, and administrator credentials and pin the Server image by version or digest. See the self-hosting reference for SQLite, production Compose, authentication, backup, upgrade, API, and configuration guidance.
Install the current CLI for server administration and workflow inspection:
curl -fsSL https://durable-workflow.com/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"| Language | Guide and API reference | Package |
|---|---|---|
| PHP | php.durable-workflow.com | durable-workflow/sdk |
| Python | python.durable-workflow.com | durable-workflow |
| Rust | rust.durable-workflow.com | durable-workflow |
SDK clients start and inspect workflows. SDK workers register workflow and activity types, poll named task queues, execute user code, and report results to Server. Type names and portable Avro values form the cross-language contract, so a workflow in one language can dispatch activities to another.
| Deployment | Use it for | Guide |
|---|---|---|
| SQLite containers | Local evaluation with minimal infrastructure | Official image and SQLite |
| Compose with MySQL and Redis | Development and single-host production | Compose deployment |
| Small cluster | Multiple API nodes with external persistence | Small-cluster contract |
| Kubernetes | Independently scalable API and worker pools | Helm chart |
| Active/passive regions | Operator-controlled regional failover | Multi-region contract |
Server supports SQLite for a single-node runtime and MySQL or PostgreSQL for shared durable state. Multi-node deployments use shared Redis for queue and coordination state. The database remains authoritative for workflow history.
- Durable workflow and activity execution with retries, timeouts, and heartbeats
- Signals, queries, updates, timers, schedules, and child workflows
- Search attributes, memo, history export, and namespace retention policies
- Worker sessions, task-queue routing, build rollout controls, and backpressure
- Role-scoped authentication and machine-readable capability discovery
- External payload storage for large encoded values
- Waterline-compatible operational APIs and Prometheus metrics
- Self-hosting, HTTP API, authentication, and configuration
- Control-plane OpenAPI contract
- Worker protocol OpenAPI contract
- Worker stream AsyncAPI contract
- Capacity benchmark suite
- Bounded-growth policy
- External payload storage contract
- Helm upgrade guide
git clone https://github.com/durable-workflow/server.git
cd server
cp .env.example .env
docker compose up -d --waitRepository checks and focused test commands are documented in CONTRIBUTING.md. Bugs and feature requests belong in GitHub Issues.
Durable Workflow Server is released under the MIT License.