---
title: "Change log"
description: "This page lists user-visible changes to server-zd, newest first; each section covers the changes since the previous release of this component."
canonical_url: "https://docs.superdurable.io/reference/server/0.1.23/changelog/"
source: "docs/reference-server_versioned_docs/version-0.1.23/changelog.mdx"
locale: "en"
---

# Change log

This page lists user-visible changes to server-zd, newest first; each section covers the changes since the previous release of this component.

<a id="v0-1-20"></a>

## 0.1.20

Released 2026-11-06 as [server-zd/v0.1.20](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.20). Reference: [0.1.20](https://docs.superdurable.io/reference/server/0.1.20.md).

### Breaking

- **dev** and **local** now default to 32 partitions instead of 1024; **serve** keeps 1024. To keep an existing 1024-partition directory, set **cluster.partitionCount** to 1024 in **--config**. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#single-node-partition-count).
- **dev** now honors **api.listen** from **--config** when **--listen** is absent. Review copied configuration files or pass **--listen** explicitly to keep the previous bind address. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#single-node-local).

### Added

- **dex-server-zd local** runs a single production node on local disk with the same data directory layout and lock as **dev**. It allows a 30-second Step attempt drain by default. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#single-node-local).
- **dev** and **local** warn at startup when listening on a non-loopback address without authenticators. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#single-node-local).

### Changed

- Partition-count mismatch errors report the data directory and both counts. A hot standby classifies the mismatch as a configuration error. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#single-node-partition-count).

<a id="v0-1-19"></a>

## 0.1.19

Released 2026-11-06 as [server-zd/v0.1.19](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.19). Reference: [0.1.19](https://docs.superdurable.io/reference/server.md).

### Breaking

- **streamStore.backend** now defaults to **memory** for **serve** as well as **dev**. Set it to **disabled** to retain rejection of Client Stream calls with **FAILED_PRECONDITION**. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#streams).
- **streamStore.maxTotalBytes** caps node Stream data at 1 GiB by default; writes beyond it return **RESOURCE_EXHAUSTED**. Raise this setting and **streamStore.maxStreamCapacityBytes** (64 MiB by default) if applications need larger buffers. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#streams).

### Added

- **dexzd_step_stream_writes_dropped_total** counts dropped Step Stream writes by reason. These best-effort writes still never fail the Step. [Reference](https://docs.superdurable.io/reference/server/0.1.23/metrics.md).
- Startup warns when **streamStore.backend** is **disabled**. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#streams).

### Changed

- A Stream message too large to fit still returns **RESOURCE_EXHAUSTED**, with an error explaining that it can never fit. The rejection no longer trims that Stream. [Reference](https://docs.superdurable.io/reference/server/0.1.23/runtime-data.md#stream-capacity).

### Fixed

- **streamStore.estimatedMessageOverheadBytes**, **streamStore.backgroundTrimBatchSize**, **streamStore.trimBatchYieldTime**, and **streamStore.trimWorkers** now take effect. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#streams).
- A rejected Stream write requests enough trimming to make room for itself, preventing continued rejection while usage sits at the trim target. [Reference](https://docs.superdurable.io/reference/server/0.1.23/runtime-data.md#stream-capacity).
- Stream message identities keep increasing after trimming removes a Stream and a write recreates it, so resume tokens do not skip new messages. [Reference](https://docs.superdurable.io/reference/server/0.1.23/runtime-data.md#stream-resumable-reads).

<a id="v0-1-18"></a>

## 0.1.18

Released 2026-11-05 as [server-zd/v0.1.18](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.18). Reference: [0.1.18](https://docs.superdurable.io/reference/server.md).

### Breaking

- **dev** now defaults to strict durability and flushes acknowledged writes to disk. Pass **--durability process-crash-safe** or set **dev.durabilityMode** to **processCrashSafe** for the previous behavior. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#single-node-local-durability).
- Strict startup fails if the embedded store cannot open or flush its data directory or an ancestor directory. Fix the named directory before restarting. [Release notes](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.18).
- All durability modes refuse a data directory left unclean by a release before 0.1.4. Delete that directory to start empty; cleanly stopped directories remain usable. [Release notes](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.18).

### Added

- **dex-server-zd dev --durability** selects **strict**, **process-crash-safe**, or **relaxed** and overrides **dev.durabilityMode**. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#single-node-local-durability).

### Changed

- The embedded object store is now named **s3local**. Its on-disk format is unchanged. [Release notes](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.18).

### Fixed

- Strict writes flush parent directory entries, including existing directories and concurrent creation, before acknowledging writes. [Release notes](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.18).

<a id="v0-1-17"></a>

## 0.1.17

Released 2026-11-05 as [server-zd/v0.1.17](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.17). Reference: [0.1.17](https://docs.superdurable.io/reference/server.md).

### Breaking

- Protocol version 4 requires a coordinated server upgrade: stop all old active and standby processes before starting the new version, then upgrade SDKs. After the new binary writes to a storage prefix, roll forward or restore a pre-upgrade backup into a new prefix. [Reference](https://docs.superdurable.io/reference/server/0.1.23/upgrades.md).
- A Step attempt interrupted after its hand-out was committed now fails with **NOT_COMPLETED** and consumes a retry. Review retry policies and side effects before upgrading. [Reference](https://docs.superdurable.io/reference/python/failure-and-retries.md#same-attempt-redelivery).
- Retry total duration starts at the first hand-out and only gates scheduling another retry. Use method timeouts to bound a running attempt. [Reference](https://docs.superdurable.io/reference/python/step-options.md#timeouts-and-total-duration).
- Steps with no available or supporting Worker now wait durably instead of failing with **NO_WORKER_AVAILABLE**. Set a Flow timeout when that wait must be bounded; **matching.dispatchWait** now applies only to RPCs. [Reference](https://docs.superdurable.io/reference/server/0.1.23/workers.md#step-task-queue).
- Worker startup fails when its requested concurrency exceeds **matching.maxConcurrentTasksCap** (256 by default). Lower Worker concurrency or raise that cap and **matching.maxStreams** first. [Reference](https://docs.superdurable.io/reference/server/0.1.23/workers.md#pull-worker-dispatch).
- **limits.maxChildFlowResultBytes** now limits child Flow results to 16 MiB by default. Raise it before starting affected runs or reduce result size. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#limits).

### Added

- Protocol version 4 records Step attempt start at hand-out to a reserved Worker slot and reports **attempt_progress** in recovery errors. The minimum supported protocol remains unchanged, so older SDKs keep working. [Reference](https://docs.superdurable.io/reference/server/0.1.23/upgrades.md).
- **lifecycle.attemptDrainTimeout** lets planned stops and step-downs drain running attempts for 30 seconds by default, or 2 seconds under **dev**. Set Kubernetes **terminationGracePeriodSeconds** longer than this timeout. [Reference](https://docs.superdurable.io/reference/server/0.1.23/kubernetes.md#graceful-shutdown).
- **matching.syncMatchWait**, **matching.headsResyncInterval**, **matching.headsMaxSkippedDeletions**, and **matching.unsupportedTypeCacheEntries** configure durable Step dispatch. [Release notes](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.17).
- **dexzd_step_task_queue_entries** and **dexzd_step_task_queue_oldest_age_seconds** expose durable backlog. The entries gauge can read low during background counting after recovery; use oldest age meanwhile. [Reference](https://docs.superdurable.io/reference/server/0.1.23/workers.md#step-task-queue).

### Changed

- The RPC lock-conflict message now says “a Step” instead of “a running Step”. [Reference](https://docs.superdurable.io/reference/server/0.1.23/runtime-data.md#rpc-lock-conflicts).

### Fixed

- **limits.maxFlowStateBytes** now checks state growth across Step attempts and RPCs that change Flow state. [Reference](https://docs.superdurable.io/reference/server/0.1.23/configuration.md#limits).

<a id="v0-1-16"></a>

## 0.1.16

Released 2026-11-02 as [server-zd/v0.1.16](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.16). Reference: [0.1.16](https://docs.superdurable.io/reference/server/0.1.23.md).

### Fixed

- A process that steps down and takes its own lease back resumes serving instead of exiting. Public calls still running after lease release end with **UNAVAILABLE** and may be retried. [Reference](https://docs.superdurable.io/reference/server/0.1.23/high-availability.md#step-down).
- Only the newest gRPC server instance accepts new connections, preventing startup refusals after readiness reports **SERVING** and first-call connection errors. [Release notes](https://github.com/superdurable/dex/releases/tag/server-zd%2Fv0.1.16).

Older releases: [GitHub releases](https://github.com/superdurable/dex/releases?q=server-zd\&expanded=true).
