Skip to content

Releases: temporalio/sdk-python

1.31.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 17:58
84b519e

Notable Changes

Added

  • Added the Worker max_eager_activity_reservations_per_workflow_task option for configuring
    the number of activity slots reserved for eager execution per workflow task. Configured values
    must be positive; use disable_eager_activity_execution to disable eager activity execution.

  • Added experimental SDK payload converter support for values and type hints
    decorated with @transfer_type_convertible(...) using a TransferTypeConverter class.
    This lets types with transfer type converters delegate their wire representation to the
    configured payload converter, preserving SDK behavior such as serialization
    contexts.

  • Added TLSConfig.verification_server_name to verify the server certificate against a fixed name
    instead of the connection's server name. Unlike domain, it does not change the TLS SNI or
    HTTP/2 authority values, which keep following the connected host, so it can be used when the
    server's certificate does not carry the dialed name but on-path infrastructure (e.g. an
    SNI-inspecting egress proxy) needs the SNI to remain resolvable. Requires
    server_root_ca_cert.

  • Added the experimental Worker patch_activation_callback option, allowing workers
    to decide whether a first non-replay workflow.patched call should activate a patch
    during rolling deployments.

Changed

  • Prepared replay-safe workflow activation scheduling that prevents cancellation
    from being lost when another event becomes ready in the same workflow task. The
    behavior is guarded by internal workflow logic flag 2 and remains disabled by
    default during its compatibility rollout.
    Maintainer reminder: keep flag 2 default-disabled for the first two published
    SDK releases that recognize it; enable it in the third release, remove the explicit
    overrides for this flag from tests/worker/test_workflow.py, and replace this rollout
    note with a Fixed entry announcing the behavior change.

💥 Breaking Changes

  • Custom workflow runners that construct WorkflowInstanceDetails must now pass
    payload_converter_factory instead of payload_converter_class. The factory
    returns the already wrapped payload converter that workflow instances should
    use.
  • System Nexus payload converter helpers added for generated bindings are now
    private implementation details, and the remaining public temporalio.nexus.system
    APIs are marked experimental and subject to change.
  • Payload size limits have moved from DataConverter to Client.connect. Pass
    payload_limits=PayloadLimitsConfig(...) (now exported from
    temporalio.client) instead of setting payload_limits on DataConverter.
    Config fields were renamed to payloads_warn_size and memo_warn_size, and
    the deprecated PayloadSizeWarning was removed.

Fixed

  • Marked system Nexus envelope payloads so nested payloads can be detected and
    visited after the envelope is already stored as a payload.

