From 9228f8fa4c7242e3524209eee5e5126995727f00 Mon Sep 17 00:00:00 2001 From: Joie Wu Date: Wed, 14 Oct 2026 11:23:25 -0700 Subject: [PATCH 1/6] Mark standalone Nexus operations as Public Preview Remove experimental annotations from standalone Nexus client APIs and their client interceptors. Document Public Preview availability and our aim to preserve backward compatibility and avoid breaking changes in the Javadoc. Refs NEXUS-269 --- .../src/main/java/io/temporal/client/NexusClient.java | 5 +++-- .../main/java/io/temporal/client/NexusClientImpl.java | 2 -- .../java/io/temporal/client/NexusClientOptions.java | 5 +++-- .../client/NexusOperationAlreadyStartedException.java | 5 +++-- .../client/NexusOperationCancellationInfo.java | 5 +++-- .../io/temporal/client/NexusOperationException.java | 9 ++++++--- .../temporal/client/NexusOperationExecutionCount.java | 10 ++++++---- .../client/NexusOperationExecutionDescription.java | 7 ++++--- .../client/NexusOperationExecutionMetadata.java | 5 +++-- .../temporal/client/NexusOperationFailedException.java | 5 +++-- .../java/io/temporal/client/NexusOperationHandle.java | 5 +++-- .../client/NexusOperationNotFoundException.java | 5 +++-- .../java/io/temporal/client/NexusServiceClient.java | 5 +++-- .../io/temporal/client/NexusServiceClientImpl.java | 2 -- .../io/temporal/client/StartNexusOperationOptions.java | 5 +++-- .../temporal/client/UntypedNexusOperationHandle.java | 5 +++-- .../io/temporal/client/UntypedNexusServiceClient.java | 5 +++-- .../temporal/client/UntypedNexusServiceClientImpl.java | 2 -- .../interceptors/NexusClientCallsInterceptor.java | 5 +++-- .../interceptors/NexusClientCallsInterceptorBase.java | 5 +++-- .../common/interceptors/NexusClientInterceptor.java | 5 +++-- .../interceptors/NexusClientInterceptorBase.java | 10 ++++++---- 22 files changed, 67 insertions(+), 50 deletions(-) diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java b/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java index 2324a6592e..703f7c4de5 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import io.temporal.serviceclient.WorkflowServiceStubs; import java.lang.reflect.Type; import java.util.stream.Stream; @@ -44,11 +43,13 @@ *

