[!WARNING] Before upgrading your Temporal Cluster to
v1.31.0, you must upgrade core and visibility schema to the following:
v1.19v1.19v1.11v14v1.14v1.14Please 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.
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)
);
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 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.
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.
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 RDSgcloud sql generate-login-token for GCP Cloud SQLSupported for MySQL and PostgreSQL. Token lifetime is managed through existing config maxConnLifetime.
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.
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).
Support schedule-to-start and start-to-close timeouts for Nexus operations. SDK upgrade required.
CompleteOperation (https://github.com/temporalio/temporal/pull/9053).nexusEndpointsOwnershipLostCh (https://github.com/temporalio/temporal/pull/9602).nexus_task_requests metric with client_name tag (https://github.com/temporalio/temporal/pull/9760).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.
DescribeWorkerDeploymentDeleteWorkerDeploymentListWorkerDeploymentsSetWorkerDeploymentManagerDescribeWorkerDeploymentVersionDeleteWorkerDeploymentVersionSetWorkerDeploymentCurrentVersionSetWorkerDeploymentRampingVersionUpdateWorkerDeploymentVersionMetadataThe 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:
UpdateWorkerBuildIdCompatibilityGetWorkerBuildIdCompatibilityUpdateWorkerVersioningRulesGetWorkerVersioningRulesGetWorkerTaskReachabilityThe 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:
CreateWorkerDeploymentCreateWorkerDeploymentVersionUpdateWorkerDeploymentVersionComputeConfigValidateWorkerDeploymentVersionComputeConfigListWorkerDeployments to the visibility quota.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.activity.enableStandalone dynamic config flag, which is disabled by default. Set it to true to enable.DeleteStandaloneActivity API for deleting a standalone activity execution.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.RetryState for schedule timeouts, and TimerTaskStatus reset issues. Heart beating, RecordActivityTaskStarted, and various error codes also received fixes.matching.newUseMatcher to false (affected task queues will reload immediately).matching.enableFairness dynamic config. Migration between fairness-enabled and fairness-disabled queues is enabled by default.5.0.4 and later.5.0.4 are not supported.Temporal Docs Server Samples Server Helm Chart
Full Changelog: https://github.com/temporalio/temporal/compare/v1.30.4...v1.31.0
Fetched April 29, 2026