Skip to content

Releases: temporalio/sdk-python

1.23.0

18 Feb 17:52
645ad32

Choose a tag to compare

💥 Breaking Changes

💥 Experimental standalone activity support in #1307

  • activity.Info modified to make workflow_id, workflow_namespace, workflow_run_id, and workflow_type optional
    • 💥 SLIGHT BREAKING CHANGE for those manually expecting non-None fields or manually creating the info for tests
  • converter.BaseWorkflowSerializationContext intermediate base class removed
    • 💥 SLIGHT BREAKING CHANGE for those that may have counted on this newly created class, though most should use specific types
  • Updated converter.ActivitySerializationContext to make workflow_id and workflow_type optional, updated activity_type and activity_task_queue to be optional and deprecated, and added optional activity_id
    • 💥 SLIGHT BREAKING CHANGE for those that may have expected these to always be present during serialization, though they'll continue to be present unless you use standalone activities

💥 Payload limit configuration and validation by @jmaeagle99 in #1288

Update worker to get memo and payload error limits from Temporal server and enforce those limits by default. The SDK will now eagerly fail a task that has too large payloads instead of uploading them to the server and having the server fail the workflow. If the server doesn't report error limits, error limits are not enforced in the worker.

Other Changes

  • Nexus Worker Shutdown Notification and Tests by @VegetarianOrc in #1318
  • Expose default activity info via static method by @cretz in #1308
  • Bump protobuf from 6.33.0 to 6.33.5 by @dependabot[bot] in #1313
  • Bump bytes from 1.10.1 to 1.11.1 in /temporalio/bridge by @dependabot[bot] in #1317
  • Add random seed access and callback methods to temporalio.workflow by @tconley1428 in #1320
  • Add workflow context to signal deserialization error log by @cretz in #1325
  • Add OpenTelemetry v2 integration with enhanced features and comprehensive testing by @tconley1428 in #1314

Full Changelog: 1.22.0...1.23.0

Notable Core Fix

2026-02-17 - 20a68176 - Poller autoscaler: further refinement of backoff on grpc errors #1111

  • Prevents potential retry storm on GPRC_RESOURCE_EXHAUSTED when using poller autoscaling.

Core SDK Updates

2026-01-29 - f837d73e - Add CAN versioning and suggested reasons to core protos #1104
2026-02-03 - 5045af35 - Plumb initial versioning behavior #1107
2026-02-03 - cd92f915 - Fix TemporalPatchVersion search attribute type to use KeywordList format #1106
2026-02-04 - 231e21ca - Fix incorrect metric kind repported in Buffered Metrics #1108
2026-02-12 - 7ecb7c05 - Poller autoscaler: add backoff on ResourceExhausted errors #1110
2026-02-13 - fb14d9c3 - Fix recording workflow termination metrics before receiving server response #1112
2026-02-17 - 12c656f7 - Remove extra license file from macros. Causing build failures in Python features tests #1116
2026-02-17 - 20a68176 - Poller autoscaler: further refinement of backoff on grpc errors #1111

1.22.0

03 Feb 21:01
f36ceb4

Choose a tag to compare

Highlights

  • Deployment-based Worker Versioning APIs are in General Availability.
  • Environment Configuration is in General Availability.

What's Changed

Bug Fixes

Dependency Updates

sdk-core changes