For visibility queries across all operations in the namespace, see {@link * #listNexusOperationExecutions} and {@link #countNexusOperationExecutions}. * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + * * @see NexusServiceClient * @see UntypedNexusServiceClient * @see NexusOperationHandle */ -@Experimental public interface NexusClient { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java b/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java index a9248e80b1..66eb0818e3 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java @@ -3,7 +3,6 @@ import static io.temporal.internal.WorkflowThreadMarker.enforceNonWorkflowThread; import com.uber.m3.tally.Scope; -import io.temporal.common.Experimental; import io.temporal.common.interceptors.NexusClientCallsInterceptor; import io.temporal.common.interceptors.NexusClientCallsInterceptor.CountNexusOperationExecutionsInput; import io.temporal.common.interceptors.NexusClientCallsInterceptor.CountNexusOperationExecutionsOutput; @@ -25,7 +24,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Experimental public class NexusClientImpl implements NexusClient { private static final Logger log = LoggerFactory.getLogger(NexusClientImpl.class); diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java b/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java index 414cd3c568..14f29d759d 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.common.converter.GlobalDataConverter; import io.temporal.common.interceptors.NexusClientInterceptor; @@ -31,8 +30,10 @@ * .setDataConverter(myDataConverter) * .build(); * } + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public class NexusClientOptions { private static final String DEFAULT_NAMESPACE = "default"; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java index 42c8155139..7e1250819c 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import javax.annotation.Nullable; /** @@ -9,8 +8,10 @@ * completed run that conflicts with the requested {@link * StartNexusOperationOptions#getIdReusePolicy()} / {@link * StartNexusOperationOptions#getIdConflictPolicy()}). + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public final class NexusOperationAlreadyStartedException extends NexusOperationException { private final String operation; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java index 2a89426666..0cca95e87b 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java @@ -3,7 +3,6 @@ import com.google.common.base.Strings; import io.temporal.api.enums.v1.NexusOperationCancellationState; import io.temporal.api.nexus.v1.NexusOperationExecutionCancellationInfo; -import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.internal.common.ProtobufTimeUtils; import java.time.Instant; @@ -13,8 +12,10 @@ /** * Information about a cancellation request issued against a standalone Nexus operation execution. * Returned by {@link NexusOperationExecutionDescription#getCancellationInfo()}. + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public final class NexusOperationCancellationInfo { private final NexusOperationExecutionCancellationInfo info; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java index 0527aeb926..e8aee2c948 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java @@ -1,11 +1,14 @@ package io.temporal.client; -import io.temporal.common.Experimental; import io.temporal.failure.TemporalException; import javax.annotation.Nullable; -/** Base exception for standalone Nexus operation execution failures. */ -@Experimental +/** + * Base exception for standalone Nexus operation execution failures. + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + */ public abstract class NexusOperationException extends TemporalException { private final String operationId; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java index 271671cf57..16ba8d8117 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java @@ -1,7 +1,6 @@ package io.temporal.client; import io.temporal.api.common.v1.Payload; -import io.temporal.common.Experimental; import io.temporal.internal.common.SearchAttributesUtil; import java.util.Collections; import java.util.List; @@ -9,12 +8,15 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; -/** Result of counting standalone Nexus operation executions. */ -@Experimental +/** + * Result of counting standalone Nexus operation executions. + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + */ public class NexusOperationExecutionCount { /** An individual aggregation group. */ - @Experimental public static class AggregationGroup { private final List> groupValues; private final long count; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java index 4717bcdbe4..377ba1d00f 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java @@ -4,7 +4,6 @@ import io.temporal.api.enums.v1.PendingNexusOperationState; import io.temporal.api.nexus.v1.NexusOperationExecutionInfo; import io.temporal.api.workflowservice.v1.DescribeNexusOperationExecutionResponse; -import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.internal.common.ProtobufTimeUtils; import io.temporal.internal.common.SearchAttributesUtil; @@ -18,8 +17,10 @@ /** * Detailed information about a standalone Nexus operation execution, returned by {@link * UntypedNexusOperationHandle#describe()}. + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public final class NexusOperationExecutionDescription extends NexusOperationExecutionMetadata { private final DescribeNexusOperationExecutionResponse response; @@ -54,7 +55,7 @@ public NexusOperationExecutionDescription( this.dataConverterWithNexusContext = dataConverterWithNexusContext; } - /** Underlying proto response. Exposed while the Nexus SDK surface is still experimental. */ + /** Underlying proto response. */ @Nonnull public DescribeNexusOperationExecutionResponse getRawResponse() { return response; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java index f5e68792f6..5a68a374df 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java @@ -3,7 +3,6 @@ import com.google.common.base.Strings; import io.temporal.api.enums.v1.NexusOperationExecutionStatus; import io.temporal.api.nexus.v1.NexusOperationExecutionListInfo; -import io.temporal.common.Experimental; import io.temporal.common.SearchAttributes; import io.temporal.internal.common.ProtobufTimeUtils; import io.temporal.internal.common.SearchAttributesUtil; @@ -16,8 +15,10 @@ /** * Information about a standalone Nexus operation execution returned by {@link * NexusClient#listNexusOperationExecutions}. + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public class NexusOperationExecutionMetadata { private final @Nullable NexusOperationExecutionListInfo rawListInfo; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java index 446f0a5c22..2b5eb603ea 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java @@ -1,13 +1,14 @@ package io.temporal.client; -import io.temporal.common.Experimental; import javax.annotation.Nullable; /** * Thrown by {@link UntypedNexusOperationHandle#getResult} when the standalone Nexus operation was * not successful. The original cause can be retrieved via {@link #getCause()}. + * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public final class NexusOperationFailedException extends NexusOperationException { public NexusOperationFailedException( diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java index 232740f418..6785671ad8 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import java.lang.reflect.Type; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -15,12 +14,14 @@ * UntypedNexusOperationHandle} (returned by {@link NexusClient#getHandle(String, String)}) with * {@link #fromUntyped(UntypedNexusOperationHandle, Class)}. * + *

Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + * * @param the result type of the Nexus operation * @see UntypedNexusOperationHandle * @see NexusServiceClient * @see NexusClient */ -@Experimental public interface NexusOperationHandle extends UntypedNexusOperationHandle { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java index c25adda353..ed55a51b5e 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import javax.annotation.Nullable; /** @@ -14,8 +13,10 @@ *

  • operation was purged from the service after reaching its retention limit *
  • attempt to cancel/terminate/delete an operation that is already closed * + * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public final class NexusOperationNotFoundException extends NexusOperationException { public NexusOperationNotFoundException( diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java index 4629e297a8..b9f9b5c32c 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import io.temporal.workflow.Functions; import java.util.concurrent.CompletableFuture; @@ -17,6 +16,9 @@ *

    Given a Nexus service interface: * *

    {@code
    + * 

    Standalone Nexus Operations are in Public Preview. + * We aim to preserve backward compatibility and avoid breaking changes. + * * @Service * public interface GreeterService { * @Operation String greet(String name); // input + output @@ -58,7 +60,6 @@ * @see NexusClient * @see UntypedNexusServiceClient */ -@Experimental public interface NexusServiceClient extends UntypedNexusServiceClient { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java index b982067ebe..fea88157ed 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java @@ -2,7 +2,6 @@ import io.nexusrpc.OperationDefinition; import io.nexusrpc.ServiceDefinition; -import io.temporal.common.Experimental; import io.temporal.common.interceptors.NexusClientCallsInterceptor; import io.temporal.internal.client.NexusClientResolvedOptions; import io.temporal.internal.util.MethodExtractor; @@ -16,7 +15,6 @@ * targets a method on the service interface (via a {@link Proxy} of {@code T}) and delegates the * start RPC to the interceptor chain inherited from the underlying {@link NexusClient}. */ -@Experimental class NexusServiceClientImpl extends UntypedNexusServiceClientImpl implements NexusServiceClient { diff --git a/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java b/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java index aeb68092f4..11e679920c 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java +++ b/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java @@ -2,7 +2,6 @@ import io.temporal.api.enums.v1.NexusOperationIdConflictPolicy; import io.temporal.api.enums.v1.NexusOperationIdReusePolicy; -import io.temporal.common.Experimental; import io.temporal.common.SearchAttributes; import java.time.Duration; import java.util.Objects; @@ -12,8 +11,10 @@ /** * Per-call options for starting a standalone Nexus operation via {@link * UntypedNexusServiceClient#start} (or its typed counterpart). + * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public final class StartNexusOperationOptions { public static Builder newBuilder() { diff --git a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java index 4fc641c9b2..3a65b72b08 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java +++ b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import java.lang.reflect.Type; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -14,10 +13,12 @@ *

    Obtain an instance via {@link NexusClient#getHandle(String, String)} or as the untyped * projection of a handle returned by {@link NexusServiceClient}. * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + * * @see NexusOperationHandle * @see NexusClient */ -@Experimental public interface UntypedNexusOperationHandle { /** The caller-assigned operation ID for this execution. Always non-null. */ diff --git a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java index be56f19bf4..7c96ce2222 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java @@ -1,6 +1,5 @@ package io.temporal.client; -import io.temporal.common.Experimental; import java.lang.reflect.Type; import javax.annotation.Nullable; @@ -9,10 +8,12 @@ * the operation contract is not available as a Java service interface at compile time. For a typed * variant, see {@link NexusServiceClient}. * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + * * @see NexusServiceClient * @see NexusClient */ -@Experimental public interface UntypedNexusServiceClient { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java index 73222e3ade..8cb593ecd6 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java @@ -1,7 +1,6 @@ package io.temporal.client; import io.temporal.api.common.v1.Payload; -import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.common.interceptors.NexusClientCallsInterceptor; import io.temporal.common.interceptors.NexusClientCallsInterceptor.StartNexusOperationExecutionInput; @@ -18,7 +17,6 @@ * endpoint, service name, and data converter, and translates operation-name calls into start RPCs * routed through the interceptor chain. */ -@Experimental class UntypedNexusServiceClientImpl implements UntypedNexusServiceClient { private final NexusClientCallsInterceptor invoker; diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java index 5f0bd59980..718d02dce6 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java @@ -9,7 +9,6 @@ import io.temporal.client.NexusOperationFailedException; import io.temporal.client.NexusOperationHandle; import io.temporal.client.StartNexusOperationOptions; -import io.temporal.common.Experimental; import io.temporal.payload.context.NexusSerializationContext; import java.lang.reflect.Type; import java.util.Collections; @@ -29,8 +28,10 @@ * NexusClientInterceptor#nexusClientCallsInterceptor(NexusClientCallsInterceptor)} during {@link * NexusClient} construction. Prefer extending {@link NexusClientCallsInterceptorBase} and * overriding only the methods you need. + * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public interface NexusClientCallsInterceptor { /** diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java index 61d84bbae4..dc71de8e19 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java @@ -1,14 +1,15 @@ package io.temporal.common.interceptors; -import io.temporal.common.Experimental; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeoutException; /** * Convenience base class for {@link NexusClientCallsInterceptor} implementations that need to * override only a subset of methods. All methods delegate to the wrapped {@code next} interceptor. + * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public class NexusClientCallsInterceptorBase implements NexusClientCallsInterceptor { private final NexusClientCallsInterceptor next; diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java index 3af217f3fb..4b769dbdd4 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java @@ -2,15 +2,16 @@ import io.temporal.client.NexusClient; import io.temporal.client.NexusClientOptions; -import io.temporal.common.Experimental; /** * Outer interceptor for {@link NexusClient}. Implementations are registered via {@link * NexusClientOptions.Builder#setInterceptors(java.util.List)} and consulted once during client * construction to build the chain of {@link NexusClientCallsInterceptor}s that wraps the root * invoker. + * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. */ -@Experimental public interface NexusClientInterceptor { /** diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java index b964626fde..26fbf95010 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java @@ -1,9 +1,11 @@ package io.temporal.common.interceptors; -import io.temporal.common.Experimental; - -/** Convenience base class for {@link NexusClientInterceptor} implementations. */ -@Experimental +/** + * Convenience base class for {@link NexusClientInterceptor} implementations. + * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + */ public class NexusClientInterceptorBase implements NexusClientInterceptor { @Override From 0ea4c29763a649d33b29e2c88e9cc584e66ff4b7 Mon Sep 17 00:00:00 2001 From: Joie Wu Date: Wed, 14 Oct 2026 11:25:26 -0700 Subject: [PATCH 2/6] Move Public Preview notice outside the Javadoc example --- .../main/java/io/temporal/client/NexusServiceClient.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java index b9f9b5c32c..544c61c3ed 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java @@ -11,14 +11,14 @@ * the invocation and delegates to {@link NexusClient}. For visibility queries (list/count) across * operations, use {@link NexusClient} directly. * + *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility + * and avoid breaking changes. + * *

    Usage

    * *

    Given a Nexus service interface: * *

    {@code
    - * 

    Standalone Nexus Operations are in Public Preview. - * We aim to preserve backward compatibility and avoid breaking changes. - * * @Service * public interface GreeterService { * @Operation String greet(String name); // input + output From 2cf7538d324508643dfb7b7bc310efdac123182e Mon Sep 17 00:00:00 2001 From: Joie Wu Date: Wed, 14 Oct 2026 11:35:09 -0700 Subject: [PATCH 3/6] Revert "Move Public Preview notice outside the Javadoc example" This reverts commit 0ea4c29763a649d33b29e2c88e9cc584e66ff4b7. --- .../main/java/io/temporal/client/NexusServiceClient.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java index 544c61c3ed..b9f9b5c32c 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java @@ -11,14 +11,14 @@ * the invocation and delegates to {@link NexusClient}. For visibility queries (list/count) across * operations, use {@link NexusClient} directly. * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - * *

    Usage

    * *

    Given a Nexus service interface: * *

    {@code
    + * 

    Standalone Nexus Operations are in Public Preview. + * We aim to preserve backward compatibility and avoid breaking changes. + * * @Service * public interface GreeterService { * @Operation String greet(String name); // input + output From d277bfca6317a6b343bc01e4f994ff36efac1ff5 Mon Sep 17 00:00:00 2001 From: Joie Wu Date: Wed, 14 Oct 2026 11:35:09 -0700 Subject: [PATCH 4/6] Revert "Mark standalone Nexus operations as Public Preview" This reverts commit 9228f8fa4c7242e3524209eee5e5126995727f00. --- .../src/main/java/io/temporal/client/NexusClient.java | 5 ++--- .../main/java/io/temporal/client/NexusClientImpl.java | 2 ++ .../java/io/temporal/client/NexusClientOptions.java | 5 ++--- .../client/NexusOperationAlreadyStartedException.java | 5 ++--- .../client/NexusOperationCancellationInfo.java | 5 ++--- .../io/temporal/client/NexusOperationException.java | 9 +++------ .../temporal/client/NexusOperationExecutionCount.java | 10 ++++------ .../client/NexusOperationExecutionDescription.java | 7 +++---- .../client/NexusOperationExecutionMetadata.java | 5 ++--- .../temporal/client/NexusOperationFailedException.java | 5 ++--- .../java/io/temporal/client/NexusOperationHandle.java | 5 ++--- .../client/NexusOperationNotFoundException.java | 5 ++--- .../java/io/temporal/client/NexusServiceClient.java | 5 ++--- .../io/temporal/client/NexusServiceClientImpl.java | 2 ++ .../io/temporal/client/StartNexusOperationOptions.java | 5 ++--- .../temporal/client/UntypedNexusOperationHandle.java | 5 ++--- .../io/temporal/client/UntypedNexusServiceClient.java | 5 ++--- .../temporal/client/UntypedNexusServiceClientImpl.java | 2 ++ .../interceptors/NexusClientCallsInterceptor.java | 5 ++--- .../interceptors/NexusClientCallsInterceptorBase.java | 5 ++--- .../common/interceptors/NexusClientInterceptor.java | 5 ++--- .../interceptors/NexusClientInterceptorBase.java | 10 ++++------ 22 files changed, 50 insertions(+), 67 deletions(-) diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java b/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java index 703f7c4de5..2324a6592e 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusClient.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import io.temporal.serviceclient.WorkflowServiceStubs; import java.lang.reflect.Type; import java.util.stream.Stream; @@ -43,13 +44,11 @@ *

    For visibility queries across all operations in the namespace, see {@link * #listNexusOperationExecutions} and {@link #countNexusOperationExecutions}. * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - * * @see NexusServiceClient * @see UntypedNexusServiceClient * @see NexusOperationHandle */ +@Experimental public interface NexusClient { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java b/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java index 66eb0818e3..a9248e80b1 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusClientImpl.java @@ -3,6 +3,7 @@ import static io.temporal.internal.WorkflowThreadMarker.enforceNonWorkflowThread; import com.uber.m3.tally.Scope; +import io.temporal.common.Experimental; import io.temporal.common.interceptors.NexusClientCallsInterceptor; import io.temporal.common.interceptors.NexusClientCallsInterceptor.CountNexusOperationExecutionsInput; import io.temporal.common.interceptors.NexusClientCallsInterceptor.CountNexusOperationExecutionsOutput; @@ -24,6 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Experimental public class NexusClientImpl implements NexusClient { private static final Logger log = LoggerFactory.getLogger(NexusClientImpl.class); diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java b/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java index 14f29d759d..414cd3c568 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusClientOptions.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.common.converter.GlobalDataConverter; import io.temporal.common.interceptors.NexusClientInterceptor; @@ -30,10 +31,8 @@ * .setDataConverter(myDataConverter) * .build(); * }

    - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public class NexusClientOptions { private static final String DEFAULT_NAMESPACE = "default"; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java index 7e1250819c..42c8155139 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationAlreadyStartedException.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import javax.annotation.Nullable; /** @@ -8,10 +9,8 @@ * completed run that conflicts with the requested {@link * StartNexusOperationOptions#getIdReusePolicy()} / {@link * StartNexusOperationOptions#getIdConflictPolicy()}). - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public final class NexusOperationAlreadyStartedException extends NexusOperationException { private final String operation; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java index 0cca95e87b..2a89426666 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationCancellationInfo.java @@ -3,6 +3,7 @@ import com.google.common.base.Strings; import io.temporal.api.enums.v1.NexusOperationCancellationState; import io.temporal.api.nexus.v1.NexusOperationExecutionCancellationInfo; +import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.internal.common.ProtobufTimeUtils; import java.time.Instant; @@ -12,10 +13,8 @@ /** * Information about a cancellation request issued against a standalone Nexus operation execution. * Returned by {@link NexusOperationExecutionDescription#getCancellationInfo()}. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public final class NexusOperationCancellationInfo { private final NexusOperationExecutionCancellationInfo info; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java index e8aee2c948..0527aeb926 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationException.java @@ -1,14 +1,11 @@ package io.temporal.client; +import io.temporal.common.Experimental; import io.temporal.failure.TemporalException; import javax.annotation.Nullable; -/** - * Base exception for standalone Nexus operation execution failures. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - */ +/** Base exception for standalone Nexus operation execution failures. */ +@Experimental public abstract class NexusOperationException extends TemporalException { private final String operationId; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java index 16ba8d8117..271671cf57 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionCount.java @@ -1,6 +1,7 @@ package io.temporal.client; import io.temporal.api.common.v1.Payload; +import io.temporal.common.Experimental; import io.temporal.internal.common.SearchAttributesUtil; import java.util.Collections; import java.util.List; @@ -8,15 +9,12 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; -/** - * Result of counting standalone Nexus operation executions. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - */ +/** Result of counting standalone Nexus operation executions. */ +@Experimental public class NexusOperationExecutionCount { /** An individual aggregation group. */ + @Experimental public static class AggregationGroup { private final List> groupValues; private final long count; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java index 377ba1d00f..4717bcdbe4 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionDescription.java @@ -4,6 +4,7 @@ import io.temporal.api.enums.v1.PendingNexusOperationState; import io.temporal.api.nexus.v1.NexusOperationExecutionInfo; import io.temporal.api.workflowservice.v1.DescribeNexusOperationExecutionResponse; +import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.internal.common.ProtobufTimeUtils; import io.temporal.internal.common.SearchAttributesUtil; @@ -17,10 +18,8 @@ /** * Detailed information about a standalone Nexus operation execution, returned by {@link * UntypedNexusOperationHandle#describe()}. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public final class NexusOperationExecutionDescription extends NexusOperationExecutionMetadata { private final DescribeNexusOperationExecutionResponse response; @@ -55,7 +54,7 @@ public NexusOperationExecutionDescription( this.dataConverterWithNexusContext = dataConverterWithNexusContext; } - /** Underlying proto response. */ + /** Underlying proto response. Exposed while the Nexus SDK surface is still experimental. */ @Nonnull public DescribeNexusOperationExecutionResponse getRawResponse() { return response; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java index 5a68a374df..f5e68792f6 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationExecutionMetadata.java @@ -3,6 +3,7 @@ import com.google.common.base.Strings; import io.temporal.api.enums.v1.NexusOperationExecutionStatus; import io.temporal.api.nexus.v1.NexusOperationExecutionListInfo; +import io.temporal.common.Experimental; import io.temporal.common.SearchAttributes; import io.temporal.internal.common.ProtobufTimeUtils; import io.temporal.internal.common.SearchAttributesUtil; @@ -15,10 +16,8 @@ /** * Information about a standalone Nexus operation execution returned by {@link * NexusClient#listNexusOperationExecutions}. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public class NexusOperationExecutionMetadata { private final @Nullable NexusOperationExecutionListInfo rawListInfo; diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java index 2b5eb603ea..446f0a5c22 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationFailedException.java @@ -1,14 +1,13 @@ package io.temporal.client; +import io.temporal.common.Experimental; import javax.annotation.Nullable; /** * Thrown by {@link UntypedNexusOperationHandle#getResult} when the standalone Nexus operation was * not successful. The original cause can be retrieved via {@link #getCause()}. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public final class NexusOperationFailedException extends NexusOperationException { public NexusOperationFailedException( diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java index 6785671ad8..232740f418 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationHandle.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import java.lang.reflect.Type; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -14,14 +15,12 @@ * UntypedNexusOperationHandle} (returned by {@link NexusClient#getHandle(String, String)}) with * {@link #fromUntyped(UntypedNexusOperationHandle, Class)}. * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - * * @param the result type of the Nexus operation * @see UntypedNexusOperationHandle * @see NexusServiceClient * @see NexusClient */ +@Experimental public interface NexusOperationHandle extends UntypedNexusOperationHandle { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java index ed55a51b5e..c25adda353 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusOperationNotFoundException.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import javax.annotation.Nullable; /** @@ -13,10 +14,8 @@ *

  • operation was purged from the service after reaching its retention limit *
  • attempt to cancel/terminate/delete an operation that is already closed * - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public final class NexusOperationNotFoundException extends NexusOperationException { public NexusOperationNotFoundException( diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java index b9f9b5c32c..4629e297a8 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClient.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import io.temporal.workflow.Functions; import java.util.concurrent.CompletableFuture; @@ -16,9 +17,6 @@ *

    Given a Nexus service interface: * *

    {@code
    - * 

    Standalone Nexus Operations are in Public Preview. - * We aim to preserve backward compatibility and avoid breaking changes. - * * @Service * public interface GreeterService { * @Operation String greet(String name); // input + output @@ -60,6 +58,7 @@ * @see NexusClient * @see UntypedNexusServiceClient */ +@Experimental public interface NexusServiceClient extends UntypedNexusServiceClient { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java index fea88157ed..b982067ebe 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/client/NexusServiceClientImpl.java @@ -2,6 +2,7 @@ import io.nexusrpc.OperationDefinition; import io.nexusrpc.ServiceDefinition; +import io.temporal.common.Experimental; import io.temporal.common.interceptors.NexusClientCallsInterceptor; import io.temporal.internal.client.NexusClientResolvedOptions; import io.temporal.internal.util.MethodExtractor; @@ -15,6 +16,7 @@ * targets a method on the service interface (via a {@link Proxy} of {@code T}) and delegates the * start RPC to the interceptor chain inherited from the underlying {@link NexusClient}. */ +@Experimental class NexusServiceClientImpl extends UntypedNexusServiceClientImpl implements NexusServiceClient { diff --git a/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java b/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java index 11e679920c..aeb68092f4 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java +++ b/temporal-sdk/src/main/java/io/temporal/client/StartNexusOperationOptions.java @@ -2,6 +2,7 @@ import io.temporal.api.enums.v1.NexusOperationIdConflictPolicy; import io.temporal.api.enums.v1.NexusOperationIdReusePolicy; +import io.temporal.common.Experimental; import io.temporal.common.SearchAttributes; import java.time.Duration; import java.util.Objects; @@ -11,10 +12,8 @@ /** * Per-call options for starting a standalone Nexus operation via {@link * UntypedNexusServiceClient#start} (or its typed counterpart). - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public final class StartNexusOperationOptions { public static Builder newBuilder() { diff --git a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java index 3a65b72b08..4fc641c9b2 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java +++ b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusOperationHandle.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import java.lang.reflect.Type; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -13,12 +14,10 @@ *

    Obtain an instance via {@link NexusClient#getHandle(String, String)} or as the untyped * projection of a handle returned by {@link NexusServiceClient}. * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - * * @see NexusOperationHandle * @see NexusClient */ +@Experimental public interface UntypedNexusOperationHandle { /** The caller-assigned operation ID for this execution. Always non-null. */ diff --git a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java index 7c96ce2222..be56f19bf4 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java +++ b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClient.java @@ -1,5 +1,6 @@ package io.temporal.client; +import io.temporal.common.Experimental; import java.lang.reflect.Type; import javax.annotation.Nullable; @@ -8,12 +9,10 @@ * the operation contract is not available as a Java service interface at compile time. For a typed * variant, see {@link NexusServiceClient}. * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - * * @see NexusServiceClient * @see NexusClient */ +@Experimental public interface UntypedNexusServiceClient { /** diff --git a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java index 8cb593ecd6..73222e3ade 100644 --- a/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/client/UntypedNexusServiceClientImpl.java @@ -1,6 +1,7 @@ package io.temporal.client; import io.temporal.api.common.v1.Payload; +import io.temporal.common.Experimental; import io.temporal.common.converter.DataConverter; import io.temporal.common.interceptors.NexusClientCallsInterceptor; import io.temporal.common.interceptors.NexusClientCallsInterceptor.StartNexusOperationExecutionInput; @@ -17,6 +18,7 @@ * endpoint, service name, and data converter, and translates operation-name calls into start RPCs * routed through the interceptor chain. */ +@Experimental class UntypedNexusServiceClientImpl implements UntypedNexusServiceClient { private final NexusClientCallsInterceptor invoker; diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java index 718d02dce6..5f0bd59980 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptor.java @@ -9,6 +9,7 @@ import io.temporal.client.NexusOperationFailedException; import io.temporal.client.NexusOperationHandle; import io.temporal.client.StartNexusOperationOptions; +import io.temporal.common.Experimental; import io.temporal.payload.context.NexusSerializationContext; import java.lang.reflect.Type; import java.util.Collections; @@ -28,10 +29,8 @@ * NexusClientInterceptor#nexusClientCallsInterceptor(NexusClientCallsInterceptor)} during {@link * NexusClient} construction. Prefer extending {@link NexusClientCallsInterceptorBase} and * overriding only the methods you need. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public interface NexusClientCallsInterceptor { /** diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java index dc71de8e19..61d84bbae4 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientCallsInterceptorBase.java @@ -1,15 +1,14 @@ package io.temporal.common.interceptors; +import io.temporal.common.Experimental; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeoutException; /** * Convenience base class for {@link NexusClientCallsInterceptor} implementations that need to * override only a subset of methods. All methods delegate to the wrapped {@code next} interceptor. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public class NexusClientCallsInterceptorBase implements NexusClientCallsInterceptor { private final NexusClientCallsInterceptor next; diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java index 4b769dbdd4..3af217f3fb 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptor.java @@ -2,16 +2,15 @@ import io.temporal.client.NexusClient; import io.temporal.client.NexusClientOptions; +import io.temporal.common.Experimental; /** * Outer interceptor for {@link NexusClient}. Implementations are registered via {@link * NexusClientOptions.Builder#setInterceptors(java.util.List)} and consulted once during client * construction to build the chain of {@link NexusClientCallsInterceptor}s that wraps the root * invoker. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. */ +@Experimental public interface NexusClientInterceptor { /** diff --git a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java index 26fbf95010..b964626fde 100644 --- a/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java +++ b/temporal-sdk/src/main/java/io/temporal/common/interceptors/NexusClientInterceptorBase.java @@ -1,11 +1,9 @@ package io.temporal.common.interceptors; -/** - * Convenience base class for {@link NexusClientInterceptor} implementations. - * - *

    Standalone Nexus Operations are in Public Preview. We aim to preserve backward compatibility - * and avoid breaking changes. - */ +import io.temporal.common.Experimental; + +/** Convenience base class for {@link NexusClientInterceptor} implementations. */ +@Experimental public class NexusClientInterceptorBase implements NexusClientInterceptor { @Override From b4f8e8fd4a8bf5ae56baf978407d62a91d7e10e0 Mon Sep 17 00:00:00 2001 From: Joie Wu Date: Wed, 14 Oct 2026 11:59:45 -0700 Subject: [PATCH 5/6] docs: note standalone Nexus operations public preview --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 65388903db..55f44e4e26 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,9 @@ Java SDK: - [Java SDK documentation](https://docs.temporal.io/docs/java/introduction) - [Javadoc API reference](https://www.javadoc.io/doc/io.temporal/temporal-sdk/latest/index.html) - [Sample applications](https://github.com/temporalio/samples-java#samples-directory) +- [Standalone Nexus Operations](https://docs.temporal.io/develop/java/nexus/standalone-operations) are in + [Public Preview](https://docs.temporal.io/evaluate/development-production-features/release-stages#public-preview). + We aim to preserve backward compatibility and avoid breaking changes. Temporal: From 8ef4ec79fde59a99eb1f5fe0f87a1c871ef444b2 Mon Sep 17 00:00:00 2001 From: Joie Wu Date: Wed, 14 Oct 2026 14:59:59 -0700 Subject: [PATCH 6/6] Revert "docs: note standalone Nexus operations public preview" This reverts commit b4f8e8fd4a8bf5ae56baf978407d62a91d7e10e0. --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 55f44e4e26..65388903db 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,6 @@ Java SDK: - [Java SDK documentation](https://docs.temporal.io/docs/java/introduction) - [Javadoc API reference](https://www.javadoc.io/doc/io.temporal/temporal-sdk/latest/index.html) - [Sample applications](https://github.com/temporalio/samples-java#samples-directory) -- [Standalone Nexus Operations](https://docs.temporal.io/develop/java/nexus/standalone-operations) are in - [Public Preview](https://docs.temporal.io/evaluate/development-production-features/release-stages#public-preview). - We aim to preserve backward compatibility and avoid breaking changes. Temporal: