Repository navigation
Releases: open-telemetry/opentelemetry-js
Releases Β· open-telemetry/opentelemetry-js
Release list
v2.12.0
2.12.0
π Features
- chore(sdk-trace): add
StackContextManagerin@opentelemetry/sdk-tracepackage #7086
π Internal
- feat(ci): support releasing from maintenance branches #6767 @pichlermarc
- The API documentation site is only redeployed for releases whose commit is reachable from
main, so a maintenance release no longer overwrites it.
- The API documentation site is only redeployed for releases whose commit is reachable from
experimental/v0.223.0
0.223.0
π₯ Breaking Changes
- chore(web-common)!: clean up and deprecate network span utils #7114
- These utilities were long planned for removal. They were moved from the
sdk-trace-webpackage and are currently only used by the (deprecated)instrumentation-fetchandinstrumentation-xml-http-requestpackages. - Drop the
skipOldSemconvContentLengthAttrsvestigial option fromaddSpanNetworkEvents().
- These utilities were long planned for removal. They were moved from the
π Internal
- refactor(web-common, instrumentation-fetch, instrumentation-xml-http-request): move utils from
@opentelemetry/sdk-trace-web
into@opentelemetry/web-commonand use them in@opentelemetry/instrumentation-fetchand@opentelemetry/instrumentation-xml-http-request.
With this change the instrumentations do not depend on SDK packages and the utils are kept in a shared package so we avoid code duplication.
v2.11.0
2.11.0
π Features
- feat(context-async-hooks): implement
attach()onAsyncLocalStorageContextManager#6845 @pichlermarc- On Node.js 25.9+, delegates to
AsyncLocalStorage.withScope()returning a nativeRunScope. On older Node.js, falls back toenterWith()with a manual disposable wrapper.
- On Node.js 25.9+, delegates to
- feat(sdk-trace): allow configuring the force flush timeout per call #6929 @LarryHu0217
π Bug Fixes
π Internal
- perf(sdk-metrics): reuse a single DataView for exponential histogram bit reads #6998 @mwear
- chore(ci): run documentation tests on a weekly schedule #6920 @LarryHu0217
- feat(ci): support pre-releases and major version bumps in the release workflow #6768 @pichlermarc
- chore(resources): Ensure that multiple uses of serviceInstanceIdDetector.detect() return the same value for
service.instance.id
experimental/v0.222.0
0.222.0
π₯ Breaking Changes
- fix(sdk-node)!: fail-fast on Propagator creation from config file #6930 @trentm
- fix(sdk-node)!: fail-fast on MeterProvider creation from config file #6954 @trentm
- fix(sdk-node)!: fail-fast on TracerProvider creation from config file #6962 @trentm
- fix(sdk-node)!: fail-fast on Resource creation from config file #6989 @trentm
-
This also breaks some usage of
startNodeSDK()for environment-based config, i.e. when not using a config file. For example withOTEL_NODE_RESOURCE_DETECTORS=all, it results in an error message and a no-op SDK.
(This does not impact users ofnew NodeSDK()-- the currently recommended mechanism to start an SDK using this package.)Could not create OpenTelemetry SDK from configuration, SDK will not be setup: unknown ExperimentalResourceDetector name in configuration: "container"
-
π Features
- feat(sdk-logs): deprecate
SdkLogRecordin favor ofReadWriteLogRecord#6939 @pichlermarc
π Bug Fixes
- fix(instrumentation-http): redact sensitive query parameters on incoming (server) spans; add
redactedQueryParamsServerconfig option @dyladan - fix(sdk-node): support
headers_listwhen creating OTLP exporters from declarative configuration #6953 @JacksonWeber
π Documentation
- docs(sdk-logs): mark logger configuration as experimental #6996 @LarryHu0217
- docs(configuration): document the
ConfigModelsuffix naming convention for exported types #6612 @vedantchalke36
π Internal
- refactor(sampler-jaeger-remote): remove
axiosdependency and usefetchto get the sampler configuration from Jaeger API #6963 @david-luna
v2.10.0
2.10.0
π Features
- feat(sdk-logs): implement log processor metrics #6554 @anuraaga
- feat(otlp-exporter): implement exporter metrics #6480 @anuraaga
- feat(propagator-jaeger): Notice: The
@opentelemetry/propagator-jaegerpackage will be removed in SDK 3.x, planned for approximately September 2026. @pichlermarc- The Jaeger propagator has been deprecated by the OpenTelemetry specification in favor of
W3CTraceContextPropagator. This package will be removed in a future release.
- The Jaeger propagator has been deprecated by the OpenTelemetry specification in favor of
π Bug Fixes
- fix(sdk-trace): reject
SimpleSpanProcessor.forceFlush()when a pending export fails #6771 @LarryHu0217 - fix(sdk-trace): include trace IDs at the ratio 1 upper bound in
TraceIdRatioBasedSampler#6890 @LarryHu0217
π Internal
- chore: build on Node 26 in CI #6887 @overbalance
- chore: bump to [email protected] @pichlermarc
experimental/v0.221.0
0.221.0
π₯ Breaking Changes
- feat(sdk-logs)!: configure the force flush timeout per call #6931 @LarryHu0217
- (user-facing):
LoggerProviderOptions.forceFlushTimeoutMillishas been removed; passtimeoutMillistoLoggerProvider.forceFlush()instead.
- (user-facing):
- feat(instrumentation-http)!: emit only stable HTTP semantic conventions. The
OTEL_SEMCONV_STABILITY_OPT_INenvironment variable no longer changes HTTP attribute or metric emission β old (v1.7.0) and duplicate (http/http/dup) semconv outputs have been removed. #6819 @maryliag - feat(instrumentation-fetch)!: emit only stable HTTP semantic conventions. The
semconvStabilityOptIninstrumentation config option has been removed; old (v1.7.0) and duplicate semconv outputs are no longer emitted. #6819 @maryliag - feat(instrumentation-xml-http-request)!: emit only stable HTTP semantic conventions. The
semconvStabilityOptIninstrumentation config option has been removed; old (v1.7.0) and duplicate semconv outputs are no longer emitted. #6819 @maryliag - feat(instrumentation-grpc)!: emit only stable network semantic conventions. The
OTEL_SEMCONV_STABILITY_OPT_INenvironment variable no longer changes attribute emission βnet.peer.nameandnet.peer.port(old) are no longer set; onlyserver.addressandserver.port(stable). #6819 @maryliag
π Features
- feat(sdk-logs): allow modifying ReadWriteLogRecord properties (including hrTime, hrTimeObserved, and spanContext) in accordance with the OpenTelemetry Logs specification #6923 @Babul422
- feat(sdk-node): emit a deprecation warning when the
JaegerPropagatoris selected viaOTEL_PROPAGATORSor declarative config; usetracecontextinstead. @pichlermarc - feat(instrumentation-http): set
error.typeto status code in metrics for error requests. #6919 @raphael-theriault-swi
semconv/v1.43.0
1.43.0
π Features
- feat: update semantic conventions to v1.43.0 #6883
- Semantic Conventions v1.43.0: changelog | latest docs
@opentelemetry/semantic-conventions(stable) changes: 1 added export@opentelemetry/semantic-conventions/incubating(unstable) changes: 1 added export
Stable changes in v1.43.0
1 added export
TELEMETRY_SDK_LANGUAGE_VALUE_KOTLIN // "kotlin"Unstable changes in v1.43.0
1 added export
ATTR_AZURE_RESOURCE_GROUP_NAME // azure.resource_group.namesemconv/v1.42.0
1.42.0
π Features
- feat: update semantic conventions to v1.42.0 #6871 @trentm
- Semantic Conventions v1.42.0: changelog | latest docs
@opentelemetry/semantic-conventions(stable) changes: 46 added exports@opentelemetry/semantic-conventions/incubating(unstable) changes: 74 newly deprecated exports, 16 added exports- Notably: This deprecates a number of GenAI-related exports. GenAI Semantic Conventions have been federated to a new semantic-conventions-genai repository. The eventual plan is to publish a separate
@opentelemetry/semantic-conventions-genaipackage with these exports.
- Notably: This deprecates a number of GenAI-related exports. GenAI Semantic Conventions have been federated to a new semantic-conventions-genai repository. The eventual plan is to publish a separate
Stable changes in v1.42.0
46 added exports
ATTR_CONTAINER_ID // container.id
ATTR_CONTAINER_IMAGE_NAME // container.image.name
ATTR_CONTAINER_IMAGE_REPO_DIGESTS // container.image.repo_digests
ATTR_CONTAINER_IMAGE_TAGS // container.image.tags
ATTR_K8S_CLUSTER_NAME // k8s.cluster.name
ATTR_K8S_CLUSTER_UID // k8s.cluster.uid
ATTR_K8S_CONTAINER_NAME // k8s.container.name
ATTR_K8S_CONTAINER_RESTART_COUNT // k8s.container.restart_count
ATTR_K8S_CRONJOB_ANNOTATION // (key) => `k8s.cronjob.annotation.${key}`
ATTR_K8S_CRONJOB_LABEL // (key) => `k8s.cronjob.label.${key}`
ATTR_K8S_CRONJOB_NAME // k8s.cronjob.name
ATTR_K8S_CRONJOB_UID // k8s.cronjob.uid
ATTR_K8S_DAEMONSET_ANNOTATION // (key) => `k8s.daemonset.annotation.${key}`
ATTR_K8S_DAEMONSET_LABEL // (key) => `k8s.daemonset.label.${key}`
ATTR_K8S_DAEMONSET_NAME // k8s.daemonset.name
ATTR_K8S_DAEMONSET_UID // k8s.daemonset.uid
ATTR_K8S_DEPLOYMENT_ANNOTATION // (key) => `k8s.deployment.annotation.${key}`
ATTR_K8S_DEPLOYMENT_LABEL // (key) => `k8s.deployment.label.${key}`
ATTR_K8S_DEPLOYMENT_NAME // k8s.deployment.name
ATTR_K8S_DEPLOYMENT_UID // k8s.deployment.uid
ATTR_K8S_JOB_ANNOTATION // (key) => `k8s.job.annotation.${key}`
ATTR_K8S_JOB_LABEL // (key) => `k8s.job.label.${key}`
ATTR_K8S_JOB_NAME // k8s.job.name
ATTR_K8S_JOB_UID // k8s.job.uid
ATTR_K8S_NAMESPACE_ANNOTATION // (key) => `k8s.namespace.annotation.${key}`
ATTR_K8S_NAMESPACE_LABEL // (key) => `k8s.namespace.label.${key}`
ATTR_K8S_NAMESPACE_NAME // k8s.namespace.name
ATTR_K8S_NODE_ANNOTATION // (key) => `k8s.node.annotation.${key}`
ATTR_K8S_NODE_LABEL // (key) => `k8s.node.label.${key}`
ATTR_K8S_NODE_NAME // k8s.node.name
ATTR_K8S_NODE_UID // k8s.node.uid
ATTR_K8S_POD_ANNOTATION // (key) => `k8s.pod.annotation.${key}`
ATTR_K8S_POD_HOSTNAME // k8s.pod.hostname
ATTR_K8S_POD_IP // k8s.pod.ip
ATTR_K8S_POD_LABEL // (key) => `k8s.pod.label.${key}`
ATTR_K8S_POD_NAME // k8s.pod.name
ATTR_K8S_POD_START_TIME // k8s.pod.start_time
ATTR_K8S_POD_UID // k8s.pod.uid
ATTR_K8S_REPLICASET_ANNOTATION // (key) => `k8s.replicaset.annotation.${key}`
ATTR_K8S_REPLICASET_LABEL // (key) => `k8s.replicaset.label.${key}`
ATTR_K8S_REPLICASET_NAME // k8s.replicaset.name
ATTR_K8S_REPLICASET_UID // k8s.replicaset.uid
ATTR_K8S_STATEFULSET_ANNOTATION // (key) => `k8s.statefulset.annotation.${key}`
ATTR_K8S_STATEFULSET_LABEL // (key) => `k8s.statefulset.label.${key}`
ATTR_K8S_STATEFULSET_NAME // k8s.statefulset.name
ATTR_K8S_STATEFULSET_UID // k8s.statefulset.uidUnstable changes in v1.42.0
74 newly deprecated exports
METRIC_GEN_AI_CLIENT_OPERATION_DURATION // gen_ai.client.operation.duration: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_GEN_AI_CLIENT_OPERATION_TIME_PER_OUTPUT_CHUNK // gen_ai.client.operation.time_per_output_chunk: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_GEN_AI_CLIENT_OPERATION_TIME_TO_FIRST_CHUNK // gen_ai.client.operation.time_to_first_chunk: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_GEN_AI_CLIENT_TOKEN_USAGE // gen_ai.client.token.usage: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_GEN_AI_SERVER_REQUEST_DURATION // gen_ai.server.request.duration: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_GEN_AI_SERVER_TIME_PER_OUTPUT_TOKEN // gen_ai.server.time_per_output_token: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_GEN_AI_SERVER_TIME_TO_FIRST_TOKEN // gen_ai.server.time_to_first_token: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_MCP_CLIENT_OPERATION_DURATION // mcp.client.operation.duration: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_MCP_CLIENT_SESSION_DURATION // mcp.client.session.duration: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_MCP_SERVER_OPERATION_DURATION // mcp.server.operation.duration: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_MCP_SERVER_SESSION_DURATION // mcp.server.session.duration: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
METRIC_V8JS_MEMORY_HEAP_LIMIT // v8js.memory.heap.limit: Replaced by `v8js.memory.heap.space.size`.
EVENT_GEN_AI_CLIENT_INFERENCE_OPERATION_DETAILS // gen_ai.client.inference.operation.details: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
EVENT_GEN_AI_CLIENT_OPERATION_EXCEPTION // gen_ai.client.operation.exception: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
EVENT_GEN_AI_EVALUATION_RESULT // gen_ai.evaluation.result: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
CPU_MODE_VALUE_KERNEL // kernel: Replaced by `system`.
ATTR_GEN_AI_AGENT_DESCRIPTION // gen_ai.agent.description: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_AGENT_ID // gen_ai.agent.id: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_AGENT_NAME // gen_ai.agent.name: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_AGENT_VERSION // gen_ai.agent.version: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_CONVERSATION_ID // gen_ai.conversation.id: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_DATA_SOURCE_ID // gen_ai.data_source.id: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_EMBEDDINGS_DIMENSION_COUNT // gen_ai.embeddings.dimension.count: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_EVALUATION_EXPLANATION // gen_ai.evaluation.explanation: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_EVALUATION_NAME // gen_ai.evaluation.name: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_EVALUATION_SCORE_LABEL // gen_ai.evaluation.score.label: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_EVALUATION_SCORE_VALUE // gen_ai.evaluation.score.value: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
ATTR_GEN_AI_INPUT_MESSAGES // gen_ai.input.messages: Moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai).
AT...v2.9.0
2.9.0
π₯ Breaking Changes
- docs(shim-opentracing): Notice: The
@opentelemetry/shim-opentracingpackage will be removed in SDK 3.x, planned for approximately September 2026.- The OpenCensus and OpenTracing compatibility requirements in the OpenTelemetry specification have been deprecated.
π Features
- feat(sdk-metrics): add maxExportBatchSize option to PeriodicExportingMetricReader #6655 @psx95
- Optimized
PeriodicExportingMetricReader.forceFlushto prevent redundant concurrent export cycles. Concurrent calls to forceFlush will now await any ongoing export and reuse a fresh export cycle if one is started concurrently by another caller. This ensures the latest metrics are always exported efficiently without triggering duplicate collection and export cycles.
- Optimized
- feat(sdk-trace): implement span processor metrics #6504 @anuraaga
- feat(sdk-trace): add a new "sdk-trace" package to hold the Trace SDK, without environment variable configuration handling that belongs elsewhere #6775 @trentm
- "sdk-trace" will eventually replace all of "sdk-trace-base", "sdk-trace-node", and "sdk-trace-web".
- The
BatchSpanProcessorconstructor call signature has changed in "sdk-trace". For example, beforenew BatchSpanProcessor(exporter, { maxQueueSize: 1000 }), afternew BatchSpanProcessor({ exporter, maxQueueSize: 1000 }). #6817 - The
SimpleSpanProcessorconstructor call signature has changed in "sdk-trace". For example, beforenew SimpleSpanProcessor(exporter), afternew SimpleSpanProcessor({ exporter, selfObsMeterProvider: ... }). #6504
- feat(sdk-trace): add AlwaysRecordSampler #6188 @majanjua-amzn
π Bug Fixes
- fix(propagator-jaeger): do not throw on malformed percent-encoded
uber-trace-id/uberctx-*headers during extract @pichlermarc
π Internal
- perf(sdk-metrics): defer allocation of HrTime to accumulation creation #6839 @legendecas
- chore(*): migrate use of sdk-trace-base and sdk-trace-node to sdk-trace #6851 @trentm
- perf(sdk-metrics): optionally capture active context for sync instruments #6848 @legendecas
experimental/v0.220.0
0.220.0
π₯ Breaking Changes
- refactor(sdk-logs)!: refactor BatchLogRecordProcessor constructor signature #6817 @trentm
- (user-facing):
BatchLogRecordProcessornow takes a singleoptionsobject with all possible properties, instead of two separate arguments. For example, beforenew BatchLogRecordProcessor(exporter, { maxQueueSize: 1000 }), afternew BatchLogRecordProcessor({ exporter, maxQueueSize: 1000 }). interface BufferConfig->interface BatchLogRecordProcessorOptions, and now includes theexporterpropertyinterface BatchLogRecordProcessorBrowserConfig->interface BatchLogRecordProcessorBrowserOptions- (user-facing):
SimpleLogRecordProcessornow takes a singleoptionsobject with all possible properties. For example, beforenew SimpleLogRecordProcessor(exporter), afternew SimpleLogRecordProcessor({ exporter }). #6836
- (user-facing):
- refactor(configuration)!: change config file parsing to not add default values, nor merge
*_listfields #6765 @trentm- Responsibility for handling declarative config "nullBehavior" and "defaultBehavior" belongs in the "create" handling, currently in the "sdk-node" package.
- docs(shim-opencensus): Notice: The
@opentracing/shim-opencensuspackage will be removed in SDK 3.x, planned for approximately September 2026.- The OpenCensus and OpenTracing compatibility requirements in the OpenTelemetry specification have been deprecated.
- chore(sdk-node)!: Drop support for deprecated OpenCensusMetricProducer from declarative config
π Features
- feat(configuration): bump config schema to v1.1.0; rename
without_scope_infoβscope_info_enabledandwithout_target_info/developmentβtarget_info_enabled/developmenton the Prometheus pull exporter (semantics inverted), renamewith_resource_constant_labelsβresource_constant_labels. Validatefile_formatper the configuration versioning spec: accept any minor version of major1(e.g.1.0,1.1), warn when the minor version is newer than supported, and reject other major versions. #6781 @MikeGoldsmith - feat(sdk-node): wire up
id_generatorfrom declarative config #6782 @MikeGoldsmith - feat(sdk-node): wire up
tracer_provider.samplerfrom declarative config (always_on, always_off, trace_id_ratio_based, parent_based); unrecognized variants warn and fall back to ParentBased(AlwaysOn) #6506 @MikeGoldsmith - feat(propagator-env-carrier): empty name normalization #6827 @pellared
- feat(propagator-env-carrier): make
EnvironmentGetterread the currentprocess.env#6853 @pellared
π Bug Fixes
- fix(sdk-logs): stop
Logger.emit()doing work (record construction, metrics, processoronEmit) after theLoggerProviderhas shut down #6826 @anneheartrecord - fix(sdk-node): pass all config properties (endpoint, headers, timeout, TLS, compression, temporality preference, default histogram aggregation) to OTLP metric exporters in declarative config #6814 @MikeGoldsmith
- fix(sdk-logs): default BatchLogRecordProcessor
scheduleDelayMillisis 1000 #6796 @trentm - fix(configuration): percent-decode keys and values in
resource.attributes_listper spec #6787 @MikeGoldsmith - fix(configuration): default
log_leveltoinfoin env-based config initialization for consistency with file-based config #6788 @MikeGoldsmith - fix(sdk-node): fail-fast on LoggerProvider creation with startNodeSDK() and declarative config #6785 @trentm
π Documentation
- docs(configuration): link the configuration README to the cross-SDK declarative config language support status doc #6809 @MikeGoldsmith
π Internal
- chore(sdk-node): migrate to use the new sdk-trace package #6828 @trentm
- The
nodere-export of@opentelemetry/sdk-trace-nodeandtracingre-export of@opentelemetry/sdk-trace-basehave been deprecated. (Historically the@opentelemetry/sdk-nodepackage has re-exported from a number of core packages. It is now recommended that users directly import from those other packages.)
- The
- chore(*): migrate use of sdk-trace-base and sdk-trace-node to sdk-trace #6851 @trentm
- fix(instrumentation,instrumentation-http): fix codecov coverage under-reporting by merging coverage across CJS/ESM test runs #6867 @mwear