releases.shpreview
Home/Temporal
Temporal

Temporal

Graceful worker shutdown now drains already-polled tasks when supported by the server.

When the namespace supports worker poll completion on shutdown, workers now notify the server during shutdown and allow already-polled Workflow, Activity, and Nexus tasks to finish within WorkerStopTimeout. Previously, worker shutdown immediately canceled in-flight polls and could abandon tasks that had already been delivered to the SDK, causing those tasks to be retried or, for workflow tasks, to time out before another worker could continue. Existing shutdown timeout behavior still applies: if work does not complete before WorkerStopTimeout, shutdown proceeds and unfinished work may still be retried by another worker.

Server deployments can enable this capability with frontend.enableCancelWorkerPollsOnShutdown=true.

What's Changed

Full Changelog: https://github.com/temporalio/sdk-go/compare/v1.44.0...v1.44.1

(Experimental) Stand Alone Nexus Operations

NOTE: Stand Alone Nexus Operation Support is experimental and currently only supported on pre-release versions of the [dev server](https://github.com/temporalio/cli/releases/tag/v1.7.1-standalone-nexus-operations).

Added support for Stand Alone Nexus Operations, allowing clients to start and manage Nexus operations directly outside of a Workflow. Operations can be tracked through a NexusOperationHandle that supports getting results, describing, cancelling, and terminating executions. The client also exposes ListNexusOperations, CountNexusOperations, and GetNexusOperationHandle for discovering and reattaching to running operations.

Documentation, Samples, and instructions to request enablement in Temporal Cloud will be linked here when available.

SDK Flag SDKFlagMemoUserDCEncode has been enabled by default

Memo's previously didn't use the user data converter, now the SDK will first use the user data converter, and if user DC errors out, the default DC will be used as a fallback. If that also returns an error, the user DC error will be returned to the caller.

Note that old histories before this flag was flipped on will continue to use the old code path of not using the user DC.

What's Changed

New Contributors

Full Changelog: https://github.com/temporalio/sdk-go/compare/v1.43.0...v1.44.0

DNS Resolver Load Balancing Configuration

A new load balancing feature was added in https://github.com/temporalio/sdk-rust/pull/1212 which has caused networking issues in certain networking setups. This is now disabled by default via the change listed below (https://github.com/temporalio/sdk-typescript/pull/2049).

What's Changed

New Contributors

Features

Bug Fixes

Dependencies

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.17.0...v1.17.1

Highlights

💥 Payload and Memo Size Validation (Experimental)

Within workers, if a payload exceeds the server limits, the worker will eagerly fail the current task instead of uploading the object with the too large payload or memo. This allows the task to be retried instead of entirely failing the workflow from within the server. Additional documentation on how to use this feature will be linked here when available.

External Storage Updates (Experimental)
  • Store and retrieval operations run concurrently with a default limit of 3 concurrent sequence visits per workflow task, thus shortening wall-class time for store and retrieval operations for each workflow task.
  • New Codec Server payload HTTP handler to allow Temporal Web UI and CLI to encode, decode, and download externally stored payloads. Additional documentation on how to use this feature will be linked here when available.
  • 💥 External storage 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.

What's Changed

New Contributors

Full Changelog: https://github.com/temporalio/sdk-go/compare/v1.42.0...v1.43.0

Notable Changes

Features

Bug Fixes

Chores / Cleanup

Dependencies

New Contributors

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.16.0...v1.17.0

Schema changes

Warning

Before upgrading your Temporal Cluster to v1.31.0, you must upgrade core and visibility schema to the following:

  • Core:
    • MySQL schema v1.19
    • PostgreSQL schema v1.19
    • SQLite schema v1.11
  • Visibility:
    • Elasticsearch schema v14
    • MySQL schema v1.14
    • PostgreSQL schema v1.14

Please see our upgrade documentation for the necessary steps to upgrade your schemas.

Please see CHASM section below for more information about the core schema change if you have a custom persistence implementation.

Temporal database schema details

MySQL v1.19, PostgreSQL v1.19, SQLite v1.11 — adds a new current_chasm_executions table for CHASM separate archetype ID spaces:

CREATE TABLE current_chasm_executions(
  shard_id, namespace_id, business_id, archetype_id,
  run_id, create_request_id, state, status, start_version,
  start_time, last_write_version, data, data_encoding,
  PRIMARY KEY (shard_id, namespace_id, business_id, archetype_id)
);
Visibility schema details

MySQL v1.14, PostgreSQL v1.14 — adds TemporalExternalPayloadSizeBytes and TemporalExternalPayloadCount as generated columns with indexes.

Elasticsearch v14 — new index template version with TemporalExternalPayloadSizeBytes and TemporalExternalPayloadCount fields.

CHASM persistence schema change (custom persistence implementations only)

CHASM framework now supports separate businessID spaces for different archetypes and includes corresponding schema changes for SQL core databases. This is achieved by storing multiple current mutable state records in the database, one for each archetype.

If you maintain a custom persistence implementation (Cassandra-based or SQL-based), you must update it to support separate businessID spaces as well. All current mutable state related persistence requests now include a new ArchetypeID field, and your persistence implementation should read or update the current mutable state record for that archetype. Please refer to https://github.com/temporalio/temporal/pull/8907 (Cassandra) or https://github.com/temporalio/temporal/pull/8915 (SQL) for sample changes.


Principal Attribution

Adds a server-computed, immutable Principal field to workflow history events, providing trustworthy attribution for "who did this?". Unlike the client-supplied identity field, Principal is derived from authenticated context and cannot be spoofed.

Principal has a Type / Name pair (e.g. jwt/alice@company.com, temporal/internal) and is surfaced in workflow history, CLI, Web UI, and history exports.

The default Authorizer populates Principal from the JWT sub claim. Users with custom Authorizer implementations can populate Principal by setting the new Principal field on authorization.Result.

To enable this feature, set the dynamic config system.enablePrincipalAttribution to true.

Cloud IAM auth for SQL datastores

https://github.com/temporalio/temporal/pull/9879 introduced new passwordCommand config option for SQL datastores as an alternative to the static password field. When set, Temporal executes the specified command and uses its stdout as the database password, re-running the command on each new physical connection so short-lived credentials stay fresh.

This enables IAM-based auth for cloud-managed databases (e.g. AWS RDS, GCP Cloud SQL) by invoking the provider's CLI. For example, configuring the passwordCommand to:

  • aws rds generate-db-auth-token for AWS RDS
  • gcloud sql generate-login-token for GCP Cloud SQL

Supported for MySQL and PostgreSQL. Token lifetime is managed through existing config maxConnLifetime.

Nexus

💥 Overhaul Nexus error model

Complete rework of how Nexus errors are handled and converted (https://github.com/temporalio/temporal/pull/9290).

This change enables Nexus handler errors and operation errors to convey their own messages as opposed to being wrappers for an underlying cause. The change was made to better support Nexus in all languages. There may be slight changes to errors / exception structures in the SDKs.

Remove Nexus feature flag and make Nexus work out of the box

Nexus is now always enabled (https://github.com/temporalio/temporal/pull/9512).

Use token based routing by default with token-based callback routing (https://github.com/temporalio/temporal/pull/9513).

Nexus caller timeouts

Support schedule-to-start and start-to-close timeouts for Nexus operations. SDK upgrade required.

Bug fixes
Metrics

Worker Versioning

Worker Versioning GA

Worker Deployment APIs are now fully GA. The following APIs have been in Public Preview since server v1.28.0. They are now considered GA and users can rely on the signature and behavior consistency going forward.

  • DescribeWorkerDeployment
  • DeleteWorkerDeployment
  • ListWorkerDeployments
  • SetWorkerDeploymentManager
  • DescribeWorkerDeploymentVersion
  • DeleteWorkerDeploymentVersion
  • SetWorkerDeploymentCurrentVersion
  • SetWorkerDeploymentRampingVersion
  • UpdateWorkerDeploymentVersionMetadata
⚠️💥 Sunsetting Worker Versioning V1 (Version Sets) and V2 (Assignment Rules)

The following APIs which have been deprecated since v1.28.0 are now officially sunsetted and their support will be removed in the next server version (v1.32.0). Users should migrate their applications to use the Worker Deployment and Worker Deployment Version APIs instead.

APIs to be removed in v1.32.0:

  • UpdateWorkerBuildIdCompatibility
  • GetWorkerBuildIdCompatibility
  • UpdateWorkerVersioningRules
  • GetWorkerVersioningRules
  • GetWorkerTaskReachability
New Experimental APIs

The following APIs are added in this release and are in Pre-Release stage as of now. At this stage, the APIs are considered experimental and may see breaking changes in the future:

  • CreateWorkerDeployment
  • CreateWorkerDeploymentVersion
  • UpdateWorkerDeploymentVersionComputeConfig
  • ValidateWorkerDeploymentVersionComputeConfig
Other Changes
  • Add new ContinueAsNew versioning behavior that continues workflows on the ramping version.
  • Fixed bug around stuck workflow after reset when WorkflowUpdate was used.
  • Add deployment name and build ID as separate labels on backlog metrics.
  • Rate-limit worker deployment read APIs and move ListWorkerDeployments to the visibility quota.
  • Cache task queue routing info in the History service to reduce RPC fan-out.
  • Version transition from Drained/Inactive to Draining state upon workflow start/moved via Versioning Override is disabled by default until the implementation is optimized in the next release.
  • Some other minor bug fixes or improvements.

CHASM

  • CHASM framework is enabled by default in this release, but applications built on top of it are NOT enabled by default to allow safe downgrades.
  • CHASM framework now supports separate businessID spaces for different archetypes and includes corresponding schema changes for SQL core databases. See the Schema Changes section above if you maintain a custom persistence implementation.

Standalone Activities

  • Standalone Activities (in public preview) allow activities to run independently of workflows. This feature is gated by the activity.enableStandalone dynamic config flag, which is disabled by default. Set it to true to enable.
  • New APIs and capabilities: DeleteStandaloneActivity API for deleting a standalone activity execution.
  • Durability improvements: server-generated request IDs are now preserved across restarts, a standby task discard handler has been added, and the 1-day retention limit has been removed.
  • PollActivityTaskQueueResponse now includes additional fields needed by workers running without a parent workflow, such as currentAttemptScheduledTime and namespace. Termination and cancellation identity is now propagated through failure info.
  • Multiple timing and retry bugs have been fixed, including the Start-To-Close timeout bug and its metric timestamps, incorrect RetryState for schedule timeouts, and TimerTaskStatus reset issues. Heart beating, RecordActivityTaskStarted, and various error codes also received fixes.
  • Internal task queue name validation has been added for standalone activities and all user-facing APIs.

Task Queue Priority and Fairness GA

  • Task queue priority and fairness features are now GA.
  • As part of that, the new matcher component is enabled by default, which means priority keys are respected by default. The new matcher is fully compatible and switching should be transparent, but if you have any issues you can switch back by setting matching.newUseMatcher to false (affected task queues will reload immediately).
  • As before, fairness can be enabled on a task queue, namespace, or cluster level with the matching.enableFairness dynamic config. Migration between fairness-enabled and fairness-disabled queues is enabled by default.

Cassandra 5 support

  • Temporal Server now supports Cassandra 5.0.4 and later.
  • Cassandra 5 versions earlier than 5.0.4 are not supported.
Helpful links to get you started with Temporal

Temporal Docs Server Samples Server Helm Chart

Docker images

Server Admin-Tools

Full Changelog: https://github.com/temporalio/temporal/compare/v1.30.4...v1.31.0

Notable Changes
  • 💥 The Nexus API has several breaking changes in this release; see items marked 💥 in the sections below. Of particular note: NexusClient has been renamed to NexusServiceClient (#1993), and NexusInboundCallsInterceptor now requires executeStartOperation and executeCancelOperation instead of the old generic execute method (#1979).
Features
  • [worker] Extend bundler to support pre-loading modules into the reusable V8 context via a new preloadModules option on BundleOptions/WorkerOptions.bundleOptions; pre-loaded modules are shared across workflow executions, reducing per-workflow memory and startup overhead (#1999)
  • [nexus] 💥 Add Nexus Inbound Interceptors — NexusInboundCallsInterceptor now exposes executeStartOperation and executeCancelOperation, replacing the previous generic execute interceptor (#1979)
  • [opentelemetry] 💥 Nexus OpenTelemetry support — adds inbound interceptors and distributed trace context propagation across Nexus service boundaries; renames interceptor I/O types from ExecuteNexusOperation* to NexusStartOperation*/NexusCancelOperation*, and adds RunStartNexusOperation and RunCancelNexusOperation span names (#1998)
  • [nexus] 💥 Nexus error serialization now uses Temporal ProtoFailure end-to-end, aligning with other SDKs; also fixes a JS bug where comma-separated case values in gRPC status code mapping silently matched only the last value (#1973)
  • [nexus] 💥 Rename NexusClient to NexusServiceClient in preparation for upcoming Nexus Standalone Operations (#1993)
  • [nexus] Add scheduleToStartTimeout and startToCloseTimeout options to the workflow Nexus client API (#1942)
  • [nexus] Standardize Nexus operation input deserialization error handling: payload codec decode failures are now surfaced as retryable INTERNAL handler errors, while payload converter failures remain non-retryable BAD_REQUEST; ApplicationFailure is passed through directly (#1949)
  • [nexus] Infer workflow result type from WorkflowRunOperationHandlerstartWorkflow now returns WorkflowHandle<WorkflowResultType<T>>, removing the need to explicitly type the handler (#1968)
  • [worker] Allow WorkerDeploymentOptions to omit defaultVersioningBehavior when useWorkerVersioning is false, enabling workers to report a build ID to the Temporal UI without opting into full worker versioning (#1963)
  • [worker] Propagate targetWorkerDeploymentVersionChanged and Continue-As-New suggested reasons for worker deployment versioning trampolining (#1972)
Bug Fixes
  • [client] Suppress spurious unhandled rejection from WithStartWorkflowOperation when executeUpdateWithStart fails before a response is received (#1990)
  • [opentelemetry] Do not mark CompleteAsyncError as a span error (#1989)
  • [opentelemetry] Avoid TypeError when user code throws a non-Error value (#1984)
  • [worker] Tolerate empty rootWorkflowExecution/parentWorkflowExecution objects from pre-v1.24 servers, preventing IllegalStateError on resumed workflows (#1969)
  • [ai] Use activityOptions in callTool proxy (#1954)
Dependencies
  • [core] Update sdk-core (#1959)
  • [deps] Bump vulnerable dependencies (#1957, #1988)
  • [deps] Bump rustls-webpki from 0.103.9 to 0.103.10 (#1978)
  • [deps] Bump quinn-proto from 0.11.13 to 0.11.14 (#1961)
  • [deps] Bump tar (#1976, #1946)

Breaking changes are marked with 💥

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.15.0...v1.16.0

Breaking Changes

💥 Minimum Go version updated to 1.24.0

The minimum Go version for the Go SDK has been updated 1.24.0 due to required dependency updates having this Go version.

💥 Namespace fields for cross-namespace workflow commands are deprecated

As of server 1.30.1, cross-namespace operations are disabled by default. The SDK has been updated to deprecate the corresponding fields and functions:

  • ChildWorkflowOptions.Namespace field is deprecated
  • workflow.WithWorkflowNamespace func is deprecated

Highlights

Serverless Lambda Workers (Pre-Release)

This release introduces a module 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.

AWS S3 Storage Driver (Pre-Release)

This release introduces a module which can be used with external storage to offload large payloads to S3 buckets in AWS instead of inlining them into workflow history. Additional documentation on how to use this feature will be linked here when available.

Serialization Context for Codecs and Converters

This release introduces SerializationContext — an opt-in mechanism that provides metadata (e.g. namespace, workflow ID, activity type, etc...) to DataConverter, PayloadCodec, and FailureConverter implementations during serialization/deserialization.

Bug Fixes

  • Fix standalone activity header propagation so interceptors can access and modify headers.

What's Changed

New Contributors

Full Changelog: https://github.com/temporalio/sdk-go/compare/v1.41.1...v1.42.0