|
| 1 | +# **💥 BREAKING CHANGES** |
| 2 | + |
| 3 | +## `ActivityInfo` properties related to workflow execution are now nullable |
| 4 | + |
| 5 | +Due to introduction of Standalone Activities feature (see below), the prior assumption that every activity has |
| 6 | +a scheduling workflow no longer holds true. As a consequence, `ActivityInfo` methods `getWorkflowId`, `getRunId`, |
| 7 | +`getWorkflowRunId`, `getWorkflowType` and `getWorkflowNamespace` are now marked `@Nullable`. |
| 8 | + |
| 9 | +As long as Standalone Activities are not being used, it is safe to ignore the resulting nullability errors. |
| 10 | +However, the recommended migration path is to call `ActivityInfo.isInWorkflow()` method and handle both cases |
| 11 | +- this way the activity can be run in standalone context. |
| 12 | + |
| 13 | +# **Highlights** |
| 14 | + |
| 15 | +## Spring AI integration |
| 16 | + |
| 17 | +The new temporal-spring-ai module makes [Spring AI](https://spring.io/projects/spring-ai) agents durable on Temporal. |
| 18 | +Chat model calls run as Temporal Activities recorded in workflow history, so they retry on transient failures and replay |
| 19 | +deterministically. Tools are dispatched per their type — `@ActivityInterface` stubs and Nexus stubs as durable operations, |
| 20 | +`@SideEffectTool` classes wrapped in `Workflow.sideEffect`, and plain tools running directly in workflow code — without |
| 21 | +changing how you write Spring AI code. Vector stores, embeddings, and MCP tool calls are auto-registered when their |
| 22 | +Spring AI modules are on the classpath. (#2829) |
| 23 | + |
| 24 | +## Worker Heartbeating |
| 25 | + |
| 26 | +This release adds a new feature called Worker Heartbeating. This feature spins up a single nexus-only worker per |
| 27 | +Client/Namespace in the background and periodically sends some basic metrics over to server for all of the workers |
| 28 | +registered on the same Client/Namespace. This feature is enabled by default. You can interact with the heartbeat data |
| 29 | +using CLI commands temporal worker list and temporal worker describe to query the data. (#2818) |
| 30 | + |
| 31 | +## Standalone Activities (Pre-release) |
| 32 | + |
| 33 | +Activities can now be started directly, independent of any workflow. Use the new `ActivityClient` class to start, fetch |
| 34 | +results, and manage lifecycle of Standalone Activity executions. Learn more at https://docs.temporal.io/standalone-activity |
| 35 | +- Java SDK specific docs coming soon. |
| 36 | + |
| 37 | +Note: although the Server feature is available as Public Preview, Java SDK's implementation is currently still in |
| 38 | +pre-release stage. (#2858) |
| 39 | + |
| 40 | +## gRPC Version Upgrade |
| 41 | + |
| 42 | +Upgraded gRPC dependency to 1.76.0 to resolve network stream corruption issue that could happen if multiple |
| 43 | +Netty versions are present in the classpath. (#2866) |
| 44 | + |
| 45 | +# **Bugfixes** |
| 46 | + |
| 47 | +Provide default (empty) client config when default user config dir does not exist (#2828) |
| 48 | + |
| 49 | +Add explicit opt-in flags for activity/nexus bean auto-discovery in Spring Boot (#2830) |
| 50 | + |
| 51 | +Fix worker options default application overriding poller behavior (#2838) |
| 52 | + |
| 53 | +# What's Changed |
| 54 | + |
| 55 | +2026-04-06 - 522d6698 - Fix - provide default (empty) client config when default user config dir does not exist (#2828) |
| 56 | +2026-04-06 - 80e6a1c5 - Claude fix all docstring problems & add check to CI (#2822) |
| 57 | +2026-04-07 - 187b778e - Deprecate namespace field in ChildWorkflowOptions (#2831) |
| 58 | +2026-04-07 - 2bbf52db - Worker Heartbeating (#2818) |
| 59 | +2026-04-07 - f4a26e02 - Fix native-image CI docker build flake (#2832) |
| 60 | +2026-04-07 - f8ddd7e3 - Add doc comment saying when `SKIP_YIELD_ON_VERSION` was enabled by (#2825) |
| 61 | +2026-04-08 - 8716d220 - Add explicit opt-in flags for activity/nexus bean auto-discovery in Spring Boot (#2830) |
| 62 | +2026-04-13 - 05ee8279 - chore: bump workflowcheck asm version for latest JDK version support (#2835) |
| 63 | +2026-04-15 - dce350c0 - Fix worker options default application overriding poller behavior (#2838) |
| 64 | +2026-04-17 - 686a62d9 - Add temporal-spring-ai module (#2829) |
| 65 | +2026-04-17 - b6f4283e - Bump JDK version requirement in Gradle and CI (#2845) |
| 66 | +2026-04-18 - a9389e66 - Update and pin all GHA actions (#2847) |
| 67 | +2026-04-20 - 69bbb6e1 - Update Required Temporal Java SDK version in Spring AI README to next upcoming release (#2849) |
| 68 | +2026-04-21 - d3c157ce - Revise README for project name and preview warning (#2850) |
| 69 | +2026-04-23 - 64d5b2e9 - temporal-spring-ai: guard large media byte[] from entering workflow history (#2860) |
| 70 | +2026-04-23 - cad6172d - temporal-spring-ai: attach activity summaries for chat and MCP calls (#2852) |
| 71 | +2026-04-23 - ccaf4a62 - temporal-spring-ai: accept ActivityOptions and classify non-retryable AI errors (#2853) |
| 72 | +2026-04-24 - 87c519e6 - temporal-spring-ai: discover MCP clients by type, not by bean name (#2859) |
| 73 | +2026-04-24 - 9eae4a8c - temporal-spring-ai: add side-effect replay tests for chat, activity tools, and @SideEffectTool (#2856) |
| 74 | +2026-04-24 - c402f55f - temporal-spring-ai: README expansion and default-model-name consolidation (#2861) |
| 75 | +2026-04-24 - f109c0cc - temporal-spring-ai: preserve Usage and RateLimit in ChatResponse metadata (#2854) |
| 76 | +2026-04-27 - 79c9fe59 - temporal-spring-ai: per-model ActivityOptions registry (#2855) |
| 77 | +2026-04-27 - 911dd02c - temporal-spring-ai: pass provider-specific ChatOptions through the activity boundary (#2857) |
| 78 | +2026-04-27 - cddafe4b - Setup `contrib/` directory with CODEOWNERS that is extensible for non-SDK team extensions. (#2862) |
| 79 | +2026-04-30 - 38923947 - 💥 Standalone Activities for Java (#2858) |
| 80 | +2026-04-30 - 4b2c2941 - Update Temporal Cloud-API to v 0.14.0 (#2864) |
| 81 | +2026-04-30 - a2c6f37f - Upgraded gRPC to 1.76.0 and Guava to 33.4.8 (#2866) |
0 commit comments