Skip to content

Releases: temporalio/sdk-ruby

v1.6.0

Choose a tag to compare

@chris-olszewski chris-olszewski released this 16 Jul 16:17
bec167d

What's Changed

Added

  • Exposed Temporalio::Workflow::ContinueAsNewError#backoff_start_interval, to allow the new workflow to start after a delay.
  • Added the experimental Temporalio::Worker patch_activation_callback: option, allowing workers to decide whether a first non-replay Temporalio::Workflow.patched call should activate a patch during rolling deployments.

Experimental FIPS builds

The native extension can now be built with TEMPORALIO_FIPS=1 to use the FIPS-mode
aws-lc-rs TLS backend for gRPC and OTLP metrics. This is opt-in, source-build only.
FIPS builds use SHA-256 rather than MD5 for the default worker build ID and warn when
the Ruby OpenSSL runtime is not itself in FIPS mode.

Experimental RBS and RBI signatures are included in the gem

Released gems now contain RBS signatures in sig/ and Sorbet RBI
signatures in rbi/, including generated types for Temporal API messages and services.
These type signatures are subject to change in future releases as we move towards a stronger typing story.

Changed

gRPC transport compression defaults to gzip

Client connections now use gzip transport compression by default. Pass
grpc_compression: Temporalio::Client::Connection::GrpcCompressionOptions::None.new to
Client.connect or Client::Connection.new to opt out.

Fixed

Workflow.suggest_continue_as_new_reasons returns workflow enum values

Workflow activations containing continue-as-new suggestion reasons previously failed because the
worker tried to call to_i on bridge enum symbols. Continue-as-new suggestion reasons are now
converted from bridge enum symbols to Temporalio::SuggestContinueAsNewReason integer enum values before being exposed to workflows.

Deadlock errors from workflow futures fail the current workflow task

A workflow deadlock raised inside Temporalio::Workflow::Future is no longer deferred until the
future is awaited. The worker fails the current workflow task immediately, preventing commands
created before the deadlock from being recorded as a successful partial command batch.

Scheduler waits for the Protobuf object-cache mutex

The workflow scheduler no longer yields while a workflow fiber is blocked on the
google-protobuf object-cache mutex. This prevents a workflow task from completing with only part
of a command batch when Protobuf serialization blocks.

replay_workflow shutdown after nondeterminism

Fixed a race in replay_workflow where if a NDE was hit, worker shutdown could panic if it happens before async activation completion completes.

Core updates

  • Retried transport-originated gRPC CANCELLED errors, such as a connection closure or GOAWAY,
    using the normal RPC retry policy while continuing not to retry application-initiated
    cancellations.
  • Resource sampling interval for worker heartbeating now matches heartbeat interval rather than every 100ms
  • Activities with a heartbeat timeout shorter than their start-to-close timeout now still enforce
    the start-to-close timeout while heartbeats succeed.
  • Local activity completion after workflow eviction no longer risks a Core panic or dispatching a
    stale local activity.
  • Corrected the worker_task_slots_used gauge so it does not count a slot that is currently being
    released.
  • OTLP metric export failures are now emitted through Core telemetry, making them visible through
    the SDK logger.

v1.5.0

Choose a tag to compare

@GregoryTravis GregoryTravis released this 11 Jun 14:42
1ec77e8

What's Changed

