Announcing the OpenTelemetry JavaScript SDK 3.0

OpenTelemetry JavaScript has released SDK 3.0 (stable v3.0.0 packages and experimental v0.300.0 packages) and API 1.10.0.

What is JS SDK 3.x?

JS SDK 3.x encompasses new releases of the @opentelemetry/* JavaScript packages published from the opentelemetry-js repository, except the API and semantic-conventions packages. The package versions for this new major will be >=3.0.0 for the stable and >=0.300.0 for the unstable packages. Details on the full list of packages can be found in the migration guide.

In addition, all the packages from the opentelemetry-js-contrib repository have been upgraded to JS SDK 3.x and released.

Per OpenTelemetry guidelines, the 2.x versions of stable SDK packages will be supported for one year from the 3.0.0 release.

What has changed?

  • The minimum supported Node.js has been raised to >=22.15.0. This means that support for Node.js 18 and 20 has been dropped.
  • All packages now ship proper ES Module (ESM) and CommonJS exports. The result should be much friendlier to ESM and bundler users.
  • Support for complex attributes, per OTEP 4485, has been added to some parts of the API (e.g. span attributes, log record attributes). Some parts of the API only support simple attributes (e.g. resource attributes, metric attributes). See the explainer in the migration guide.
  • The @opentelemetry/api-logs package has been folded into @opentelemetry/api, as the Logs signal has been stabilized! With Logs stabilized, all three OpenTelemetry signals (Traces, Metrics, and Logs) are now stable in JavaScript. There will be a separate blog post on this stabilization.
  • Multiple Tracing SDK packages have been consolidated into the @opentelemetry/sdk-trace package, eliminating some confusing APIs and bringing consistency with the SDKs for the other signals.
  • Many deprecated packages have been removed, including @opentelemetry/propagator-jaeger, @opentelemetry/exporter-jaeger, @opentelemetry/shim-opentracing, and @opentelemetry/shim-opencensus. See the migration guide for the full list.
  • The public interface has changed. Several public types and class names have been renamed or moved.

The API package (@opentelemetry/api) does not have breaking changes. As well, users using the @opentelemetry/auto-instrumentations-node package as described at zero-code instrumentation do not need to change.

For more details and notes on migrating to 3.x / 0.300.x, see the migration guide.

Why was this done?

Starting with the SDK 2.0 release in March 2025, the OTel JS SIG has had a goal of a new SDK major release roughly every year. This cadence allows us to stay current with new major Node.js releases and more recent JavaScript ecosystem and tooling improvements.

For 3.0 specifically:

  • Node.js 20 reached end-of-life in April 2026.
  • Shipping proper ESM exports required changes to package entry points.
  • Removing deprecated and unmaintained packages lets the SIG focus on current features.
  • Logs stabilization and complex attribute support required API and SDK changes.

How can I get involved?

There are several ways to help shape SDK 3.x and beyond:

Acknowledgments

Shipping a major release is a lot of coordinated work, and SDK 3.0 would not exist without the many people who put time into it. Thank you to the OpenTelemetry JavaScript SIG for the design discussions, the migration PRs, the long reviews, and the many careful decisions about what to break and what to keep. Thanks also to the broader OpenTelemetry community and to everyone who contributed to this release.