Releases: temporalio/sdk-python
1.28.0
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
- Bump ruff to 0.15 and reformat by @brianstrauch in #1507
- Format LangSmith tracing env override test by @tconley1428 in #1531
- Fix swallowed CancelledError in start_child_workflow and Nexus operations (Issue #1445) by @yegorske50 in #1472
- Use LangSmith runtime override API instead of monkey-patching aio_to_thread by @xumaple in #1477
- (CI) Disable caching cargo binaries by @maciejdudko in #1537
- Refactor client module into package by @tconley1428 in #1530
- Remove exclude-newer-package option by @brianstrauch in #1529
- Refactor
workflow.pyinto package by @tconley1428 in #1488 - Fix documentation link for Workflow Streams by @brianstrauch in #1536
- Integration test for Standalone Activities delayed-start by @eamsden in #1520
- Update banner url by @Sushisource in #1542
- Address Flake in test_workflow_history_info by @VegetarianOrc in #1545
- remove stale nightly tps omes test by @THardy98 in #1544
- Implement Standalone Nexus Operations by @VegetarianOrc in #1461
- Drop macos-intel from CI by @eamsden in #1553
- ci: key Rust cache on resolved Python version by @brianstrauch in #1554
- Enabled frontend.enableCancelWorkerPollsOnShutdown in tests by @tconley1428 in #1555
- Narrow overloads on the SANO client by @VegetarianOrc in #1552
- VLN-1341: remediate missing-dependency-cooldown by @picatz in #1551
- LangGraph streaming with workflow streams by @brianstrauch in #1500
- fix: call task.uncancel() after catching CancelledError in shield loops (Python 3.11+) by @brucearctor in #1523
- Expose JSON type converter unhandled sentinel type by @Lingavasan in #1556
- remove unused omes job by @THardy98 in #1559
- Tolerate OpenAI model schema drift in the agents payload converter by @brianstrauch in #1563
- Add Temporal Operation Handler by @VegetarianOrc in #1503
- Bump langsmith from 0.7.38 to 0.8.0 by @dependabot[bot] in #1521
- Add Strands Agents plugin (contrib) by @brianstrauch in #1539
- Update Core by @Sushisource in #1564
- Swap from TemporalNexus prefix to Temporal by @VegetarianOrc in #1569
- Passthrough
_pydevd_bundleto sandbox when debug mode is enabled by @VegetarianOrc in #1249 - contrib/strands: add cache_tools toggle to TemporalMCPClient by @brianstrauch in #1571
- Add workflow cancellation reason by @Sushisource in #1574
- Bump litellm to 1.85.0 and openai-agents to 0.17.3 by @dependabot[bot] in #1478
- Add trusted publishing release workflow by @tconley1428 in #1575
- Include nexus-operation-token in Nexus callback headers by @VegetarianOrc in #1576
- Bump version to 1.28.0 by @tconley1428 in #1577
New Contributors
- @yegorske50 made their first contribution in #1472
- @brucearctor made their first contribution in #1523
- @Lingavasan made their first contribution in #1556
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/...
1.26.1
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.26.0...1.26.1
1.25.1
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.25.0...1.25.1
1.24.2
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
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
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
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
1.27.0
💥 External Storage Reference Format Change (Experimental)
External storage reference event history format has been incompatibly changed from prerelease. New storage references are emitted in the new format starting with release. Support for the ability to retrieve references in the old format has been preserved. The prerelease format is deprecated and will be removed in a future release.
Workflow Streams
This release adds Workflow Streams, a public preview contrib library that gives a workflow a durable, offset-addressed event channel for keeping outside observers updated on workflow and activity progress. It's built on Temporal's existing signals, updates, and queries, with batching, exactly-once deduplication, topic filtering, and continue-as-new helpers layered on top. Intended uses are streaming UIs for long-running AI agents, status for in-flight payment or order processing, and progress for data pipelines. It is not for not ultra-low-latency cases like real-time voice.
What's Changed
- Harden flaky workflow tests by @tconley1428 in #1456
- Pin GitHub Actions and cap uv deps by @tconley1428 in #1458
- Implement
is_running()for asyncio loop by @brianstrauch in #1463 - chore: Update and pin all GHA actions by @mjameswh in #1464
- Fix flaky OpenAI test timeouts by @DABH in #1466
- AI-60: Add summary_fn parameter to TemporalModel for dynamic activity summaries by @xumaple in #1451
- Add OTel tracing for standalone activities by @cconstable in #1471
- More TMPRL1104 logging details by @jmaeagle99 in #1469
- Fix external storage CaN test stability by @jmaeagle99 in #1454
- Fix race condition in test_update_payload_conversion by @brianstrauch in #1473
- Fix race condition in test_async_response by @brianstrauch in #1474
- Fix race condition in test_cancellation_type for TRY_CANCEL by @brianstrauch in #1475
- Extend Workflow timeout for test_customer_service_workflow by @brianstrauch in #1476
- Update sdk-core submodule to latest by @jmaeagle99 in #1481
- Add AI Foundations as CODEOWNERs of AI plugins by @donald-pinckney in #1482
- chore: update submodule to sdk-rust by @chris-olszewski in #1480
- AI-36: Add LangGraph plugin by @brianstrauch in #1448
- 💥 Use ExternalStorageReference protobuf message for payload references by @jmaeagle99 in #1486
- External storage: Improved debuggability for region problems. by @drewhoskins-temporal in #1487
- Add start_delay for SAA by @Sushisource in #1491
- Update Python and Cargo lockfiles by @tconley1428 in #1483
- Add Workflow Streams library by @jssmith in #1423
Core Changes
2026-04-10 - 08adc4a4 - feat(sdk): add typed continue as new (temporalio/sdk-rust#1209)
2026-04-14 - 00d3888a - feat(client): ergonomic workflow description (temporalio/sdk-rust#1215)
2026-04-14 - c78bfb67 - Support static_summary, static_details and current_details` in the Rust sdk (temporalio/sdk-rust#1208)
2026-04-14 - d24a6f77 - chore(ci): bump macos-intel timeout (temporalio/sdk-rust#1214)
2026-04-15 - d7ebff81 - Add DNS load balancing (temporalio/sdk-rust#1212)
2026-04-16 - 33b86805 - fix(sdk): normalize how user metadata is encoded (temporalio/sdk-rust#1216)
2026-04-16 - 33c6c5e2 - Optimize dependencies (temporalio/sdk-rust#1219)
2026-04-16 - 72d8c5d3 - Fix test broken on windows by fake server binding to ipv6 (temporalio/sdk-rust#1220)
2026-04-16 - 904f4793 - Remove unused parking lot send guard feature (temporalio/sdk-rust#1218)
2026-04-17 - 1e67b234 - chore: Update and pin all GHA actions (temporalio/sdk-rust#1222)
2026-04-20 - 9171aca4 - 💥 feat(sdk): enforce some activity to close timeout is set (temporalio/sdk-rust#1221)
2026-04-21 - 703fe6b2 - Fix NDE when multiple patches in a single WFT exceed SA's 2048-byte limit (temporalio/sdk-rust#1225)
2026-04-22 - 984da134 - Set WFT Failed cause on grpc message too large incidents (temporalio/sdk-rust#1229)
2026-04-23 - 64cb6ed2 - Shutdown rpc initiate shutdown (temporalio/sdk-rust#1224)
2026-04-24 - 6dd29f2d - chore: rename master -> main in docs/crates/workflows (temporalio/sdk-rust#1233)
2026-04-25 - 30c4a313 - bump versions to 0.3.0 (temporalio/sdk-rust#1235)
2026-04-26 - 2872b536 - Update upstream api to latest (temporalio/sdk-rust#1234)
New Contributors
- @brianstrauch made their first contribution in #1463
- @DABH made their first contribution in #1466
- @cconstable made their first contribution in #1471
Full Changelog: 1.26.0...1.27.0
1.26.0
OpenAI Agents SDK Sandbox Support
This release adds support for the OpenAI Agents SDK's SandboxAgent in Temporal workflows. All sandbox lifecycle and I/O operations (create, exec, read, write, PTY, etc.) are automatically routed through Temporal activities, making them durable and replayable. If an agent fails mid-execution, Temporal ensures it picks up right where it left off in its sandbox. To use it, pass sandbox clients (e.g. DaytonaSandboxClient) to OpenAIAgentsPlugin(sandbox_clients=...). This release also updates compatibility with the latest OpenAI Agents SDK.
Breaking Changes
2026-04-09 - 4f05fc58 - 💥 Record task latency even for WFT failures that were dropped (temporalio/sdk-rust#1207) - The temporal_workflow_task_execution_latency metric is slightly more inclusive than it was in the past, and it can now include some WFT failures that may previously have been omitted
What's Changed
- Add LangSmith tracing plugin for Temporal workflows by @xumaple in #1369
- Add namespace to Nexus operation info by @Quinn-With-Two-Ns in #1416
- Add LiteLlm + TemporalModel integration test by @xumaple in #1431
- AI-59: Mark LangSmith plugin as experimental by @xumaple in #1441
- AI-61: Strip unset None fields from ADK plugin payloads by @xumaple in #1442
- S3 Driver: Require hash algorithm and value in claim payloads by @jmaeagle99 in #1443
- Expose Nexus Endpoint in a Nexus Operation Handler by @Quinn-With-Two-Ns in #1437
- Feat/OpenAI agents plugin sandbox support by @JasonSteving99 in #1452
Core Changes
2026-04-06 - a4fc7933 - feat(sdk): env config (temporalio/sdk-rust#1195)
2026-04-06 - ef57d63f - Correctly convert default_versioning_behavior in C bridge (temporalio/sdk-rust#1199)
2026-04-08 - 1f6cfb6c - fix(core): add in scheme port if none present (temporalio/sdk-rust#1205)
2026-04-08 - 723c2836 - feat(sdk): add samples (temporalio/sdk-rust#1190)
2026-04-08 - d96a8d2f - Move CODEOWNERS under .github/ (temporalio/sdk-rust#1198)
2026-04-09 - 630e7795 - Make sure legacy queries are failed if gRPC message too large (temporalio/sdk-rust#1206)
2026-04-10 - b544f95d - Expose Nexus Endpoint in a Nexus Operation Handler (temporalio/sdk-rust#1211)
New Contributors
Full Changelog: 1.25.0...1.26.0
1.25.0
Pre-release Features
Serverless Lambda Workers
This release introduces a package which can be used together with upcoming changes to the Temporal server & cloud which allow you to run your worker in an AWS Lambda function which the server will invoke as-needed to process Workflow, Activity, and Nexus tasks - allowing you to do away with some of the operational burden of running a fleet of workers. Additional documentation on how to use this feature will be linked here when available.
External Storage
This release includes the external storage feature, which allows offloading payloads to an external storage system (such as Amazon S3) and passes a small reference token into Event History. This allows your workflows to avoid large payload errors and to avoid growing workflow history size too rapidly.
Amazon S3 Storage Driver
This release introduces a package which can be used with external storage to offload large payloads to S3 buckets in AWS instead of inlining them into workflow history. See Store and retrieve large payloads with Amazon S3 for more details and how to enable using this driver with external storage.
What's Changed
- Report driver types through worker heartbeat by @jmaeagle99 in #1371
- Emit workflow task duration information via logging by @jmaeagle99 in #1386
- Create cloud-specific tests by @Sushisource in #1389
- Enable options for concurrent payload visiting by @jmaeagle99 in #1344
- Fix command context awareness to apply to all of DataConverter by @jmaeagle99 in #1387
- Some fixes to the openai agents readme by @tconley1428 in #1391
- Add getattr to _ReplaySafeSpan for SDK attribute delegation by @tconley1428 in #1392
- Experimental: AWS S3 storage driver by @jmaeagle99 in #1388
- Allow external storage to run concurrently and separate from codecs by @jmaeagle99 in #1394
- Adjustments to external storage defaults by @jmaeagle99 in #1404
- Bump tar from 0.4.44 to 0.4.45 in /temporalio/bridge by @dependabot[bot] in #1383
- Update types-protobuf limit by @tconley1428 in #1409
- Update storage driver store context metadata by @jmaeagle99 in #1399
- Bump core commit to latest by @THardy98 in #1413
- Move proto check and test to separate job by @jmaeagle99 in #1412
- Minimize task creation for concurrent payload visiting by @jmaeagle99 in #1414
- Add contrib package for lambda workers by @Sushisource in #1408
- Provide standalone activity run ID to external storage by @jmaeagle99 in #1417
- Bump rustls-webpki from 0.103.4 to 0.103.10 in /temporalio/bridge by @dependabot[bot] in #1384
- Add xdist parallel test task by @tconley1428 in #1415
- Upgrade locked dependencies by @tconley1428 in #1420
- Support running ADK agents outside Temporal workflows by @tconley1428 in #1400
- Fix Google ADK activity tool argument dispatch by @tconley1428 in #1421
- docs: document OpenTelemetryConfig and PrometheusConfig fields by @4444J99 in #1385
- A couple of errata for the README regarding external storage by @eamsden in #1424
- Update README to remove local activities experimental warning by @donald-pinckney in #1334
Core Changes
2026-03-13 - a7611dd8 - Remove system.enableNexus dynamic config flag (temporalio/sdk-rust#1151)
2026-03-13 - cf7fcec5 - fix(client): retry WorkflowUpdateHandle::get_result poll (temporalio/sdk-rust#1150)
2026-03-16 - 7a6a53f7 - chore(ci): avoid caching rust on PR (temporalio/sdk-rust#1159)
2026-03-16 - a039b2d6 - feat(sdk): add schedule handle (temporalio/sdk-rust#1132)
2026-03-16 - c6b601de - Fix temporal metrics in C bridge to have temporal_ prefix (temporalio/sdk-rust#1156)
2026-03-17 - 2f9d6c8b - fix(core): avoid panic if workflow stream still up during eviction (temporalio/sdk-rust#1158)
2026-03-17 - f188eb53 - Add external storage drivers to worker heartbeat (temporalio/sdk-rust#1130)
2026-03-18 - db65dd9a - build: make otel opt-in in sdk-core (temporalio/sdk-rust#1154)
2026-03-18 - f00f7337 - Allow poller scale-down on timeout when server supports autoscaling (temporalio/sdk-rust#1164)
2026-03-18 - f384eeb5 - Fix possible NDE in valid child workflow cancel transition (temporalio/sdk-rust#1162)
2026-03-19 - a5e8f7f1 - Update cloud-api protos to v0.12.0 (temporalio/sdk-rust#1172)
2026-03-19 - ba203c64 - fix(sdk): re-poll update futures after workflow state changes (temporalio/sdk-rust#1153)
2026-03-19 - e49359b2 - chore: bump version to 0.2.0 (temporalio/sdk-rust#1169)
2026-03-23 - 4b0d7ed1 - feat(sdk): 💥 add HasWorkflowDefinition trait (temporalio/sdk-rust#1173)
2026-03-24 - 31798a48 - rust-toolchain.toml and MSRV checks in CI (temporalio/sdk-rust#1175)
2026-03-25 - 18615a7a - fix(sdk): serialize unit as no payloads or null payload (temporalio/sdk-rust#1181)
2026-03-25 - acec0e60 - Gate test-only worker telemetry helper (temporalio/sdk-rust#1176)
2026-03-26 - 21b65b87 - feat(sdk): 💥 add typed child workflow handle (temporalio/sdk-rust#1182)
2026-03-26 - 42e44a75 - feat(metrics): add UpDownCounter metric instrument type (temporalio/sdk-rust#1180)
2026-03-27 - 4508ae7d - Update deps & remove unused ones (temporalio/sdk-rust#1183)
2026-03-31 - 76f5c9e1 - fix(sdk): implement FusedFuture for wait_condition (temporalio/sdk-rust#1192)
2026-03-31 - d03d2ae2 - feat(sdk): external workflow handle (temporalio/sdk-rust#1187)
2026-04-01 - 24703da6 - Add standalone activity run id to bridge (temporalio/sdk-rust#1189)
2026-04-01 - 5e6b836c - chore(test): add eventually to latency metrics test (temporalio/sdk-rust#1193)
2026-04-02 - 71a5caa5 - Fix - provide default (empty) client config when default user config dir does not exist. Create an inner function to inject the default config path easily (temporalio/sdk-rust#1194)
2026-04-02 - b3d53ab7 - Validate deployment options and test worker with versioning off and custom build ID (temporalio/sdk-rust#1163)
2026-04-02 - ef6e73b8 - Custom async executor for workflows (temporalio/sdk-rust#1185)
New Contributors
Full Changelog: 1.24.0...1.25.0