2025-12-18 - 12bc359b - Fix wf_task_replay_latency metric recording for non-replay tasks (temporalio/sdk-core#1083)
2026-01-06 - 66ddab4b - Downgrade worker heartbeat log (temporalio/sdk-core#1088)
2026-01-08 - cc1ed609 - Clarifying comment for worker heartbeating's use of latency metric (temporalio/sdk-core#1089)
2026-01-09 - d8a2bf19 - Always send shutdown_worker RPC, fix WorkerStatus state when shutting down worker (temporalio/sdk-core#1082)
2026-01-12 - 372b2708 - Fix bug where we count first WFT as sticky cache hit (temporalio/sdk-core#1091)
2026-01-13 - d104a77d - Update api_upstream to v1.60.0 (temporalio/sdk-core#1090)
2026-01-15 - 5c9bcd10 - Add Request Deadline as timestamp to NexusTask (temporalio/sdk-core#1094)
2026-01-23 - 22cd04bc - Update upstream_api to v1.61.0 (temporalio/sdk-core#1100)
2026-01-23 - 9dedad11 - Update Worker validate to allow SDKs to get namespace limit information (temporalio/sdk-core#1102)

New Contributors

Full Changelog: 1.21.1...1.22.0

1.21.1

19 Dec 22:11
f0bd341

Choose a tag to compare

PyPI

Bug Fixes

  • Dynamic handlers now support typing.Sequence and collections.abc.Sequence for their third argument.
  • Add compatibility with OpenAI Agents SDK 0.6.4.

Specific Changes

2025-12-19 - 772050e - Add backward compatibility for dynamic handler signatures (#1258) 2025-12-19 - f0bd341 - OpenAI - Fix generics is instance (#1261)

1.21.0

18 Dec 21:27
44770ff

Choose a tag to compare

PyPI

TLS Automatically Enabled When API Key Provided

When creating a Client, specifying the api_key option will now automatically enable TLS. Users that wish to use an API Key without TLS enabled must explicitly pass tls=False when creating their client. See Client.connect for a detailed description of configuration options and behavior.

Highlights

  • Core was upgraded from 45b1d7e to b5a473d.
  • Advanced users may specify the environment variable TEMPORAL_POLL_SHUTDOWN_INTERRUPT_WAIT_MS to specify a wait time before interrupting polls during shutdown.
  • Loosened dependency ceiling for OpenAI Agents SDK to <= 0.7

Bug Fixes

  • Client.config() and Worker.config() now properly return a copy of the config passed during creation instead of the "active" config that may have been modified. Users that wish to get a copy of the config currently in use may pass active_config=True to both methods.

Breaking changes

  • TLS will automatically be enabled when api_key is specified.
  • The type for nexus_task_exectuor option for Worker was narrowed from concurrent.futures.Executor to concurrent.futures.ThreadPoolExecutor.
  • The unused arguments static_summary and static_details options in Client.create_schedule have been removed.
  • Dynamic Handlers now use collections.abc.Sequence instead of typing.Sequence for their third argument.
  • Types that were deprecated as of Python 3.9 have been updated to use the recommended alternative for Python 3.10+.

Specific Changes

2025-12-02 - 27096aa - Store initial configuration and provide it in config() by default (#1226)
2025-12-02 - cc19379 - 💥 Enable TLS if api key provided (#1229)
2025-12-03 - 90dda94 - Add retrying of workflow validation errors only on python 3.10 (#1223)
2025-12-03 - a48cece - Support RequestIdReference in Nexus Links (#1228)
2025-12-04 - 3400d8c - Remove file exclusions for pyright (#1235)
2025-12-04 - 96e2dab - Doc fixes (#1241)
2025-12-08 - 4439675 - Update for 3.10 best practices (#1236)
2025-12-08 - 6a3385b - upload nightly tps metrics to s3 (#1242)
2025-12-08 - 89fb17f - 💥 Nexus MetricMeter Support (#1233)
2025-12-09 - fd17cdf - 💥 Remove unused metadata from client.create_schedule. Ensure WorkflowHistoryEventAsyncIterator.fetch_next_page uses the provided page_size override when called (#1247)
2025-12-10 - 8ac0a9e - Install built wheel directly in build-binaries (#1245)
2025-12-10 - b0adaae - Nexus interceptors (#1218)
2025-12-16 - 7cfc65b - Update core (#1253)
2025-12-17 - c5eb6e2 - Replace WorkflowIdReusePolicy.TerminateExisting by WorkflowIdConflictPolicy (#1243)
2025-12-18 - 1f9e315 - Update dependency ceiling for OpenAI agents (#1256)

1.20.0

25 Nov 21:42
dbcbc08

Choose a tag to compare

PyPI

Worker Heartbeating (Public Preview)

This release adds a new feature called Worker Heartbeating. This feature spins up a single nexus-only worker per Client/Namespace/Task Queue in the background and periodically sends some basic metrics over to server for all of the workers registered on the same Client/Namespace/Task Queue.

Server version 1.29.1 and newer supports this feature. This feature will be enabled by default, although this currently requires a server dynamic config flag, --dynamic-config-value frontend.WorkerHeartbeatsEnabled=true to enable. Currently, the only way to interact with this new data is to also enable the flag --dynamic-config-value frontend.ListWorkersEnabled=true, then use CLI commands temporal worker list and temporal worker describe to query the data. If heartbeating is enabled with a server version older or with the config flag off, a single warning log Worker heartbeating configured for runtime, but server version does not support it. on worker startup will emit.

Highlights

  • Core was upgraded from 682d441 to 45b1d7e.
  • Runtime use across forks now eagerly fails, making it fail in a more obvious way. Specifically, using a Runtime from a different process ID will now eagerly fail.

Breaking changes

  • Core crate names have changed, see temporalio/sdk-core#1034 for more details. If users are directly referencing these crate names, like for setting log levels, they will need to be updated to the new names.

Specific Changes

2025-11-17 - 5d1630d - Nexus task cancellation (#1204)
2025-11-17 - ceb7058 - Prevent Runtime use over forks (#1208)
2025-11-21 - 3fd1c7e - Fix up plugin readme (#1211)
2025-11-24 - 6d2924b - Add Summary to Nexus operations (#1219)
2025-11-24 - 77f2346 - use sys.stdlib_module_names in restrictions. Move dynamic import warning to only apply to non-passed through modules (#1222)
2025-11-25 - b5001f9 - Update Core, configure worker types, send plugin names to Core (#1157)

1.19.0

13 Nov 22:38
11e8650

Choose a tag to compare

Sandbox Importing Changes

Modules imported after workflows have been loaded into the sandbox now produce a warning message by default. See the Import Notification Policy docs for more info and customization options.

OpenAI Agents Changes

  • Add new upper bound of version 0.5.0 for openai-agents

Breaking Changes

  • Python 3.9 support has been removed now that it has reached end of life status.
  • Plugin interfaces have been updated to use invocation provided callables instead of initializers.
  • MCPServerProviders now require a name argument.
  • TestModel and TestModelProvider have been moved from temporalio.contrib.openai_agents to temporalio.contrib.openai_agents.test

Specific Changes

2025-09-30 - 4a70f3d - Update version to 1.18.1 (#1135)
2025-10-01 - a31886d - Serialization context (#1102)
2025-10-02 - 4f08626 - Use type in start/execute activity/workflow to address Pyright Strict mode error (#1137)
2025-10-06 - 26e2e61 - Generate RPC calls in Bridge Client (#1123)
2025-10-06 - 5ca4861 - Provide option to disable activity registration (#1140)
2025-10-07 - 42fe382 - Flaky session test (#1141)
2025-10-07 - 5e93e63 - 💥 Plugin Overhaul (#1139)
2025-10-07 - d27bb11 - Move visitor, bridge client generation, and formatting to poe tasks (#1142)
2025-10-07 - e4df5e7 - Add googleapis-common-protos to fix tests in build-binaries workflow (#1143)
2025-10-09 - cde3427 - Use macOS 15 intel runners (#1148)
2025-10-14 - 162cff7 - 💥 Allow arguments to be provided to MCP Server creation (#1147)
2025-10-14 - 70deb94 - Replace Proto modules with the python path (#1156)
2025-10-14 - 788d391 - Remove experimental notices for worker tuners (#1152)
2025-10-16 - 2ad41ab - Replace tctl references with Temporal CLI (#1165)
2025-10-16 - 2efd9a7 - Add start_update_with_start_workflow to Otel Interceptor (#1150)
2025-10-20 - 4fe685a - Allow h2 error message (#1170)
2025-10-20 - 778fc9a - Support python 3.14 and deprecate python 3.9 (#885)
2025-10-20 - f03ddc2 - Add programming language classifiers to fix badge on next publish (#1151)
2025-10-22 - 5994a45 - Avoid token detaching from different context (#1153)
2025-10-22 - c8cbfe0 - Modify code comment for Worker build_id field #1160 (#1163)
2025-10-24 - 7f794d0 - Update license in pyproject.toml (#1175)
2025-10-24 - 988b12c - Allow openai 0.4, update lock to use it (#1182)
2025-10-25 - 27903f7 - Add nightly throughput stress (#1173)
2025-10-27 - 231cc67 - Adds proper failure decoding in workflow activation (#1192)
2025-10-27 - 630a031 - Match openai logic to retry on >= 500 not == 500 (#1181)
2025-10-27 - 8f754b4 - Opentelemetry baggage propagation fix (#1174)
2025-10-27 - ba3d50f - Add a test for split worker scenario (#1193)
2025-10-27 - e39e8f2 - Add option to run models as local activities (#1183)
2025-10-28 - 0eb96eb - Sandbox importing (#1187)
2025-10-28 - c3448cc - Skip flaky test on versions with importer bug (#1195)
2025-10-29 - 1b70f07 - Tps nightly small improvements (#1200)
2025-10-30 - 35347b9 - Fix: Resolve TypeError in value_to_type on Python 3.13 (issue #1188) (#1189)
2025-10-30 - 5f24792 - 💥 Expose agent testing utils (#1164)
2025-10-30 - 660ac2b - VLN-492: Set explicit permissions for GitHub Actions workflows (#1199)
2025-10-30 - a08250a - refactor: use classmethod in factory methods (#1179)
2025-11-06 - 4156856 - fix: typo in time sandboxed utilities (#1205)
2025-11-06 - e543e8a - fix: typed search contains should work for falsy values (#1206)

1.18.2

27 Oct 19:25

Choose a tag to compare

PyPI

Bug fixes

  • Ensure cause fields of Failure protos are encoded with user codecs.

Specific Changes

2025-10-27 - e4969c0 - Adds proper failure decoding in workflow activation (#1192)

Full Changelog: 1.18.1...1.18.2

1.14.2

23 Oct 16:25

Choose a tag to compare

PyPI

Bug fixes

  • Pin nexus-rpc version to prevent accidental upgrade to a breaking version.

Specific Changes

2025-10-23 - 988ad10 - Lock nexus-rpc to 1.1.0

Full Changelog: 1.14.1...1.14.2

1.18.1

30 Sep 15:01
4a70f3d

Choose a tag to compare

PyPI

Bug fixes

  • Search attributes on child workflows would fail when using a payload codec
  • Looping agent handoffs would try to use the original model outside an activity

Specific Changes

2025-09-24 - 2f04a16 - Fix flaky test: test_workflow_return_is_honored_when_it_precedes_signal_completion_command (#1115)
2025-09-24 - 6dd59dd - Fix flaky test: test_workflow_patch_memoized (#1114)
2025-09-25 - fd51efa - Fix model replacement on looping handoffs (#1122)
2025-09-29 - 02322ad - pytest and pydoctor QOL improvements (#1124)
2025-09-29 - 1afaa44 - Fix flaky test: test_workflow_cancel_activity (#1119)
2025-09-29 - 47781f7 - Fix Flaky Test: test_custom_slot_supplier (#1126)
2025-09-29 - 4e9cbab - Fix search attribute skipping on protos which don't use the SearchAttributes message type (#1131)
2025-09-29 - e92514a - Extend timeout on test_session execution (#1128)
2025-09-29 - ed1f6ca - Expose strict_json_schema in activity_as_tool (#1094)

Full Changelog: 1.18.0...1.18.1

1.18.0

19 Sep 23:41
3fe7e42

Choose a tag to compare

PyPI

OpenAI Agents Changes

  • Support and new lower bound of version 0.3.0 for openai-agents
  • Workflow failure exceptions will now correctly fail the workflow from inside the Runner
  • Expanded MCP support

Breaking Changes

  • The encode_failure method on PayloadConverter is no longer called in all cases it once was, using encode_payload instead. This only affects custom PayloadConverter implementations which overload encode_failure to work differently from encode_payload
  • The advanced WorkerTuner.create_composite has a new required field: nexus_supplier
  • Only enable native roots if CA override not specified - see temporalio/sdk-core#1007 in sdk-core

Specific Changes

2025-09-02 - 3f7bd33 - Fix build binaries (#1074)
2025-09-03 - 42135f0 - Delete unused helper (#710)
2025-09-03 - 70e5bea - Fix nexus cancellation wait completed test (#1073)
2025-09-03 - a004faa - Python support for activity reset (#1065)
2025-09-03 - a3c5370 - Bump tracing-subscriber from 0.3.19 to 0.3.20 in /temporalio/bridge (#1068)
2025-09-03 - a46a742 - Fix code sample alignment & trim trailing whitespace (#1038)
2025-09-03 - bef76a6 - Even more convenient proto generation (#1039)
2025-09-03 - c643e8a - Tweak .result() doc (#706)
2025-09-03 - c8b0b78 - Reraise workflow failure errors from OpenAI's UserError (#1060)
2025-09-04 - 44412ae - Expose Last Completion Result and Previous Run Failure (#1067)
2025-09-04 - 5e9b2ba - Minor edits and code cleanup (#609)
2025-09-04 - 7be26da - Add a test for output type coercion (#1076)
2025-09-04 - c3426ce - Fix return type of workflow.wait (#650)
2025-09-04 - e92f391 - Add Summary to LocalActivityConfig and apis (#1061)
2025-09-08 - 9372d47 - Fix openai plugin bug (#1083)
2025-09-09 - 30a6b8d - Only set payload converter, fail if already set (#1086)
2025-09-09 - 44f0c42 - Added retry policy to activity info (#1055)
2025-09-10 - 101d89d - Don't set error status on otel spans for benign exceptions (#1085)
2025-09-10 - 634c5ec - 💥 Add generic payload visitor for WorkflowActivation[Completion] (#1075)
2025-09-10 - 706c89b - Changes to adapt to openai version 0.2.11 (#1092)
2025-09-11 - e782160 - uv.lock (#1096)
2025-09-12 - 9d70d44 - Add support for gRPC binary metadata values (#1070)
2025-09-12 - ce8dc4a - Remove validatoriterator workarounds (#1046)
2025-09-13 - 84b184f - Nexus worker concurrency control (#1066)
2025-09-16 - 2a2b83b - Update protobuf (#1082)
2025-09-18 - 0e1fa4f - Make env config TLS disabled field optional (#1105)
2025-09-19 - 7605619 - Rename mcp_servers to mcp_server_providers (#1110)
2025-09-19 - 8c4e2c8 - MCP server support (#1021)