WorkflowOutboundCallsInterceptorhas newsleep(Duration, TimerOptions)andawait(Duration, TimerOptions, String, Supplier)methods. Implementations that don't extendWorkflowOutboundCallsInterceptorBaseneed to add them, and Base subclasses override them to see calls with options.
- Applications can use the experimental
@TransferTypeConvertibleannotation andTransferTypeConverterinterface to convert top-level model values to transfer types. The SDK applies this conversion to workflow, activity, Nexus, and schedule payloads, including failure details.WorkflowClient.getOptions().getDataConverter()returns the transfer-aware converter that the client uses. - Worker heartbeats now report detected Graal native-image and Kotlin runtimes alongside the JVM version. Detection is best effort and respects the worker environment information opt-out. Factory registration overloads accept an implementation class for runtime detection, including Spring Boot workflow registrations.
- Added experimental
ChildWorkflowOptions.Builder.setVersioningOverrideandVersioningOverride.OneTimeVersioningOverridefor explicit pinned, auto-upgrade, and one-time child workflow routing. Invalid child overrides are reported asInvalidVersioningOverrideFailureunderChildWorkflowFailure. Child workflow overrides and one-time routing require Temporal Server 1.32.0 or later. WorkerFactoryOptions.Builder.setLoggerTagPrefixthat can be used to customized structured logging tags (MDC keys) set by Temporal SDK in worker context.- Spring Boot: the
workersattribute of@WorkflowImpl,@ActivityImpland@NexusServiceImplnow resolves property placeholders such as${my.worker.name}, astaskQueuesalready does. Workflow.sleep(Duration, TimerOptions)andWorkflow.await(Duration, TimerOptions, Supplier)let workflows set a summary on the timer behind a sleep or a timed await, likeWorkflow.newTimer(Duration, TimerOptions)already does.- Add nonblocking
Async.awaitoverloads whose promises complete when a workflow condition becomes true or a timeout expires. - Workflow tasks taking longer than 5 seconds now log a
[TMPRL1104]warning reporting the task duration and the external storage downloads and uploads that contributed to it. The threshold is configurable with theTEMPORAL_WORKFLOW_TASK_DURATION_WARN_SECONDSenvironment variable.
- Moved the Spring AI integration to temporalio/ai-integrations.
io.temporal:temporal-spring-ainow publishes a one-time relocation POM toio.temporal:spring-ai:0.1.0; the integration is versioned independently of the SDK. The standalone release requires Java 17+, Spring AI 2, Spring Boot 4, and Temporal Java SDK 1.40.0+. Spring AI 1 / Spring Boot 3 applications should remain onio.temporal:temporal-spring-ai:1.40.xuntil they migrate. Existing Spring AI 1 workflow histories are not replay-compatible; complete those executions or use separate worker deployments. - Release notes for all future releases are now in a single CHANGELOG.md file.
releasesdirectory with old release notes is kept for historical reference. - Added versioned scheduling for asynchronous Temporal stub calls. When enabled, switching between a stub method
reference such as
Async.function(activities::first)and an equivalent lambda such asAsync.function(() -> activities.first())preserves command order during replay. The call runs on a workflow thread, so workflow outbound interceptors can wait while scheduling it. The flag remains disabled by default, and existing unflagged histories retain their previous behavior. TemporalDevServer,TemporalDevServerOptions,TestWorkflowEnvironment.startLocal, and theuseDevServermethods ofTestWorkflowRuleandTestWorkflowExtensionare no longer marked experimental.TemporalDevServerOptionsremain specific to the Temporal CLI dev server implementation and may no longer be valid if that implementation changes.
ActivityClientnow sends thetemporal-namespacegRPC header likeWorkflowClientandScheduleClientdo, so standalone activity calls are no longer rejected withPERMISSION_DENIEDby namespace-scoped auth (e.g. Temporal Cloud API keys).- Kotlin
Asyncmethod references compiled with Kotlin 2.4 now retain their inline behavior, preventingNonDeterministicExceptionwhen replaying workflows started with Kotlin 2.2. For workflows already started with Kotlin 2.4 and SDK 1.40 or earlier, set thetemporal.kotlin.disableStaticAdapterUnwrappingJVM system property to preserve the previous behavior during replay. - Test server now honors retry expiration deadlines that fall exactly on a whole second. Previously such deadlines were
ignored and retries were scheduled past them instead of failing with
RETRY_STATE_TIMEOUT. - Worker heartbeats now list each plugin name once. Previously a plugin registered on both the
WorkflowClientand theWorkerFactorywas listed twice.
Changelogs for releases 1.40 and older are available in releases directory.