releases.shpreview
Temporal/TypeScript SDK

TypeScript SDK

Mon
Wed
Fri
JunJulAugSepOctNovDecJanFebMarAprMayJun
Less
More
Releases9Avg3/moVersionsv1.17.2 to v1.18.1

Corrective Release

This release republishes the 1.17.2 source tree as 1.17.4.

1.17.3 was published accidentally and has been deprecated on npm. Use 1.17.4 for the 1.17.x line, or 1.18.0 for the current latest release.

Package Notes

  • Published the 1.17.2 package set as 1.17.4, including the contrib packages present in 1.17.2.
  • No source changes relative to 1.17.2 beyond package version updates.
  • npm latest remains 1.18.0; release-1-17 points to 1.17.4.

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/1.17.2...1.17.4

Notable Changes

  • [client, nexus] Standalone Nexus Operations support (#2027, #2085). Adds client.nexus, typed Nexus service clients, operation handles for result/describe/cancel/terminate, list/count APIs, Nexus client interceptors, Nexus operation errors, and TemporalOperationHandler for Nexus operations backed by Temporal workflows.
  • [common, client, workflow] New SerializationContext API across payload/failure conversion paths (#1996, #2054, #2058, #2060). Coverage now includes workflow/activity boundaries, workflow and schedule clients, async activity completion, and codecs.
  • [workflow] Named random streams (#1992) let plugins and libraries use deterministic randomness without consuming the workflow default PRNG stream.
  • [workflow] Workflow executions can now fail on selected error types, including non-determinism, instead of only failing workflow tasks (#2020).
  • [contrib] New @temporalio/workflow-streams package (#2039) for durable, offset-addressed workflow event streams, with sdk-python-compatible wire conventions.
  • [openai-agents] New @temporalio/openai-agents package (#2024) for running OpenAI Agents SDK agents as durable workflows. First contribution from @xumaple! Thank you!

Features

  • [client] Add ActivityOptions.startDelay support for standalone Activities (#2048).
  • [worker] Allow WorkerPlugin.configureWorker and configureReplayWorker hooks to return promises (#2030). First contribution from @wardpeet! Thank you!

Chores / Cleanup

  • [docs] Fix dead links (#2019). First contribution from @beninato8! Thank you!
  • [platform] Drop macOS Intel (macos-x64) from the CI tests matrix (#2078)

Dependencies

  • [deps] Bump dependencies on webpack, source-map-loader and others (#2077).

New Contributors

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/1.17.2...v1.18.0

DNS Resolver Load Balancing Configuration

A new load balancing feature was added in https://github.com/temporalio/sdk-rust/pull/1212 which has caused networking issues in certain networking setups. This is now disabled by default via the change listed below (https://github.com/temporalio/sdk-typescript/pull/2049).

What's Changed

New Contributors

Features

Bug Fixes

Dependencies

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.17.0...v1.17.1

Notable Changes

Features

Bug Fixes

Chores / Cleanup

Dependencies

New Contributors

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.16.0...v1.17.0

Notable Changes
  • 💥 The Nexus API has several breaking changes in this release; see items marked 💥 in the sections below. Of particular note: NexusClient has been renamed to NexusServiceClient (#1993), and NexusInboundCallsInterceptor now requires executeStartOperation and executeCancelOperation instead of the old generic execute method (#1979).
Features
  • [worker] Extend bundler to support pre-loading modules into the reusable V8 context via a new preloadModules option on BundleOptions/WorkerOptions.bundleOptions; pre-loaded modules are shared across workflow executions, reducing per-workflow memory and startup overhead (#1999)
  • [nexus] 💥 Add Nexus Inbound Interceptors — NexusInboundCallsInterceptor now exposes executeStartOperation and executeCancelOperation, replacing the previous generic execute interceptor (#1979)
  • [opentelemetry] 💥 Nexus OpenTelemetry support — adds inbound interceptors and distributed trace context propagation across Nexus service boundaries; renames interceptor I/O types from ExecuteNexusOperation* to NexusStartOperation*/NexusCancelOperation*, and adds RunStartNexusOperation and RunCancelNexusOperation span names (#1998)
  • [nexus] 💥 Nexus error serialization now uses Temporal ProtoFailure end-to-end, aligning with other SDKs; also fixes a JS bug where comma-separated case values in gRPC status code mapping silently matched only the last value (#1973)
  • [nexus] 💥 Rename NexusClient to NexusServiceClient in preparation for upcoming Nexus Standalone Operations (#1993)
  • [nexus] Add scheduleToStartTimeout and startToCloseTimeout options to the workflow Nexus client API (#1942)
  • [nexus] Standardize Nexus operation input deserialization error handling: payload codec decode failures are now surfaced as retryable INTERNAL handler errors, while payload converter failures remain non-retryable BAD_REQUEST; ApplicationFailure is passed through directly (#1949)
  • [nexus] Infer workflow result type from WorkflowRunOperationHandlerstartWorkflow now returns WorkflowHandle<WorkflowResultType<T>>, removing the need to explicitly type the handler (#1968)
  • [worker] Allow WorkerDeploymentOptions to omit defaultVersioningBehavior when useWorkerVersioning is false, enabling workers to report a build ID to the Temporal UI without opting into full worker versioning (#1963)
  • [worker] Propagate targetWorkerDeploymentVersionChanged and Continue-As-New suggested reasons for worker deployment versioning trampolining (#1972)
Bug Fixes
  • [client] Suppress spurious unhandled rejection from WithStartWorkflowOperation when executeUpdateWithStart fails before a response is received (#1990)
  • [opentelemetry] Do not mark CompleteAsyncError as a span error (#1989)
  • [opentelemetry] Avoid TypeError when user code throws a non-Error value (#1984)
  • [worker] Tolerate empty rootWorkflowExecution/parentWorkflowExecution objects from pre-v1.24 servers, preventing IllegalStateError on resumed workflows (#1969)
  • [ai] Use activityOptions in callTool proxy (#1954)
Dependencies
  • [core] Update sdk-core (#1959)
  • [deps] Bump vulnerable dependencies (#1957, #1988)
  • [deps] Bump rustls-webpki from 0.103.9 to 0.103.10 (#1978)
  • [deps] Bump quinn-proto from 0.11.13 to 0.11.14 (#1961)
  • [deps] Bump tar (#1976, #1946)

Breaking changes are marked with 💥

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.15.0...v1.16.0

Notable Changes
Features
  • [opentelemetry] Expose functionality as plugin (#1884)
  • [worker] Worker Connection Replacement (#1902)
  • [workflow] Nexus Cancellation Types (#1894)
  • [worker] Worker deployment versioning is now GA (#1924)
  • [envconfig] Environment configuration is now GA (#1924)
  • [testing] Add API to setup Nexus endpoint on ephemeral test server (#1897)
  • [nexus] Expose Temporal Nexus operation info to Temporal Nexus operation (#1896)
  • [bun] 🧪 Bun support - experimental (#1906)
  • [runtime] 🧪 Buffered metrics - experimental (#1922)
Bug Fixes
  • [worker] Add exponential backoff on ResourceExhausted and other gRPC errors in Poller autoscaler (#1938 and #1944)
  • [native] Correct native binding type for workerValidate (#1939)
  • [client] Expose operatorService on ConnectionLike interface (#1904)
  • [opentelemetry] Serialize TraceState before exporting to sink (#1891)
  • [opentelemetry] makeWorkflowExporter accepts SpanProcessor (#1886)
  • [ai] Add await to tool execution (#1882)
  • [ai] Description was missing from the derived mcp tools (#1905)
  • [ai] Fix a bug in AI SDK MCP Schema conversion (#1890)
  • [common] Make search attribute type more lenient when parsing (#1943)
  • [workflow] Allow logging queries validators during replay (#1927)
  • [ai] Add missing dependency to ai package (#1878)
  • [worker] Fix wf_task_replay_latency metric recording for non-replay tasks (#1083)
  • [worker] Always send shutdown_worker RPC, fix WorkerStatus state when shutting down worker (#1082)
  • [worker] Fix bug where we count first WFT as sticky cache hit (#1091)
Dependencies
  • 💥 Drop node 18 support (#1930)
  • [api] Update Temporal Protobuf APIs to v1.61.0 (#1100)
  • [deps] Bump vulnerable dependencies (hono, jws, tar, ...) (#1900)
  • [deps] Run cargo update (#1937)
  • [deps] Bump webpack from 5.94.0 to 5.104.1 (#1929)
  • Upgrade eslint (#1933)
  • [deps] Bump bytes from 1.10.1 to 1.11.1 in /packages/core-bridge (#1921)
  • [deps] Bump @modelcontextprotocol/sdk from 1.25.2 to 1.26.0 (#1928)
  • [deps] Bump tar from 7.5.3 to 7.5.7 (#1916)

Breaking changes are marked with 💥 Experimental features are marked with 🧪

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.14.1...v1.15.0

Minor Features

  • [ai-sdk] Upgrade to AI SDK v6 with embedding model support (#1865, thabnks @ItsWendell)

Bug Fixes

  • [workflow] Automatically cleanup AsyncLocalStorage on workflow context disposal (#1871)
  • [OpenTelemetry] Avoid lazy loading workflow package in interceptors (#1872)
  • Fix Env Config path to match docs (#1870)
  • Fix typos in heartbeat JSDoc (#1863, thanks @daveyarwood)

Security

  • Bump lru from 0.16.1 to 0.16.3 (#1873)

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.14.0...v1.14.1

Noteworthy Features

  • 🧪 [ai] Introduced (experimental) AI SDK Integration (#1792).
  • 💥 [client] TLS is enabled by default if an API key is provided (#1847). To disable TLS in that specific context, explicitly set tls: false.

Minor Features

  • [opentelemetry] Create spans for all interceptor events (#1835)
  • [worker] Enable Worker heartbeating (#1818). Worker heartbeating allows smoother server-side behaviors when a Worker is shut down or somehow become unreachable.
Bug Fixes
Security
SDK-Core update

Commit https://github.com/temporalio/sdk-core/commit/bd02cceae2a4e0006fe86911a6ad3b7cf7dd2ad8 -> https://github.com/temporalio/sdk-core/commit/44a6576bbaac589b28afa173ca6d60757a4d821d

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.13.2...v1.14.0

[1.13.2] - 2025-11-10

Note Worthy Features
  • (experimental) Plugins Implementation (#1794)
    • Plugins are a new way of providing easy configuration of workers and clients
  • (experimental) Introduce envconfig package (#1795)
    • envconfig provides a way to configure clients using TOML files
Minor Features
  • Create RawValue from direct payload using identity payload converter (#1806)
  • Add support for gRPC binary metadata values (#1791)
  • Make address of test server public (#1819)
  • Bump uuid to 11.1.0 (#1789, thanks to @TastyPi 🙏)
Bug Fixes
  • [otel] Mark peer dependencies as optional (#1812)
  • [otel] Remove await from OTEL handleSignal interceptor (#1803)
Security
  • Set explicit permissions for GitHub Actions workflows (#1815)
Notable Changes
  • Remove experimental notices from poller behavior (#1821)
  • Remove experimental notices from worker tuner APIs (#1797)
SDK-Core update

Commit 871b320 -> bd02cce:

[1.13.1] - 2025-10-08

Minor features
  • Eager Workflow Start (#1757)
  • Activity reset (#1730)
Bug Fixes
  • Added retry policy to activity info (#1788)
  • Don't set error status on otel spans for benign exceptions (#1786)
Vulnerabilities
  • Bump tracing-subscriber from 0.3.19 to 0.3.20 in /packages/core-bridge (#1780)

[1.12.3] - 2025-08-19

Bug Fixes
  • Fix a recurring "Network error while sending worker heartbeat error due to PermissionDenied" warning messages in worker logs observed by Temporal Cloud users after upgrading to TS SDK 1.12.2 (#1766)
  • Fix "Critical dependency: the request of a dependency is an expression" warning message emitted by workflow bundler since TS SDK 1.12.2 (#1767).
  • Set default workflowExecution.runId to a UUID in MockActivityEnvironment (#1723, thanks @TastyPi).
Minor features
  • [Experimental] Activity pause/unpause (#1729)

Full Changelog: https://github.com/temporalio/sdk-typescript/compare/v1.12.2...v1.12.3

[1.12.2] - 2025-08-13

Bug Fixes
Minor features
Notable changes

[1.12.1] - 2025-07-07

Bug Fixes
  • Bridge's error conversion logic now uses the isPromise node's utility function instead of an instanceof Promise check. The latter may give false negatives in Jest, resulting in not converting errors thrown from the Rust side. This has been causing Jest tests to fail with ShutdownError: Worker has been shutdown errors using TS SDK 1.12.0. (#1737)

[1.12.0] - 2025-07-01

Note Worthy Features
  • Add experimental support for Worker Deployment Versioning (#1679)

  • Add support for Typed Search Attributes. (#1612, #1625)

    TypedSearchAttributes are intended to replace the existing (not type-enforced) SearchAttributes.

    // Define a typed search attribute; that would generally be done at the top of one's
    // `workflow.ts` file, or in some shared location, similar to definition of Signals,
    // Query and Update types
    const orderStatusSearchAttribute = defineSearchAttributeKey('orderStatus', 'KEYWORD');
  • Add ability to register new Search Attributes when starting a local development server (#1624)

    // Starting a new local development server, immediately registering the specified search attributes.
    const env = await createLocalTestEnvironment({
      server: {
        searchAttributes: [orderStatusSearchAttribute],
      },
    });
  • Add support for the Update-with-Start API on the Workflow Client. (#1585).

    Example usage

    const startWorkflowOperation = WithStartWorkflowOperation.create(transactionWorkflow, {
      workflowId,
      args: [transactionID],
      taskQueue: 'early-return',
      workflowIdConflictPolicy: 'FAIL',
    });
    
    // This is the result of the _update_ call
    const earlyConfirmation = await client.workflow.executeUpdateWithStart(getTransactionConfirmation, {
      startWorkflowOperation,
    });
    
    // This is an handle to the workflow execution that was started. It can be used
    // to wait for the workflow execution to complete and capture its return value
    const workflowHandle = await startWorkflowOperation.workflowHandle();
    const finalReport = await workflowHandle.result();
  • Add support for default activity handler, update handler and query handler. A default handler will be called for any incoming request if no handler has been explicitely set for the given type name. (#1639, #1640, #1642)

    Example usage: Default Update Handler

    export async function myWorkflow(useDefinedQuery: boolean): Promise<void> {
      setDefaultUpdateHandler((updateName, ...args: any[]) => {
        // ...
      });

    Example usage: Default Query Handler

    export async function myWorkflow(useDefinedQuery: boolean): Promise<void> {
      setDefaultQueryHandler((queryName: string, ...args: any[]) => {
        // ...
      });
  • Add experimental support for emitting custom metrics from workflows and activities. (#1705)

Example usage: From a Workflow

import * as wf from `@temporalio/workflow`;

async function myWorkflow() {
  const myHistogramMetric = wf.metricMeter.createHistogram(
    'my-custom-histogram',
    'int', // or 'float'
    'ms', // Units (optional)
    'description' // (optional)
  );

  myHistogramMetric.record(50);
  myHistogramMetric.record(50, { tag1: 'tag-value' });
}

Example usage: From an Activity

import * as act from `@temporalio/activity`

const myCounterMetric = metricMeter.createCounter('activity-counter');

async function myActivity() {
  const myCounterMetric.add(1);
}
  • Add experimental support for more powerful configuration of Workflow Task Pollers and Activity Task Pollers. (#1704)

  • Add experimental support for task priority. For now, only the numeric priority value is supported, which is a number between 1 (top priority) and 5 (lowest priority). Priority can be set when starting workflows or scheduling activities. Note that this feature requires server side support which has not yet been released. (#1669)

Minor features
  • Add a new category property on ApplicationFailure. (#1719)

    This new option allows controlling some of the observability and logging behaviors of the Worker related to a failure thrown from an Activity.

  • Add high level API support for the CountWorkflowExecution operation to the Workflow Client (#1573) That operation efficiently determine the number of Workflows matching some list filter; the list filter may also include a GROUP BY clause.

    Example usage

    const workflowCount = await client.workflow.count(`TaskQueue = '${taskQueue}' GROUP BY ExecutionStatus`);

    after which workflowCount might look something like this:

    {
      count: 5,
      groups: [
        { count: 2, groupValues: [['Running']] },
        { count: 3, groupValues: [['Completed']] },
      ],
    };
  • [workflow] Expose AbortController to the worker sandbox (#1576, thanks @lukeramsden).

  • The following APIs are no longer @experimental: (#1590, #1622)

    • Workflow Update
    • Client gRPC Retry interceptor
    • HTTP Proxy support
    • Forwarding and filtering of Core's logs
    • Configuration of Core's metrics
    • WorkerOptions.nonStickyToStickyPollRatio
  • [interceptors-opentelemetry] Propagate the OpenTelemetry tracing context from a workflow to local activities (#1577)

  • [interceptors-opentelemetry] Add error messages to OpenTelemetry tracing span status, when applicable. (#1632, thanks @xavierroma)

  • [workflow] Include information about the current Update (if applicable) in Workflow logging output (#1595)

  • [worker] Add multiple Worker and Telemetry options (#1623)

    • On TelemetryOptions:

      • Add the following properties:
        • metrics.metricPrefix
        • metrics.attachServiceName
        • metrics.globalTags
        • metrics.histogramBucketOverrides
        • metrics.otel.http
      • Move metrics.temporality to metrics.otel.temporality, as Core doesn't support that option on Prometheus. This is coherent with other Core-based SDKs.
      • Deprecate property TelemetryOption.noTemporalPrefixForMetrics, promoting the use of the more versatile metrics.metricPrefix property instead
    • On DevServerConfig:

      • Add server.uiPort property — fixes #1611
      • Fix the server.dbFilename property, which had never worked due to a naming inconsistency between the lang's interface and bridge's code
    • On NativeConnectionOptions:

      • Add boolean property disableErrorCodeMetricTags.

    All of those change preserve compatibility with prior behaviors and deprecated settings.

  • Add partial support for powering a Workflow Client from a NativeConnection rather than a Connection. (#1699)

  • Expose root execution information from WorkflowInfo and WorkflowDescription. (#1662)

Bug Fixes
  • [workflow] Fix multiple context leaks and bugs in reuseV8Context executor. (#1605)

    • …by reassigning a new object to an existing shared global variable;
    • …by modifying one of Node's built in global objects;
    • …by deleting a previously set global variable;
    • …by defining global symbol properties.

    💣 These changes should

  • [client] Homogenize and clarify that default address is localhost everywhere in public exposed code (that's the correct thing to do and should be non-breaking everywhere except on very badly configured dual-stack machines, in which case they would have had errors anyway due to inconsistencies between Client and NativeClient).

  • [workflow] Clearly differentiate Workflow Task Failures resulting from unhandle Promise rejections (#1606).

    This was a recurring source of extremely difficult to diagnose Workflow Task failures. Going forward, a Workflow Task Failure resulting form unhandled Promise rejection will clearly indicate "Unhandled promise rejection".

  • [workflow] Do not appear to support conflict policy when start a child workflow (#1649)

  • 💥 Use plain Error in FailureConverter, WorkflowFailedError, and WorkflowUpdateFailedError (#1685)

  • [client] Properly set temporal-namespace header on gRPC requests (#1712)

  • [bridge] The Core Bridge layer is now much more robust, better handle various unexpected situations, and provide more detailed and more consistent error messages. (#1698)

    The Core Bridge layer went through a major refactor to prepare it for upcoming new features. This refactor also allowed resolution of several lifecycle bugs that could happen in various edge cases, including:

    • Node discards Promises created by calling into the Core Bridge with callbacks (#1302)
    • Process hangs on normal exit if some native resource (NativeConnection, Worker, WorkflowTestEnvironment, etc) were not properly closed (#1413).
    • Failure to start ephemeral server prevents shutdown of the process (#1443).
    • Hundreds of OTLP errors showing up in logs when shutting down the runtime (#1495).

    💥 This refactor establishes a much stronger distinction between public and internal APIs. Though we never encouraged direct import from the @temporalio/core-bridge package, some types were previously exported from the core-bridge package and reexported from a public facing package. Due to that confusion, it is possible that some users may have been previously importing types from that package. This is no longer possible and will result in compilation errors. Please import those types from the @temporalio/worker or @temporalio/testing packages.

  • [bridge] Log forwarding from Core SDK to the TS logger is now less demanding on CPU. As part of the COre Bridge Layer refactor, log forwarding was changed to a push model, rather than a pull model; which was previously reported to cause a constant, non negligeable CPU usage, even when the Worker was left idle for long periods of time. (#1698)

Miscellaneous Tasks
  • 💥 Dropped support for Node 16 (#1586).

  • Upgrade multiple vulnerable dependencies (#1603, #1614, #1627, #1637, #1667, #1709)

Thanks

Huge thanks to the following users for their contributions.

Advanced notices

  • 1.12.x will likely be the last minor release to support Node 18.

[1.11.8] - 2025-05-13

Bug Fixes
  • [client] Properly set temporal-namespace header on gRPC requests (#1714)
Miscellaneous Tasks
  • Update multiple vulnerable dependencies (#1694)
  • Update Core SDK (#1707)
Last Checked
23m ago
Tracking since Aug 4, 2023