Change log
View as MarkdownThis page lists user-visible changes to the Python SDK, newest first; each section covers the changes since the previous release of this component.
1.45
Released 2026-11-11 as sdk-python/v1.45.0.
Added
- WorkerOptions.flow_definition_paths and WorkerOptions.flow_definitions make a Worker upload Flow Definition Graph documents when it starts, so Dex Web can draw its Flows without a definition directory. The Worker uploads only registered Flow types, shares source.path only as a relative path, and keeps starting when the upload fails. FlowDefinitionDocument describes an in-memory document. Requires server-zd 0.1.26 or later. Reference.
- Client.upload_flow_definitions uploads Flow definitions from a deploy script and returns a FlowDefinitionUploadResult with a FlowDefinitionUploadOutcome for each document. AsyncClient has the same coroutine. Reference.
Breaking
- A Step whose Step type contains "-" can no longer start SubFlows. A dash made the generated child Flow ID ambiguous, so two parents could share one child. When such a Step returns a Wait that contains SubFlow.run, the server rejects the result as an invalid Worker response and fails the attempt without retry. The Worker logs a warning first. Default Step types are class names and are not affected. To migrate, change get_step_type to return a Step type without a dash. Reference.
Fixed
- The Join documentation no longer recommends reporting a result for a cancelled branch from the cancelling RPC, which could count that branch twice. A cancelled branch never reports, and no other code can safely report for it. Reference.
1.44
Released 2026-11-10 as sdk-python/v1.44.0.
Added
- Join and JoinRound synchronize parallel branches of a Flow. Join.fork starts a round from the split Step and builds the branch and join movements, so the application keeps no branch count or round key. Branches report with end_branch or report_branch_result. The join Step waits with for_all_branches, for_first_branch, or for_branches, and the next round resets the previous one with for_remaining_branches. RPC handlers use fork_with_round_key. Join.channel_map returns the registered ChannelMap, so an RPC can load and read a round's pending results. Reference.
1.43
Released 2026-11-10 as sdk-python/v1.43.0.
Breaking
- Removed Client.trigger_continue_as_new, AsyncClient.trigger_continue_as_new, FlowStatus.CONTINUED_AS_NEW, FlowConfig.continue_as_new_threshold, FlowConfig.continue_as_new_page_size_bytes, and include_continued_as_new from both clients' search_flows methods. Reference.
- FlowConfig is a dataclass, and the two removed fields were its second and third fields. Every later field moves two positions forward, so a positional FlowConfig call can set the wrong field. Construct FlowConfig with keyword arguments. Reference.
- Removed WaitForStepCompletionOptions.internal_handler_timeout and WaitForAttributeOptions.internal_handler_timeout. request_id remains accepted but the server does not read it for these waits. Reference.
- Generated bindings rename FlowExecutionID to FlowRunID and flow_execution_id to flow_run_id. ProtoJSON uses flowRunId. Reference.
1.40
Released 2026-11-09 as sdk-python/v1.40.0.
Added
- FlowConfig.offload_history chooses whether a run offloads its history to object storage. None means True. Set it to False for many short runs that close soon. Set it at start through StartFlowOptions.config_override or SubFlowOptions.config_override. A SubFlow otherwise inherits its parent's value, and update_flow_config rejects it with INVALID_ARGUMENT. It requires server-zd 0.1.23 or later. Reference.
Changed
- FlowConfig.delete_expired_history_objects is deprecated. It has no effect, and the SDK no longer sends it. Existing code that sets it still compiles.
1.39
Released 2026-11-09 as sdk-python/v1.39.0. Patch release sdk-python/v1.39.1 followed the same day.
Added
- Action and when_attribute_matches declare an RPC that a person can invoke from Dex Web: pass an Action with a label, a required permission, and a condition as the action argument of @rpc. The condition is optional. Workers send the Flow's Action permission mappings, and start_flow and SubFlow starts record the permissions the initial Attributes make available. This arrived in 1.39.1. Reference.
- FlowConfig.delete_expired_history_objects controls expired history object deletion at start, on update, and for SubFlows. It requires history offload and server-zd 0.1.22 or later.
Changed
- A LoadBlobs request names at most 1,000 entries. The SDK batches larger requests and keeps the input order.
1.38
Released 2026-11-07 as sdk-python/v1.38.0.
Added
- FlowConfig.history_window_events sets about how many of the newest history events a run keeps for history reads and Time Travel. Set it at start, change it with update_flow_config, or override it for a SubFlow. None uses the server's history.windowEvents setting. Dex rejects a value that is not positive or exceeds history.maxWindowEvents with INVALID_ARGUMENT. It requires server-zd 0.1.21 or later. Reference.
Changed
- The gRPC receive limit rises from 4 MiB to DEFAULT_GRPC_MAX_MESSAGE_BYTES (32 MiB) on every FlowService and pull stream channel. Set grpc_max_message_bytes on ClientOptions or WorkerOptions to change it.
Fixed
- A LoadBlobs request splits in half when its response exceeds a gRPC size limit, so a Worker with an empty blob cache no longer fails on a long Flow. A single blob that does not fit raises the new BlobMessageTooLargeError.
1.37
Released 2026-11-06 as sdk-python/v1.37.0. Reference: 1.37.x.
Added
- FlowServiceTlsOptions and flow_service_tls on Client and Worker options enable verified TLS, with optional extra root CAs and a server-name override. Omitting the option keeps plaintext connections. API reference.
1.35
Released 2026-11-06 as sdk-python/v1.35.0. Reference: 1.35.x.
Breaking
- Workers and the Client’s first call now require server-zd 0.1.17 or later (protocol version 4). Upgrade all server processes before upgrading the SDK. Reference.
- Worker startup fails when max_concurrent_tasks exceeds matching.maxConcurrentTasksCap (256 by default). Lower the Worker setting or raise the server cap and matching.maxStreams first. Reference.
- RetryPolicy.total_duration now starts at the first hand-out and only gates scheduling another retry. Set method timeouts to bound running attempts. API reference.
- A Step with no available or supporting Worker waits durably without consuming a retry. Set a Flow timeout to bound that wait. Reference.
- A Step attempt interrupted after its hand-out was committed fails with NOT_COMPLETED and consumes a retry. Review retry policies and side effects before upgrading. Reference.
Added
- RecoveryErrorInfo.attempt_progress distinguishes a failed Step method that never started from one that may have run. API reference.
Changed
- Workers open one execution stream per slot; reserved_rpc_tasks selects RPC-only slots. By default, a Worker with at least two slots reserves one for RPCs. Reference.
- stop drains running handlers and returns tasks that did not start without consuming a retry. Reference.
Deprecated
- idle_streams_per_queue is accepted but ignored, and pull_reserved_rpc_declines always reports zero. Use execution-slot capacity and queue metrics instead. Reference.
1.32
Released 2026-11-01 as sdk-python/v1.32.0. Reference: 1.32.x.
Added
- Generated protocol bindings include AdminService, with DescribeActiveNode and StepDownActiveNode for inspecting and stepping down the active server process. Release notes.
1.30
Released 2026-10-31 as sdk-python/v1.30.0. Reference: 1.30.x.
Added
- Generated protocol bindings add ERROR_SUB_STATUS_ATTRIBUTE_INDEX_CAPACITY_EXCEEDED and ERROR_SUB_STATUS_INDEXED_KEYWORD_TOO_LONG for Attribute index admission errors. Release notes.
1.29
Released 2026-10-31 as sdk-python/v1.29.0. Reference: 1.29.x.
Added
- Generated history responses expose the pruned event range and first retained event ID. Step event contexts also carry related event IDs and the WaitFor completion time. Release notes.
- Client.get_attributes and AsyncClient.get_attributes read committed Attributes and AttributeMap instances in one request without a Worker. AttributeMap.instance selects an instance, and AttributeValues provides typed result lookup. API reference.
Older releases: GitHub releases.