⚠️💥 Standalone Activities (#443) (experimental)

A Standalone Activity is a top-level Activity Execution started directly by a Client, without using a Workflow. This results in fewer Billable Actions in Temporal Cloud than using a Workflow to run a single Activity. If your Activity Execution is short-lived, you will also notice lower latency, since there are fewer Worker round-trips.
(#443)

⚠️ Standalone Activities Start Delay (#443) (experimental)

Add start_delay: option to Client#start_activity / #execute_activity for Standalone Activities.
When set, the server creates the activity immediately but defers dispatch to a worker until the delay elapses.
(#455)

Bug Fixes

  • Do not pass on empty token for sync nexus calls; fixed flaky test_nexus_operation_handle_async_has_token (#439)
  • Expose priority param on start_workflow_operation (#444)
  • Fix incorrect outcome check for polling in update_with_start (#457)

Full Changelog: v1.4.1...v1.5.0

v1.4.1

Choose a tag to compare

@chris-olszewski chris-olszewski released this 14 May 19:31
38495b8

What's Changed

  • Bug fix for 1.4.0 where DNS load balancing was accidentally enabled by default. DNS Load balancing now must be opted-into by passing dns_load_balancing keyword to Temporalio::Client.connect (#433)

Full Changelog: v1.4.0...v1.4.1

v1.4.0

Choose a tag to compare

@chris-olszewski chris-olszewski released this 29 Apr 13:50
c136df6

What's Changed

Continue-As-New Auto-Upgrade Support (experimental)

Added support for upgrading pinned workflows to a newer deployment version via continue-as-new with auto-upgrade behavior. This also adds workflow APIs for checking whether the target worker deployment version has changed and for inspecting server-suggested continue-as-new reasons.
(#404)

⚠️ These APIs are experimental and subject to change.

Additional Nexus Timeout Support (experimental)

Added schedule_to_start_timeout and start_to_close_timeout support for Nexus operations in addition to schedule_to_close_timeout.
(#390)

⚠️ Nexus support remains experimental and subject to change.

Bug Fixes

  • Fixed OpenTelemetry context cleanup after span execution to prevent spans from being attached to the wrong trace. (#395)
  • Fixed a segfault in MetricBuffer#retrieve_updates. (#397)
  • Added validation for invalid deployment option combinations. (#400)
  • Fixed a panic when using the test server across a process fork. (#408)
  • Fixed WorkflowAlreadyStartedError to report the workflow type name correctly. (#411)
  • Fixed an error when using the fiber executor on Ruby 4. (#418)
  • Fixed composite payload converter handling of nil payloads. (#422)

Specific Changes

2026-02-18 - 4fb3ddf - Add support for more timeouts to Nexus operations (#390)
2026-03-11 - 1bb9f6b - clear OTel context after span execution (#395)
2026-03-13 - e339de0 - Fix MetricBuffer#retrieve_updates segfault (#397)
2026-03-17 - 9f7e628 - Validate deployment options and test worker with versioning off and custom build ID (#400)
2026-03-23 - 1cda7a1 - Add upgrade-on-CaN (trampolining) support (#404)
2026-04-01 - bcc7510 - avoid panic when attempting to use test server across fork (#408)
2026-04-06 - ddb2762 - use workflow type name in WorkflowAlreadyStartedError (#411)
2026-04-13 - 75c7132 - no longer error on when using fiber executor on Ruby 4 (#418)
2026-04-22 - f61c70d - handle nil payloads in composite converter (#422)
2026-04-24 - faf7724 - install protoc when building gems (#425)

Full Changelog: v1.3.0...v1.4.0

v1.3.0

Choose a tag to compare

@chris-olszewski chris-olszewski released this 18 Feb 19:18
c40a658

What's Changed

Nexus Caller Support (experimental)

Add support for calling Nexus operations and fetching results. This does not include implementing Nexus handlers.

⚠️ This is experimental and subject to change.

Client Environment Configuration General Availability

The client environment configuration feature is no longer experimental and is now generally available.

Deployment-Based Worker Versioning General Availability

The deployment-based worker versioning feature is no longer experimental and is now generally available. The older style worker deployment APIs have been marked as obsolete.

Bug Fixes

  • Fixed memory leak where a heap allocated function pointer would not always be freed.
  • Added backoff on ResourceExhausted errors in Poller autoscaler to prevent hot retry loop

Specific Changes

2026-02-05 - 7d14a90 - remove experimental warning for new worker versioning APIs and envconfig, add deprecation warnings for old worker versioning APIs (#383)
2026-02-09 - ec8412c - Fix leak issues (#385)
2026-02-17 - 4c357f7 - Nexus caller-only support (#381)
2026-02-17 - bdd0604 - Add backoff on ResourceExhausted errors in Poller autoscaler (#387)

v1.2.0

Choose a tag to compare

@chris-olszewski chris-olszewski released this 26 Jan 19:50
cb27b40

Highlights

Ruby 4.0 Support

Add support for Ruby 4.0 while dropping support for Ruby 3.2.

Plugin Support (experimental)

Plugins provide an easier way to share complex configuration of workers and clients.

💥 Breaking Changes

  • Ruby 3.2 is no longer supported.

Specific Changes

2026-01-05 - 4462336 - Fix EnvConfig to read from system environment variables (#371)
2026-01-05 - a38d856 - Plugin support (#370)
2026-01-07 - 2bbcb88 - Drop Ruby 3.2, support Ruby 4.0 (#372)
2026-01-07 - 457233b - Remove gRPC development dependency (#375)
2026-01-07 - 7fe3beb - Remove wait condition fiber after yield complete (#374)
2026-01-12 - 00a5453 - Bump lru from 0.16.2 to 0.16.3 in /temporalio (#376)
2026-01-15 - 5feab3f - Add replaying_history_events? to allow logging in queries and validators (#378)

v1.1.0

Choose a tag to compare

@cretz cretz released this 08 Dec 15:02
9cdde27

Get from RubyGems and read the README

Highlights

Worker Heartbeating (Public Preview)

This release adds a new feature called Worker Heartbeating. This feature spins up a single nexus-only worker per Client/Namespace in the background and periodically sends some basic metrics over to server for all of the workers registered on the same Client/Namespace.

Server version 1.29.1 and newer supports this feature. This feature will be enabled by default, although this currently requires a server dynamic config flag, --dynamic-config-value frontend.WorkerHeartbeatsEnabled=true to enable. Currently, the only way to interact with this new data is to also enable the flag --dynamic-config-value frontend.ListWorkersEnabled=true, then use CLI commands temporal worker list and temporal worker describe to query the data. If heartbeating is enabled with a server version older or with the config flag off, a single warning log Worker heartbeating configured for runtime, but server version does not support it. on worker startup will emit.

💥 Breaking Changes

  • TLS is now automatically enabled if an api_key is provided to the client. Therefore in the rare case where an API key needs to be provided over non-TLS, tls: false needs to be used.
  • Client metrics that were associated with task queue attributes now properly use the normal task queue name instead of the sticky task queue name for workflows.

Specific Changes

2025-10-01 - 28fd3ff - Do not set OTel span error status for benign exceptions (#345)
2025-10-02 - 7354b08 - Mark json value as binary before assigning to field in payload (#347)
2025-10-06 - 8e57847 - Support binary values in gRPC metadata (#348)
2025-10-14 - 66434e6 - fix: update unsafe io test to look for closing html tag (#352)
2025-10-15 - 6c46bce - feat: add has_last_result? to workflow info (#351)
2025-10-16 - 0b82baf - Remove experimental notices from worker tuners (#350)
2025-10-29 - abb113d - Set explicit permissions for GitHub Actions workflows (#356)
2025-11-07 - 1274ac5 - Fix for macOS OpenSSL cert validation issue (#357)
2025-11-07 - 888b015 - fix: Add require so that errors can be declared (#358)
2025-11-12 - d869738 - Do not compact positional args in envconfig (#362)
2025-12-02 - bf2ad8e - Disable durable scheduler for more OTel calls (#365)
2025-12-04 - c84290a - 💥 enable TLS if api key provided (#366)
2025-12-05 - e4823d0 - Update Core with worker heartbeating support (#368)
2025-12-08 - 9cdde27 - Update release to 1.1 and fix gem building workflow (#369)

v1.0.0

Choose a tag to compare

@cretz cretz released this 29 Sep 20:31
49ef94e

Get from RubyGems and read the README

Highlights

Temporal Ruby SDK Generally Available

With this 1.0.0 release, the Ruby SDK is now considered stable. This means it has been thoroughly used and tested to ensure it meets Temporal quality standards. Throughout the prerelease period, we have received ample feedback and have adjusted the SDK as needed to address feedback and address any issues encountered. We strive to not make any backwards incompatible changes.

Environment Configuration Support (experimental)

Users can now use Temporalio::EnvConfig to load environment configuration from config files or environment variables. This is the same configuration approach that can be used across other SDKs and CLI. See https://docs.temporal.io/develop/environment-configuration for more details.

⚠️ This is experimental and subject to change.

Custom Slot Suppliers (experimental)

Worker tuners can now provide custom slot suppliers. This is for very advanced use cases that need custom logic to determine when a slot can be reserved. A custom implementation of Temporalio::Worker::Tuner::SlotSupplier::Custom can be provided for slot suppliers in a tuner which is then called from the C extension to determine if a slot can be reserved and to report on usage/release of the slot. Users of this API should pay close attention to API docs since it can affect the running of the system if implemented improperly.

⚠️ This is experimental and subject to change.

💥 MINOR BREAKING BEHAVIOR CHANGE - TLS cert override causes native certs to not be used

When a TLS server CA cert is explicitly set in TLS options to override system roots, the system roots will not be loaded. Prior to this version, system roots would still be loaded even if cert overrides were present.

Specific Changes

2025-09-03 - 1039803 - Bump golang.org/x/net in /temporalio/test/golangworker (#303)
2025-09-03 - 4fc6a58 - Bump tracing-subscriber from 0.3.19 to 0.3.20 in /temporalio (#331)
2025-09-08 - d3391ec - Reduce the scope of the illegal call tracer and other tracing fixes (#332)
2025-09-10 - 51b5f95 - Environment configuration (#326)
2025-09-11 - cd07caa - Activity reset support (#337)
2025-09-15 - 472ac69 - Added first_execution_run_id to Workflow::Info (#339)
2025-09-18 - 3a8a977 - Remove useless disable_file parameter for ClientConfig.load (#340)
2025-09-19 - 1aa91a2 - Added retry policy to activity info (#341)
2025-09-19 - 1bcac1a - Added option to set local activity summary. Added activity summary tests (#342)
2025-09-29 - 9b641d7 - Custom slot suppliers (#343)

v0.6.0

Choose a tag to compare

@cretz cretz released this 25 Aug 15:26
46ebcb4

⚠️ THIS IS A BETA RELEASE AND COMPATIBILITY MAY NOT BE MAINTAINED

Get from RubyGems and read the README

Highlights

💥 BREAKING CHANGE - Ruby Sync Constructs Invalid in Workflows

After many discussions/deliberations, we have decided to consider Ruby sync constructs in the standard library like sleep, Timeout.timeout, Mutex, and Queue as illegal in workflows. Even though they are fiber-aware and therefore implicitly durable, they can accidentally be misused and are implicitly used inside things like loggers that can cause issues for workflows. We provide workflow-safe equivalents for use.

See the PR at #314, associated links on that PR, and the README for more information.

Task Queue Fairness Support (experimental)

This release adds support for Task Queue Fairness. Fairness is a new feature of Temporal's task queues that allows for more control over the order that tasks are dispatched from a backlog. It's intended to address common situations like multi-tenant applications and reserved capacity bands.

This is in addition to experimental "Task Queue Priority Support" provided last release.

Specific Changes

2025-07-24 - f3b34b4 - Coinbase Ruby guide (#304)
2025-08-11 - 21a3f31 - Fix issue with high-contention mutex causing hung workflows (#309)
2025-08-14 - ad2b9f5 - Update Core (#317)
2025-08-14 - d799d0b - Change Logger::Unknown to Logger::UNKNOWN in scoped_logger.rb (#316)
2025-08-15 - 4a9740e - Do not resume wait condition if fiber no longer alive (#312)
2025-08-18 - 248dc46 - 💥 BREAKING CHANGE - Disallow Ruby sync constructs from stdlib and provide safe alternatives (#314)
2025-08-20 - c3779da - Fairness Keys & Weights (#322)
2025-08-21 - 6512c02 - Priority key should be optional (#323)
2025-08-21 - 960f162 - Allow name reuse on different handler types (#321)
2025-08-25 - 16cf3aa - Update version to 0.6.0 (#324)
2025-08-25 - 866db2b - Update Core to support Unix-socket-based HTTP proxies (#325)

v0.5.0

Choose a tag to compare

@cretz cretz released this 24 Jul 16:44
3f457cb

⚠️ THIS IS A BETA RELEASE AND COMPATIBILITY MAY NOT BE MAINTAINED

Get from RubyGems and read the README

Highlights

Converter Hints

Most places that affect data conversion to/from types can now have a "hint" set which is passed to the payload converter. These hints are not used by the default converters, but custom converters may leverage them to know more about the (de)serialization they should perform.

Task Queue Priority Support (experimental)

Task queue priority annotations are present to set workflow/activity tasks with specific priorities. This is to support the new server-side task queue priority feature which is still experimental.

Worker Versioning (experimental)

Worker versioning details can be set for workflow/activity/worker options. This is to support the new server-side worker versioning feature which is still experimental.

Poller Auto-scaling

Options for automating poller scaling are now available for workers.

Activity Pause (experimental)

Activities are interrupted via cancellation mechanisms when paused. This is to support the new server-side activity pause feature which is still experimental.

Specific Changes

2025-04-28 - 1d8b2c6 - Add CODEOWNERS (#256)
2025-05-02 - 9ce9025 - Fix auto_time_skipping_disabled (#260)
2025-05-06 - f1339c4 - Set required_ruby_version to >= 3.2.0 in the gemspec (#258)
2025-05-12 - 8c5c8b9 - Add workflow check that local activity exists (#263)
2025-05-12 - 95dc94a - Fix issue with OTel timestamps (#257)
2025-05-14 - df0a34f - Worker Versioning (#262)
2025-05-19 - 644bb8c - Use proper workflow start time in workflow info (#266)
2025-05-19 - 64deb42 - Rails README updates (#269)
2025-05-19 - f2e5c17 - Disallow keyword arguments on handlers with deserialized arguments (#265)
2025-05-29 - 196e0ac - Priority annotations (#274)
2025-05-29 - 251c16f - Expose poller automation (#275)
2025-06-03 - 143e257 - Added application error category (#277)
2025-06-09 - 2d764b5 - Properly retry start update if not ready yet (#282)
2025-06-09 - 9a043a2 - Do not require heartbeating to be done in context (#280)
2025-06-10 - 143e421 - Activity pause support (#283)
2025-06-27 - cc5b393 - Allow specifying Exception as workflow failure types (#286)
2025-06-27 - ec7212b - Pagination support for listing workflows through a new Client#list_workflow_page method (#285)
2025-06-27 - ee772d4 - Support certain Time calls in workflows with advanced validation (#291)
2025-07-07 - 7eb50a5 - Make application error type default to unqualified type name (#295)
2025-07-07 - dc83329 - Allow unsafe disabling of durable workflow scheduler (#284)
2025-07-14 - 5685901 - Converter hints (#296)
2025-07-22 - 6ca1482 - Update Core (#302)
2025-07-22 - c00f40a - Allow hints for accessing last heartbeat details (#300)
2025-07-23 - 5be2e52 - Prevent using SDK runtimes/clients/workers across forks (#301)