SDK Core

  • db902171 cleanup changelog (#1374)
  • 353fd3b8 chore: limit wasm test concurrency (#1375)
  • 5df57f6d fix(otel): install subscriber on PeriodicReader thread (#1378)
  • 467e871a Update api upstream (#1367)
  • d96b1eb4 feat(sdk): switch to rich search attributes from all getters (#1373)
  • 9b9325cd fix(client): correctly handle Node gRPC style unimplemented method message (#1379)
  • 8e21d5bc chore(ci): use mise for installing protoc (#1382)
  • afb5251f feat(schedules): provide typed accessor to schedule action (#1372)
  • 2cf2c103 Test Cloud gzip support for GetSystemInfo and HealthCheck (#1362)
  • 03a6d123 chore(sdk): reject #[workflow(name=...)] for overriding workflow name (#1390)
  • 95e97686 fix: use worker hearbeat interval for heartbeat system info poller (#1393)
  • 6f75de52 Fix workflow executor cooperative budget livelock (#1396)
  • 6a0a5bc3 docs: update contributing guide (#1397)
  • 208ca8bc chore: add dev tools to mise.toml, remove redundant CI installs (#1386)
  • 207194c9 Fix task slots used metric (#1391)
  • 16452094 feat(sdk): remove remaining raw protos in APIs (#1398)
  • e72c031f feat(sdk): provide typed accessor for workflow count group (#1410)
  • 1b6e4e38 Allow resource controllers to be shared across tuners (#1407)
  • 3dac9013 feat: payload limit enforcement (#1363)
  • 846ac2c5 chore: extract composite action for CI setup, add selective mise installs (#1387)
  • 47d3a40e chore(ci): use github backend for temporal cli (#1414)
  • a9bdead4 Add patch activation callback (#1394)
  • 5f94631d Replace unmaintained backoff crate with backon (#1411)
  • aeb102ef Only set worker control task queue field in polls when appropriate (#1418)
  • 71f46055 feat(sdk): add random and uuid4 in workflow context (#1412)
  • 52aa5ed7 fix(sdk): respect forced failure over completion in same poll (#1417)
  • 19123894 chore(sdk): rename start_activity to execute_activity (#1416)
  • 25de75e1 don't use versioning for internal nexus poller (#1420)
  • eb004c78 Integrate Temporal API 1.63.4 (#1423)
  • d2769368 Make eager activity reservation limit configurable (#1424)

What's Changed

  • fix(activity): do not mutate caller-provided extra dict in LoggerAdapter by @1fanwang in #1513
  • Update sdk-core to incorporate time-skipping api changes by @GregoryTravis in #1633
  • Fix flaky TMPRL1104 duration-log assertions in test_extstore by @DABH in #1628
  • Add dynamic node/task summaries to LangGraph plugin by @DABH in #1612
  • ...
Read more

1.30.0

Choose a tag to compare

@github-actions github-actions released this 02 Jul 21:21
b5777e9

Notable Changes

Added

  • Nexus operation link propagation for signals. When a Nexus operation handler signals a workflow
    (including signal-with-start), the inbound Nexus request links are now forwarded onto the signaled
    workflow so its history events link back to the caller, and the link the server returns for the
    signaled event is attached to the caller workflow's Nexus operation history event. This makes the
    caller and callee mutually navigable in the UI for signal-based Nexus operations.
  • Exposed backoff_start_interval for continue-as-new, to allow the new workflow to start after a delay.

Changed

  • AWS Lambda worker configure parameter supports sync, async, and async
    generator style functions. This callback is invoked on the asyncio event
    loop.
  • Relaxed the protobuf dependency bounds to allow protobuf 7 where compatible
    with the selected optional dependencies.
  • Standalone Nexus operation links are now forwarded on start workflow and signal requests.

Breaking Changes

  • AWS Lambda worker configure parameter has been changed to be invoked
    per-invocation of the worker instead of only at startup. It is advised that
    any shared, heavy-weight operations are performed outside of the callback
    before run_worker is invoked.

SDK Core

  • 6bd00e83 fix(c-bridge): prefix enum variants with type name (#1319)
  • 7d8d61ff upgrade on CAN (#1316)
  • 92bf1a1f Fix activity_cancel_delivered_without_heartbeat test (#1322)
  • f7448bfd [feat(sdk)] Add client() and workflow_handle() to ActivityContext (#1324)
  • 95c0175b Add backoff start for CAN (#1325)
  • 29d3bd04 feat(sdk): remove usage of anyhow from public error types (#1326)
  • 4c971f63 feat(visitor): payload limits validation visitor (#1327)
  • ab5f1365 feat(sdk): error type for signal external workflow (#1329)
  • e5d1a404 docs(sdk): remove warning over use of workflow apis (#1331)
  • 681b8bad Wait for in-progress ephemeral server download by progress, not fixed deadline (#1332)
  • 19827291 Feature-select OTLP exporter TLS backend (#1333)
  • f213db85 fix(sdk): do not apply codec when decoding search attributes (#1336)
  • d79f8681 Bring Core worker_may_ignore event behavior in line with Java/Go (#1339)
  • 22667b0e fix(macros): remove redundant .into_iter() call (#1349)
  • 0689f769 feat(sdk): move signal payload decoding to happen before dispatch (#1352)
  • d936c6cc Guard the Nexus operation result future against false nondeterminism on replay (#1353)
  • 286baac5 fix(sdk-core): rewrite while_let_loop in polling_tests to satisfy clippy (#1354)
  • 213a62a9 feat(client): add workflow input support to ScheduleAction::StartWorkflow (#1347)
  • ad76ca59 chore: bump otel minor (#1358)
  • 4cbf147a VLN-1616: fix checkout-below-v7 (#1359)
  • b9e20dad chore: bump crates to 0.5.0 (#1360)
  • 3389e429 feat(sdk): add UntypedActivity (#1361)
  • 9758355d chore: bump unit test timeouts across the board (#1364)
  • 5126dad7 feat: add typed search attributes API (#1346)
  • 95d3a76d Fix/finalize shutdown arc race (#1365)
  • 98602c71 chore(client): use json payload converter (#1368)
  • 9f83b7e3 Respect SDK flags in history & gzip downgrade (#1370)

What's Changed

New Contributors

Full Changelog: 1.29.0...1.30.0

1.29.0

Choose a tag to compare

@github-actions github-actions released this 17 Jun 21:23
4b4e34e

Notable Changes

Added

  • Added experimental temporalio.workflow.signal_with_start_workflow, backed by
    generated system Nexus bindings for
    WorkflowService.SignalWithStartWorkflowExecution.
  • Added OpenAI Agents plugin support for CustomTool dispatch, including lazy
    tool discovery through defer_loading.

Breaking Changes

  • Client connections now use gzip transport-level gRPC compression by default.
    Pass grpc_compression=GrpcCompression.NONE to Client.connect or
    CloudOperationsClient.connect to disable it. This can cause issues in some proxy scenarios
    if the proxy does not implement gRPC compression. Upgrade to version 1.30.0 if affected,
    in which compression downgrading is supported.

  • StartWorkflowUpdateWithStartInput now owns the authoritative
    rpc_metadata and rpc_timeout fields for
    OutboundInterceptor.start_update_with_start_workflow. These fields were
    removed from the nested update-with-start input objects, so custom
    interceptors that accessed them there should read or update the top-level
    fields instead.

Fixed

  • Fixed breakpoint() and pdb.set_trace() inside workflow code when a worker
    runs with debug_mode=True or TEMPORAL_DEBUG=1; sandboxed workflows without
    debug mode now get a clearer error pointing to debug_mode=True.

  • Fixed start_update_with_start_workflow interceptor handling so RPC metadata
    and timeouts are forwarded to the underlying execute_multi_operation call.

  • Fixed OpenAI Agents plugin streamed event serialization when pydantic had not
    yet built deferred schemas, and fixed terminal sandbox errors retrying
    forever.

  • Removed the lazy-connect lock from the per-RPC hot path. It was previously
    acquired on every RPC, putting an event-loop-bound primitive on the hot path;
    it is now skipped once the client is connected. This reduces the client's
    coupling to the event loop it connected on, which can help when reusing a
    single long-lived Client across event loops or threads (e.g. the
    dedicated-loop pattern used with gevent/gunicorn and synchronous services).
    Note this does not make a Client fully thread- or loop-agnostic; reusing one
    long-lived loop is still the recommended pattern.

    SDK Core

What's Changed

New Contributors

Full Changelog: 1.28.0...1.29.0

1.28.0

Choose a tag to compare

@github-actions github-actions released this 04 Jun 17:50
bda846f

Experimental Releases

Strands Agents Plugin

This release adds a new Temporal Plugin for running Strands Agents inside Temporal Workflows. Model invocations, tool calls, and MCP tool calls are routed through Temporal Activities, so your agents get durable execution, retries, and timeouts for free.

Workflow Streams support for LangGraph

The LangGraph plugin can now durably stream node output to external consumers. Values written with langgraph.config.get_stream_writer() are published to a Workflow Streams topic.

Standalone Nexus Operations

Standalone Nexus Operations is experimental and currently only supported on pre-release versions of the dev server.

Added support for Standalone Nexus Operations, allowing clients to start and manage Nexus operations directly outside of a Workflow. Documentation, Samples, and instructions to request enablement in Temporal Cloud will be linked here when available.

⚠️ Possible Local Activity Behavioral Difference

This release includes a bugfix in the Core library that changes incorrect behavior that may have unintentionally worked previously. Specifically, local activities that start running, and continue running while their associated workflow was evicted from the cache, could possibly be "re-attached" to the workflow if it was recreated before they finished. This behavior was unsound. Now, any running local activities are invalidated when a workflow is evicted. This change was really only likely to be encountered if you were running with the workflow cache disabled, which we never recommend doing.

What's Changed

New Contributors

Core Changes

2026-04-28 - 0f2f1b4c - chore: feature cleanup (temporalio/sdk-rust#1236)
2026-04-28 - 6f7e7536 - Move Core-specific test utilities out of the Common crate (temporalio/sdk-rust#1237)
2026-04-29 - 21263fa1 - 💥 feat(sdk): failure converter + rich error types (temporalio/sdk-rust#1226)
2026-04-29 - 9747e978 - Update cloud-api protos to v0.14.0 (temporalio/sdk-rust#1240)
2026-04-29 - a9481aae - bump versions 0.4.0 (temporalio/sdk-rust#1241)
2026-04-30 - 87162f50 - chore: upgrade doc code to no_run (temporalio/sdk-rust#1242)
2026-05-01 - 3a6efc35 - Fix flaky shutdown test (temporalio/sdk-rust#1243)
2026-05-01 - 9d1bdf90 - fix(macros): drop anyhow dependency from workflow_methods expansion (temporalio/sdk-rust#1246)
2026-05-05 - a22517e4 - chore: remove unnecessary anyhow wrapping (temporalio/sdk-rust#1247)
2026-05-12 - c57f825f - Add grpc-status trailers to fake gRPC responses (temporalio/sdk-rust#1257)
2026-05-13 - 99d6b402 - chore: update readme to mention public preview (temporalio/sdk-rust#1262)
2026-05-14 - 2ed11c8e - Enforce minimum DNS resolution interval (temporalio/sdk-rust#1272)
2026-05-14 - 68665e50 - Bump windows test leg to 20 minutes (temporalio/sdk-rust#1270)
2026-05-14 - a0ad8769 - feat(dns): add DNS load balancer settings to C bridge (temporalio/sdk-rust#1267)
2026-05-14 - eac03fbc - Upgrade cloud-api to v0.15.0 (temporalio/sdk-rust#1253)
2026-05-15 - 3e6ca9ff - VLN-1346: fix missing-dependency-cooldown (temporalio/sdk-rust#1275)
2026-05-15 - 6d2045dd - Make TLS backend feature-selectable in sdk-core and client (temporalio/sdk-rust#1274)
2026-05-18 - 56a4737e - fix: retry transport-sourced Cancelled errors and count them in metrics (temporalio/sdk-rust#1269)
2026-05-18 - 72374ca1 - (CI) Disable caching cargo binaries (temporalio/sdk-rust#1278)
2026-05-18 - de25e0c8 - fix(sdk): no longer error on cancelling fired timer (temporalio/sdk-rust#1268)
2026-05-19 - 179d7608 - refactor(examples): extract saga compensation into a reusable Saga pattern (temporalio/sdk-rust#1279)
2026-05-19 - 68a9661f - build(deps): update ringbuf requirement from 0.4 to 0.5 (temporalio/sdk-rust#1285)
2026-05-19 - 6c4011d1 - Update README & add banner (temporalio/sdk-rust#1280)
2026-05-19 - d6cfb9c7 - build(deps): update lru requirement from 0.16 to 0.18 (temporalio/sdk-rust#1276)
2026-05-21 - 96e0be0f - Add uds support in channel creation (temporalio/sdk-rust#1288)
2026-05-21 - d58edd2d - Add activity execution interceptors (temporalio/sdk-rust#1277)
2026-05-26 - 3839fa94 - feat(client): support custom ServerCertVerifier in TlsOptions (temporalio/sdk-rust#1271)
2026-05-26 - 5aaabd10 - 💥 WASM Workflows (temporalio/sdk-rust#1239)
2026-05-26 - 5d9faa8d - chore(sdk): rename child_workflow -> start_child_workflow (https://github.com/temporalio/sdk-core/...

Read more

1.26.1

Choose a tag to compare

@yuandrew yuandrew released this 18 May 16:55
f2350cb

Fix for worker shutdown ordering

There was an issue with worker shutdown when the frontend.enableCancelWorkerPollsOnShutdown dynamic config flag is enabled on server. The issue was causing shutdown to stall until the full 30s worker shutdown timeout was hit, as server was waiting for a message that the SDK was not sending. This fixes the SDK to send the proper message, allowing shutdown to occur normally.

What's Changed

  • [backport 1.26.1] Update core to pickup shutdown fix by @yuandrew in #1527

Full Changelog: 1.26.0...1.26.1

1.25.1

Choose a tag to compare

@yuandrew yuandrew released this 18 May 16:10
72e0390

Fix for worker shutdown ordering

There was an issue with worker shutdown when the frontend.enableCancelWorkerPollsOnShutdown dynamic config flag is enabled on server. The issue was causing shutdown to stall until the full 30s worker shutdown timeout was hit, as server was waiting for a message that the SDK was not sending. This fixes the SDK to send the proper message, allowing shutdown to occur normally.

What's Changed

  • [backport 1.25.1] Update core to pickup shutdown fix by @yuandrew in #1526

Full Changelog: 1.25.0...1.25.1

1.24.2

Choose a tag to compare

@yuandrew yuandrew released this 15 May 19:17
6ee7066

Bug Fixes

  • Removed upper bound constraint on types-protobuf dependency (#1525). The previous ceiling (<5.29.1) could cause dependency conflicts for users on newer types-protobuf versions. The constraint now matches the protobuf range (>=3.20,<7.0.0).

What's Changed

Full Changelog: 1.24.1...1.24.2

1.27.2

Choose a tag to compare

@THardy98 THardy98 released this 14 May 02:19
c9e2873

DNS Resolver Load Balancing Configuration

A new load balancing feature was added in temporalio/sdk-rust#1212 which has caused networking issues in certain networking setups. This is now disabled by default via the change listed below.

What's Changed

1.27.1

Choose a tag to compare

@THardy98 THardy98 released this 13 May 16:22
ddc2b29

DNS Resolver Load Balancing Configuration

A new load balancing feature was added in temporalio/sdk-rust#1212 which has caused networking issues in certain networking setups. That can now be disabled via DnsLoadBalancingConfig.

What's Changed

  • Fix flaky pause_and_assert helper by @brianstrauch in #1493
  • Fix flaky LangGraph timeout tests by @DABH in #1495
  • feat(otel): remove span creation for saa operations that do not currently propagate tracing headers. by @cconstable in #1492
  • CaN USE_RAMPING_VERSION versioning behaviour by @THardy98 in #1499
  • Say 'client_region' in S3 diagnostics for clarity by @drewhoskins-temporal in #1494
  • contrib/openai_agents: stream model events via Workflow Streams by @jssmith in #1497
  • contrib/google_adk_agents: stream LlmResponse chunks via Workflow Streams by @jssmith in #1498
  • Fix CI, bump openinference-instrumentation-google-adk to 0.1.11 by @brianstrauch in #1508
  • AI-183: Respect LANGSMITH_TRACING env var in LangSmith plugin by @xumaple in #1509
  • Fix minor API break from latest OpenAI Agents version by @tconley1428 in #1511
  • Plumb through option for configuring DNS resolver by @Sushisource in #1501

Core Changes

None!

1.24.1

Choose a tag to compare

@THardy98 THardy98 released this 13 May 21:48
2994717

Fix for worker shutdown ordering

There was an issue with worker shutdown when the frontend.enableCancelWorkerPollsOnShutdown dynamic config flag is enabled on server. The issue was causing shutdown to stall until the full 30s worker shutdown timeout was hit, as server was waiting for a message that the SDK was not sending. This fixes the SDK to send the proper message, allowing shutdown to occur normally.

What's Changed

Full Changelog: 1.24.0...1.24.1