@@ -9456,166 +9456,6 @@ dw task-queue:describe default
94569456
94579457See the [CLI repository README](https://github.com/durable-workflow/cli#commands) for the full command reference.
94589458
9459- # Version Compatibility
9460-
9461- This page documents version compatibility across Durable Workflow components. All components validate version compatibility at runtime and provide clear error messages when incompatible versions are detected.
9462-
9463- ## Component Versions
9464-
9465- | Component | Current Version | Notes |
9466- |-----------|----------------|-------|
9467- | Workflow Package (PHP) | 1.0.75 (v1), 2.0.0 (v2) | Core workflow engine |
9468- | Standalone Server | 2.0.0 | Language-neutral HTTP server |
9469- | CLI | 0.1.0 | Command-line interface |
9470- | Python SDK | 0.1.0 | Python client and worker |
9471- | Waterline | 1.0.16 (v1), 2.0.0 (v2) | Observability UI |
9472-
9473- ## Compatibility Matrix
9474-
9475- ### Server ↔ SDK/CLI
9476-
9477- | Server Version | CLI 0.1.x | Python SDK 0.1.x | PHP Workflow 2.0.x |
9478- |----------------|-----------|------------------|-------------------|
9479- | 2.0.x (stable) | ✅ Compatible | ✅ Compatible | ✅ Compatible |
9480- | 1.x | ❌ Skipped | ❌ Skipped | ❌ Skipped |
9481- | 3.x+ (future) | ❌ Breaking | ❌ Breaking | ❌ Breaking |
9482-
9483- **Version 1.x**: Intentionally skipped. The project moved directly to 2.x (stable).
9484-
9485- ### Workflow Package ↔ Waterline
9486-
9487- | Workflow Version | Waterline 1.x | Waterline 2.x |
9488- |------------------|---------------|---------------|
9489- | 1.x | ✅ Compatible | ❌ Not compatible |
9490- | 2.x | ❌ Not compatible | ✅ Compatible |
9491-
9492- Waterline versions must match the workflow package major version.
9493-
9494- ## Runtime Validation
9495-
9496- ### CLI
9497-
9498- The CLI validates server version on first invocation per session:
9499-
9500- ```bash
9501- $ dw server:health
9502- Server version 3.0.0 is incompatible with dw CLI 0.1.x (requires server 2.x).
9503- Upgrade the server or use a compatible CLI version.
9504- ```
9505-
9506- Version checks are cached per CLI invocation. Starting a new CLI command re-validates.
9507-
9508- ### Python SDK
9509-
9510- The Python SDK validates server version when workers register:
9511-
9512- ```python
9513- from durable_workflow import Client, Worker
9514-
9515- client = Client("http://server:8080", token="...", namespace="default")
9516- worker = Worker(client, task_queue="default", workflows=[...])
9517-
9518- await worker.run() # Validates server version before registering
9519- ```
9520-
9521- If incompatible:
9522-
9523- ```
9524- RuntimeError: Server version 3.0.0 is incompatible with sdk-python 0.1.x
9525- (requires server 2.x). Upgrade the server or use a compatible SDK version.
9526- ```
9527-
9528- ### Server
9529-
9530- The server returns its version and supported SDK versions in `GET /api/cluster/info`:
9531-
9532- ```json
9533- {
9534- "version": "2.0.0",
9535- "supported_sdk_versions": {
9536- "php": ">=1.0",
9537- "python": ">=0.1"
9538- }
9539- }
9540- ```
9541-
9542- Clients and workers query this endpoint to validate compatibility.
9543-
9544- ## Upgrading
9545-
9546- ### Minor Version Upgrades (0.1.8 → 0.1.9, 2.0.0 → 2.0.1)
9547-
9548- Minor versions are backward-compatible within the same major version:
9549-
9550- - **Server**: Upgrade without client changes
9551- - **CLI**: Upgrade independently
9552- - **Python SDK**: Upgrade independently
9553-
9554- Example: Server 2.0.1 works with CLI 0.1.0 and Python SDK 0.1.0.
9555-
9556- ### Major Version Upgrades (2.x → 3.x)
9557-
9558- Major version changes may introduce breaking changes:
9559-
9560- 1. **Check compatibility matrix** (above) for supported version combinations
9561- 2. **Upgrade server first**: Deploy new server version
9562- 3. **Validate with one client**: Test one CLI command or SDK worker
9563- 4. **Upgrade remaining clients**: CLI, SDK, workers
9564-
9565- **Future major versions (2.x → 3.x)**: Will require client updates. Version validation will catch incompatibilities and provide clear error messages.
9566-
9567- ## Version Negotiation Protocol
9568-
9569- All client-server communication includes protocol version headers:
9570-
9571- **Control plane** (workflow start, describe, signal, query, update):
9572- ```
9573- X-Durable-Workflow-Control-Plane-Version: 2
9574- ```
9575-
9576- **Worker protocol** (task polling, completion):
9577- ```
9578- X-Durable-Workflow-Protocol-Version: 1.0
9579- ```
9580-
9581- The server validates these headers and rejects requests with missing or incompatible versions.
9582-
9583- ## Troubleshooting
9584-
9585- ### "Server version X is incompatible with..."
9586-
9587- **Cause**: Client and server major versions don't match.
9588-
9589- **Fix**:
9590- 1. Check the compatibility matrix above
9591- 2. Upgrade server or client to compatible versions
9592- 3. If server is 2.x and client reports incompatibility, file a bug
9593-
9594- ### "Missing X-Durable-Workflow-Protocol-Version header"
9595-
9596- **Cause**: Old client not sending protocol version headers.
9597-
9598- **Fix**: Upgrade CLI to 0.1.0+ or Python SDK to 0.1.0+.
9599-
9600- ### "Control plane version mismatch"
9601-
9602- **Cause**: Server and client disagree on control-plane protocol version.
9603-
9604- **Fix**: Ensure server is 2.x and client is sending version 2 header.
9605-
9606- ## Version History
9607-
9608- | Date | Server | CLI | Python SDK | Workflow | Waterline | Notes |
9609- |------|--------|-----|------------|----------|-----------|-------|
9610- | 2026-04-15 | 2.0.0 | 0.1.0 | 0.1.0 | 2.0.0 | 2.0.0 | Stable release |
9611-
9612- ## See Also
9613-
9614- - [Server Setup](/docs/2.0/server-setup) — Deploying the standalone server
9615- - [Python SDK](/docs/2.0/sdks/python) — Python client and worker
9616- - [CLI](/docs/2.0/cli) — Command-line interface
9617- - [Migration Guide](/docs/2.0/migration) — Migrating from v1 to v2
9618-
96199459# Server
96209460
96219461The Durable Workflow server is a standalone, language-neutral workflow orchestration service. It exposes the same durable execution engine as the PHP package over HTTP, letting you write workflows in Python, PHP, or any language that speaks HTTP.
@@ -10622,3 +10462,163 @@ python my_worker.py
1062210462
1062310463The server runs on `http://localhost:8080` by default.
1062410464
10465+ # Version Compatibility
10466+
10467+ This page documents version compatibility across Durable Workflow components. All components validate version compatibility at runtime and provide clear error messages when incompatible versions are detected.
10468+
10469+ ## Component Versions
10470+
10471+ | Component | Current Version | Notes |
10472+ |-----------|----------------|-------|
10473+ | Workflow Package (PHP) | 1.0.75 (v1), 2.0.0 (v2) | Core workflow engine |
10474+ | Standalone Server | 2.0.0 | Language-neutral HTTP server |
10475+ | CLI | 0.1.0 | Command-line interface |
10476+ | Python SDK | 0.1.0 | Python client and worker |
10477+ | Waterline | 1.0.16 (v1), 2.0.0 (v2) | Observability UI |
10478+
10479+ ## Compatibility Matrix
10480+
10481+ ### Server ↔ SDK/CLI
10482+
10483+ | Server Version | CLI 0.1.x | Python SDK 0.1.x | PHP Workflow 2.0.x |
10484+ |----------------|-----------|------------------|-------------------|
10485+ | 2.0.x (stable) | ✅ Compatible | ✅ Compatible | ✅ Compatible |
10486+ | 1.x | ❌ Skipped | ❌ Skipped | ❌ Skipped |
10487+ | 3.x+ (future) | ❌ Breaking | ❌ Breaking | ❌ Breaking |
10488+
10489+ **Version 1.x**: Intentionally skipped. The project moved directly to 2.x (stable).
10490+
10491+ ### Workflow Package ↔ Waterline
10492+
10493+ | Workflow Version | Waterline 1.x | Waterline 2.x |
10494+ |------------------|---------------|---------------|
10495+ | 1.x | ✅ Compatible | ❌ Not compatible |
10496+ | 2.x | ❌ Not compatible | ✅ Compatible |
10497+
10498+ Waterline versions must match the workflow package major version.
10499+
10500+ ## Runtime Validation
10501+
10502+ ### CLI
10503+
10504+ The CLI validates server version on first invocation per session:
10505+
10506+ ```bash
10507+ $ dw server:health
10508+ Server version 3.0.0 is incompatible with dw CLI 0.1.x (requires server 2.x).
10509+ Upgrade the server or use a compatible CLI version.
10510+ ```
10511+
10512+ Version checks are cached per CLI invocation. Starting a new CLI command re-validates.
10513+
10514+ ### Python SDK
10515+
10516+ The Python SDK validates server version when workers register:
10517+
10518+ ```python
10519+ from durable_workflow import Client, Worker
10520+
10521+ client = Client("http://server:8080", token="...", namespace="default")
10522+ worker = Worker(client, task_queue="default", workflows=[...])
10523+
10524+ await worker.run() # Validates server version before registering
10525+ ```
10526+
10527+ If incompatible:
10528+
10529+ ```
10530+ RuntimeError: Server version 3.0.0 is incompatible with sdk-python 0.1.x
10531+ (requires server 2.x). Upgrade the server or use a compatible SDK version.
10532+ ```
10533+
10534+ ### Server
10535+
10536+ The server returns its version and supported SDK versions in `GET /api/cluster/info`:
10537+
10538+ ```json
10539+ {
10540+ "version": "2.0.0",
10541+ "supported_sdk_versions": {
10542+ "php": ">=1.0",
10543+ "python": ">=0.1"
10544+ }
10545+ }
10546+ ```
10547+
10548+ Clients and workers query this endpoint to validate compatibility.
10549+
10550+ ## Upgrading
10551+
10552+ ### Minor Version Upgrades (0.1.8 → 0.1.9, 2.0.0 → 2.0.1)
10553+
10554+ Minor versions are backward-compatible within the same major version:
10555+
10556+ - **Server**: Upgrade without client changes
10557+ - **CLI**: Upgrade independently
10558+ - **Python SDK**: Upgrade independently
10559+
10560+ Example: Server 2.0.1 works with CLI 0.1.0 and Python SDK 0.1.0.
10561+
10562+ ### Major Version Upgrades (2.x → 3.x)
10563+
10564+ Major version changes may introduce breaking changes:
10565+
10566+ 1. **Check compatibility matrix** (above) for supported version combinations
10567+ 2. **Upgrade server first**: Deploy new server version
10568+ 3. **Validate with one client**: Test one CLI command or SDK worker
10569+ 4. **Upgrade remaining clients**: CLI, SDK, workers
10570+
10571+ **Future major versions (2.x → 3.x)**: Will require client updates. Version validation will catch incompatibilities and provide clear error messages.
10572+
10573+ ## Version Negotiation Protocol
10574+
10575+ All client-server communication includes protocol version headers:
10576+
10577+ **Control plane** (workflow start, describe, signal, query, update):
10578+ ```
10579+ X-Durable-Workflow-Control-Plane-Version: 2
10580+ ```
10581+
10582+ **Worker protocol** (task polling, completion):
10583+ ```
10584+ X-Durable-Workflow-Protocol-Version: 1.0
10585+ ```
10586+
10587+ The server validates these headers and rejects requests with missing or incompatible versions.
10588+
10589+ ## Troubleshooting
10590+
10591+ ### "Server version X is incompatible with..."
10592+
10593+ **Cause**: Client and server major versions don't match.
10594+
10595+ **Fix**:
10596+ 1. Check the compatibility matrix above
10597+ 2. Upgrade server or client to compatible versions
10598+ 3. If server is 2.x and client reports incompatibility, file a bug
10599+
10600+ ### "Missing X-Durable-Workflow-Protocol-Version header"
10601+
10602+ **Cause**: Old client not sending protocol version headers.
10603+
10604+ **Fix**: Upgrade CLI to 0.1.0+ or Python SDK to 0.1.0+.
10605+
10606+ ### "Control plane version mismatch"
10607+
10608+ **Cause**: Server and client disagree on control-plane protocol version.
10609+
10610+ **Fix**: Ensure server is 2.x and client is sending version 2 header.
10611+
10612+ ## Version History
10613+
10614+ | Date | Server | CLI | Python SDK | Workflow | Waterline | Notes |
10615+ |------|--------|-----|------------|----------|-----------|-------|
10616+ | 2026-04-15 | 2.0.0 | 0.1.0 | 0.1.0 | 2.0.0 | 2.0.0 | Stable release |
10617+
10618+ ## See Also
10619+
10620+ - [Server Setup](/docs/2.0/server-setup) — Deploying the standalone server
10621+ - [Python SDK](/docs/2.0/sdks/python) — Python client and worker
10622+ - [CLI](/docs/2.0/cli) — Command-line interface
10623+ - [Migration Guide](/docs/2.0/migration) — Migrating from v1 to v2
10624+
0 commit comments