v0.7.0
Pre-release
Pre-release
What's Changed
Added
- Support for running Standalone Activities in Rust SDK Worker.
- Client methods for starting and managing execution of Standalone Activities.
LoggerFormatfor 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
testingfeature 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. WorkflowCancellationTokenfor deterministic cancellation of workflow operations.WorkflowContext::wait_condition_with_optionsandWaitConditionOptionsfor waiting with a
custom cancellation token.- Support for dynamic client certificate resolution via
TlsOptions::client_cert_resolver, which
accepts anArc<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
SignatureSchemeare 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_infoto 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_SECONDSto change the threshold. SignalWorkflowOptions::summaryattaches 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. WorkflowReplayerfor workflow history replay, including JSON history helpers
and worker-plugin configuration.- Experimental worker lifecycle interception through
WorkerInterceptor::run_workerand
WorkerInterceptor::with_workflow_replay_worker.
Breaking Changes 💥
- Changes to
ActivityInfo: instead ofworkflow_namespace,workflow_executionandrun_id,
there is nownamespace,workflow_id,workflow_run_idandactivity_run_id.
Also,workflow_typeis nowOption<String>. ActivityIdentifier::ByIdwas split into 2 variants,ByIdWorkflowandByIdStandalone.
ActivityIdentifier::by_idmethod was renamed toby_id_workflow, andby_id_standalone
was added.anyhow::Errorno longer converts directly intoWorkflowTermination. Wrap an error in
ApplicationFailureto explicitly fail the Workflow Execution.OutgoingWorkflowErrornow has a dedicatedPayloadConversionvariant. Converting activity,
child-workflow, and signal errors lifts their payload-conversion variants into it.
OutgoingError,OutgoingActivityError, andOutgoingWorkflowErrorare 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
EphemeralServerErrorinstead ofanyhow::Error, and dev-server
log format and level use the non-exhaustiveDevServerLogFormatandDevServerLogLevelenums. - Ephemeral server APIs now return the operation-oriented
EphemeralServerErrorinstead of
anyhow::Error. - Activity macro support now exposes instance requirements through
ExecutableActivity; the
redundantHasOnlyStaticMethodsmarker trait has been removed. Worker::runnow returnsWorkerRunErrorinstead ofanyhow::Error.
Non-validation failures are reported asWorkerRunError::Fatalwith a message and source.Logger::Consolenow requires aformat: Option<LoggerFormat>field. UseNoneto preserve the
previous behavior, including support forTEMPORAL_CORE_PRETTY_LOGS.CancellableFutureandCancellableFutureWithReasonnow use the inheritedFuture::Output
associated type instead of a generic output parameter.TimerOptionsis now tagged with#[non_exhaustive]. Use
TimerOptions::builder(duration)to construct timer options. Passing aDurationdirectly to
WorkflowContext::timerremains supported.RetryOptionsis now tagged with#[non_exhaustive]. UseRetryOptions::builder()to
construct retry options.HttpConnectProxyOptionsis now tagged with#[non_exhaustive]. Use
HttpConnectProxyOptions::new(target_addr)to construct proxy options.TlsOptionsis now tagged with#[non_exhaustive]. UseTlsOptions::builder()to construct
TLS options.ClientTlsOptionsis now tagged with#[non_exhaustive]. UseClientTlsOptions::builder()to
construct client TLS options.ClientKeepAliveOptionsis now tagged with#[non_exhaustive]. Use
ClientKeepAliveOptions::builder()to construct keep-alive options.PayloadLimitsOptionsis now tagged with#[non_exhaustive]. Use
PayloadLimitsOptions::builder()to construct payload limit options.RegisterNamespaceOptionsis now tagged with#[non_exhaustive]. Continue using
RegisterNamespaceOptions::builder()to construct namespace registration options.LoadClientConfigOptionsis now tagged with#[non_exhaustive]. Use
LoadClientConfigOptions::builder()to construct client configuration loading options.LoadClientConfigProfileOptionsis now tagged with#[non_exhaustive]. Use
LoadClientConfigProfileOptions::builder()to construct profile loading options.ClientConfigFromTOMLOptionsis now tagged with#[non_exhaustive]. Use
ClientConfigFromTOMLOptions::builder()to construct TOML parsing options.OtelCollectorOptionsis now tagged with#[non_exhaustive]. Use
OtelCollectorOptions::builder()to construct OpenTelemetry collector options.PrometheusExporterOptionsis now tagged with#[non_exhaustive]. Use
PrometheusExporterOptions::builder()to construct Prometheus exporter options.WorkerDeploymentOptionsis now tagged with#[non_exhaustive]. Use
WorkerDeploymentOptions::new(version)to construct worker deployment options.LocalActivityOptionsis now tagged with#[non_exhaustive]. Use
LocalActivityOptions::builder()to construct local activity options.NexusOperationOptionsis now tagged with#[non_exhaustive]. Use
NexusOperationOptions::builder()to construct Nexus operation options.WorkflowContext::wait_conditionnow returnsResult<(), WorkflowCancellationError>instead of
()so that workflow cancellation can be propagated to the caller.WorkflowUpdateWaitStageandWorkflowStartUpdateOptions::wait_for_stagehave been removed.
start_updatenow always waits for the update to be accepted; useexecute_updateto wait for
completion.- Workflow and activity implementations must now be registered through
WorkerOptionsbefore
constructing aWorker; the corresponding registration methods onWorkerhave been removed. Worker::runnow returnsWorkerRunErrorinstead ofanyhow::Error.
Non-validation failures are reported asWorkerRunError::Fatalwith 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::runbegins. - 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_workflowsset 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