-
Added the
Runtime(disable_environment_info=...)option to control whether runtime, hosting, and platform information is included in worker heartbeats. -
temporalio.workflow.uuid7()generates a determinism-safe, time-sortable UUIDv7 (RFC 9562) from workflow time and the workflow's deterministic random generator, complementing the existingworkflow.uuid4()(#1450). The workflow sandbox now also restricts the non-deterministicuuid.uuid7()added to the standard library in Python 3.14, matching the existinguuid.uuid1()/uuid.uuid4()restrictions. -
Experimental:
TemporalOperationHandlercan now use Standalone Activities as asynchronous Nexus Operation backing executions throughTemporalNexusClient.start_activity.
temporalio.contrib.pydanticconverters now reuse Pydantic type adapters for repeated type hints instead of rebuilding their schemas for every payload, greatly speeding up decode of non-model hints such as discriminated unions (#1695). Up to 1024 type adapters are cached per converter instance by default, with least-recently-used eviction. To change the bound, passmax_cached_type_adapterstoPydanticPayloadConverter(orPydanticJSONPlainPayloadConverter) from a nullary subclass used as theDataConverter.payload_converter_class;Nonemakes the cache unbounded and zero disables caching.
- The
google-adkextra now depends onmcp, so fresh installs oftemporalio[google-adk]can importtemporalio.contrib.google_adk_agentswithout separately installingmcp. Previously the import failed with anImportErrorbecausegoogle.adk.tools.mcp_toolonly exportsMcpToolsetwhenmcpis installed. temporalio.contrib.openai_agentsno longer crashes when a plaindictis passed forrun_config. (openai-agents >= 0.19.0 acceptsdictrun configs at its public runner API)
-
Added the
Workermax_eager_activity_reservations_per_workflow_taskoption for configuring the number of activity slots reserved for eager execution per workflow task. Configured values must be positive; usedisable_eager_activity_executionto disable eager activity execution. -
Added experimental SDK payload converter support for values and type hints decorated with
@transfer_type_convertible(...)using aTransferTypeConverterclass. 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_nameto verify the server certificate against a fixed name instead of the connection's server name. Unlikedomain, 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. Requiresserver_root_ca_cert. -
Added the experimental
Workerpatch_activation_callbackoption, allowing workers to decide whether a first non-replayworkflow.patchedcall should activate a patch during rolling deployments. -
Added external storage support to Nexus task handling.
- 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 aFixedentry announcing the behavior change.
- Custom workflow runners that construct
WorkflowInstanceDetailsmust now passpayload_converter_factoryinstead ofpayload_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.systemAPIs are marked experimental and subject to change. - Payload size limits have moved from
DataConvertertoClient.connect. Passpayload_limits=PayloadLimitsConfig(...)(now exported fromtemporalio.client) instead of settingpayload_limitsonDataConverter. Config fields were renamed topayloads_warn_sizeandmemo_warn_size, and the deprecatedPayloadSizeWarningwas removed.
- Marked system Nexus envelope payloads so nested payloads can be detected and visited after the envelope is already stored as a payload.
- 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_intervalfor continue-as-new, to allow the new workflow to start after a delay.
- AWS Lambda worker
configureparameter 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.
- AWS Lambda worker
configureparameter 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 beforerun_workeris invoked.
- Added experimental
temporalio.workflow.signal_with_start_workflow, backed by generated system Nexus bindings forWorkflowService.SignalWithStartWorkflowExecution. - Added OpenAI Agents plugin support for
CustomTooldispatch, including lazy tool discovery throughdefer_loading.
- Client connections now use gzip transport-level gRPC compression by default.
Pass
grpc_compression=GrpcCompression.NONEtoClient.connectorCloudOperationsClient.connectto disable it.
StartWorkflowUpdateWithStartInputnow owns the authoritativerpc_metadataandrpc_timeoutfields forOutboundInterceptor.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
breakpoint()andpdb.set_trace()inside workflow code when a worker runs withdebug_mode=TrueorTEMPORAL_DEBUG=1; sandboxed workflows without debug mode now get a clearer error pointing todebug_mode=True. - Fixed
start_update_with_start_workflowinterceptor handling so RPC metadata and timeouts are forwarded to the underlyingexecute_multi_operationcall. - 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
Clientacross event loops or threads (e.g. the dedicated-loop pattern used with gevent/gunicorn and synchronous services). Note this does not make aClientfully thread- or loop-agnostic; reusing one long-lived loop is still the recommended pattern.