Skip to content

v0.7.0

Pre-release
Pre-release

Choose a tag to compare

@chris-olszewski chris-olszewski released this 17 Aug 19:33
· 27 commits to main since this release
46c50fc

What's Changed

⚠️ THIS IS AN EARLY RELEASE AND COMPATIBILITY WILL NOT BE MAINTAINED

Added

  • Support for running Standalone Activities in Rust SDK Worker.
  • Client methods for starting and managing execution of Standalone Activities.
  • LoggerFormat for selecting compact, pretty, or JSON Core console log output. Configured log
    filters continue to apply to JSON output.
  • The Rust SDK now has an optional testing feature with a typed activity test environment and
    local or external workflow test environments. Local workflow environments manage a Temporal CLI
    dev server and expose shutdown through their local-server type state.
  • Worker heartbeats now report the SDK runtime, hosting environments, operating system, and
    architecture once per worker, retrying until the first successful delivery. Runtime options can
    disable this reporting, and language SDK bridges can supply their own runtime details. The Rust
    SDK exposes separate runtime options that omit bridge-only runtime overrides.
  • RpcOptions::builder() for constructing per-call RPC options.
  • DnsLoadBalancingOptions::builder() for configuring DNS re-resolution intervals.
  • Experimental plugin APIs for packaging reusable client and worker configuration, including data
    converters, interceptors, activities, workflows, and automatic propagation from clients to
    workers.
  • WorkflowCancellationToken for deterministic cancellation of workflow operations.
  • WorkflowContext::wait_condition_with_options and WaitConditionOptions for waiting with a
    custom cancellation token.
  • Support for dynamic client certificate resolution via TlsOptions::client_cert_resolver, which
    accepts an Arc<dyn ResolvesClientCert> for per-handshake mTLS certificate selection. This enables
    transparent certificate rotation without process restarts — useful for short-lived certificates
    managed by Vault, cert-manager, or HSM-backed signers. ResolvesClientCert, CertifiedKey, and
    SignatureScheme are re-exported from the crate root for convenience.
  • Worker heartbeats now report the SDK runtime, hosting environments, operating system, and
    architecture once per worker, retrying until the first successful delivery. Set
    RuntimeOptions::disable_environment_info to turn the reporting off.
  • Workers now log a [TMPRL1104] warning when a workflow task takes longer than 5 seconds. Set
    TEMPORAL_WORKFLOW_TASK_DURATION_WARN_SECONDS to change the threshold.
  • SignalWorkflowOptions::summary attaches a single-line summary to a signal sent to another
    workflow, which the UI and CLI display alongside the resulting history event.

Changed

  • Cancellation errors propagated after workflow cancellation now complete the workflow as cancelled
    instead of failed.
  • WorkflowReplayer for workflow history replay, including JSON history helpers
    and worker-plugin configuration.
  • Experimental worker lifecycle interception through WorkerInterceptor::run_worker and
    WorkerInterceptor::with_workflow_replay_worker.

Breaking Changes 💥

  • Changes to ActivityInfo: instead of workflow_namespace, workflow_execution and run_id,
    there is now namespace, workflow_id, workflow_run_id and activity_run_id.
    Also, workflow_type is now Option<String>.
  • ActivityIdentifier::ById was split into 2 variants, ByIdWorkflow and ByIdStandalone.
    ActivityIdentifier::by_id method was renamed to by_id_workflow, and by_id_standalone
    was added.
  • anyhow::Error no longer converts directly into WorkflowTermination. Wrap an error in
    ApplicationFailure to explicitly fail the Workflow Execution.
  • OutgoingWorkflowError now has a dedicated PayloadConversion variant. Converting activity,
    child-workflow, and signal errors lifts their payload-conversion variants into it.
    OutgoingError, OutgoingActivityError, and OutgoingWorkflowError are now non-exhaustive;
    downstream matches must include a wildcard arm.
  • Removed InterceptorWithNext. Register worker interceptors as an ordered vector instead.
  • Ephemeral server APIs now return EphemeralServerError instead of anyhow::Error, and dev-server
    log format and level use the non-exhaustive DevServerLogFormat and DevServerLogLevel enums.
  • Ephemeral server APIs now return the operation-oriented EphemeralServerError instead of
    anyhow::Error.
  • Activity macro support now exposes instance requirements through ExecutableActivity; the
    redundant HasOnlyStaticMethods marker trait has been removed.
  • Worker::run now returns WorkerRunError instead of anyhow::Error.
    Non-validation failures are reported as WorkerRunError::Fatal with a message and source.
  • Logger::Console now requires a format: Option<LoggerFormat> field. Use None to preserve the
    previous behavior, including support for TEMPORAL_CORE_PRETTY_LOGS.
  • CancellableFuture and CancellableFutureWithReason now use the inherited Future::Output
    associated type instead of a generic output parameter.
  • TimerOptions is now tagged with #[non_exhaustive]. Use
    TimerOptions::builder(duration) to construct timer options. Passing a Duration directly to
    WorkflowContext::timer remains supported.
  • RetryOptions is now tagged with #[non_exhaustive]. Use RetryOptions::builder() to
    construct retry options.
  • HttpConnectProxyOptions is now tagged with #[non_exhaustive]. Use
    HttpConnectProxyOptions::new(target_addr) to construct proxy options.
  • TlsOptions is now tagged with #[non_exhaustive]. Use TlsOptions::builder() to construct
    TLS options.
  • ClientTlsOptions is now tagged with #[non_exhaustive]. Use ClientTlsOptions::builder() to
    construct client TLS options.
  • ClientKeepAliveOptions is now tagged with #[non_exhaustive]. Use
    ClientKeepAliveOptions::builder() to construct keep-alive options.
  • PayloadLimitsOptions is now tagged with #[non_exhaustive]. Use
    PayloadLimitsOptions::builder() to construct payload limit options.
  • RegisterNamespaceOptions is now tagged with #[non_exhaustive]. Continue using
    RegisterNamespaceOptions::builder() to construct namespace registration options.
  • LoadClientConfigOptions is now tagged with #[non_exhaustive]. Use
    LoadClientConfigOptions::builder() to construct client configuration loading options.
  • LoadClientConfigProfileOptions is now tagged with #[non_exhaustive]. Use
    LoadClientConfigProfileOptions::builder() to construct profile loading options.
  • ClientConfigFromTOMLOptions is now tagged with #[non_exhaustive]. Use
    ClientConfigFromTOMLOptions::builder() to construct TOML parsing options.
  • OtelCollectorOptions is now tagged with #[non_exhaustive]. Use
    OtelCollectorOptions::builder() to construct OpenTelemetry collector options.
  • PrometheusExporterOptions is now tagged with #[non_exhaustive]. Use
    PrometheusExporterOptions::builder() to construct Prometheus exporter options.
  • WorkerDeploymentOptions is now tagged with #[non_exhaustive]. Use
    WorkerDeploymentOptions::new(version) to construct worker deployment options.
  • LocalActivityOptions is now tagged with #[non_exhaustive]. Use
    LocalActivityOptions::builder() to construct local activity options.
  • NexusOperationOptions is now tagged with #[non_exhaustive]. Use
    NexusOperationOptions::builder() to construct Nexus operation options.
  • WorkflowContext::wait_condition now returns Result<(), WorkflowCancellationError> instead of
    () so that workflow cancellation can be propagated to the caller.
  • WorkflowUpdateWaitStage and WorkflowStartUpdateOptions::wait_for_stage have been removed.
    start_update now always waits for the update to be accepted; use execute_update to wait for
    completion.
  • Workflow and activity implementations must now be registered through WorkerOptions before
    constructing a Worker; the corresponding registration methods on Worker have been removed.
  • Worker::run now returns WorkerRunError instead of anyhow::Error.
    Non-validation failures are reported as WorkerRunError::Fatal with a message and source.

Fixed

  • Unhandled workflow payload conversion errors now fail the Workflow Task so it can retry instead
    of failing the Workflow Execution. Workflows may still explicitly handle these errors.
  • Workers no longer send worker heartbeats or appear in centralized heartbeat reports before
    Worker::run begins.
  • Local activity resolutions are now delivered to workflows as each activity completes instead of
    waiting for every local activity in the workflow task. This allows sequences of short local
    activities to make progress while a long-running local activity executes in parallel, while
    preserving the resolution ordering recorded in existing histories during replay.
  • Try-cancel child workflows no longer cause nondeterminism when they complete or fail after their
    cancellation was requested.
  • Panics from update validators now reject the update instead of repeatedly failing workflow
    tasks.
  • Workers with max_cached_workflows set to 0 no longer stall when a local activity resolves while
    the resolution for an earlier one is still being delivered.
  • Rust SDK workers now derive enabled task types from registered workflows and activities. The
    task types can no longer be configured separately, preventing mismatched poll loops from hanging
    worker shutdown.

New Contributors

Full Changelog: v0.6.0...v0.7.0