NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1770 most downloaded on crates.io
[DEPRECATED] Datadog exporters and propagators for OpenTelemetry. Use https://github.com/DataDog/dd-trace-rs instead.
Last release 2 months ago
05 Aug 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 21 of 22 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
22 releases · first in 2021
Deprecation release. This marks opentelemetry-datadog as deprecated on crates.io. No functional code changes.
Deprecation release. This marks opentelemetry-datadog as deprecated on crates.io. No functional code changes.
DEPRECATED: This crate is deprecated and will be removed from this repository in a future release (#674). Datadog ships a first-party integration, dd-trace-rs, built on top of opentelemetry_sdk. New users should adopt dd-trace-rs; existing users are encouraged to migrate. See #609 for context.
Released 2026-Aug-05
dd-trace-rs, built on top of
opentelemetry_sdk. New users should adopt dd-trace-rs, and existing users
are encouraged to migrate. See
issue #609
for context.One column per quarter.
Bump opentelemetry and opentelemetry_sdk versions to 0.32
Released 2026-May-13
reqwest from 0.12 to 0.13 (required by opentelemetry-http 0.32).DatadogPipelineBuilder::build_exporter, install_simple, and
install_batch now return Result<_, opentelemetry_datadog::Error> (previously
opentelemetry_sdk::trace::TraceError, which was removed upstream in 0.32).Bump opentelemetry and opentelemetry_sdk versions to 0.31
Bump opentelemetry and opentelemetry_sdk versions to 0.30
Released 2026-Jul-28
NoRouteExtractor - No route, safest for cardinalityPathExtractor - Uses the URL path without query params (e.g., /users/123)AxumMatchedPathExtractor - Uses Axum's MatchedPath for route templates (requires axum feature)FnRouteExtractor - Custom function-based extraction via with_route_extractor_fn()axum feature: Uses AxumMatchedPathExtractor (route templates, low cardinality)axum feature: Uses NoRouteExtractor (safest)http.route attribute and the tracing span name. If no route is extracted, the span name is the HTTP method only, per semantic conventions.with_meter() method. The middleware now uses global meter and tracer providers by
default via opentelemetry::global::meter() and opentelemetry::global::tracer(). The with_meter() method is
retained as a non-public test utility to allow injecting custom meters without relying on global state.HTTPMetricsLayer → HTTPLayerHTTPMetricsService → HTTPServiceHTTPMetricsResponseFuture → ResponseFutureHTTPMetricsLayerBuilder → HTTPLayerBuilderhttp.server.request.duration histogram boundaries to OTel semantic conventions.with_request_duration_bounds builder method.
Alternate histogram bucket boundaries can be applied with the standard OpenTelemetry Views; see examples directory in crate for usage.use opentelemetry_instrumentation_tower::{
HTTPLayerBuilder,
NoRouteExtractor,
PathExtractor,
};
// No route (default without axum feature) - span name: "GET"
let layer = HTTPLayerBuilder::builder()
.with_route_extractor(NoRouteExtractor)
.build()
.unwrap();
// Path (strips query params) - span name: "GET /users/123"
let layer = HTTPLayerBuilder::builder()
.with_route_extractor(PathExtractor)
.build()
.unwrap();
// Custom function - return Some(route) or None for method-only
let layer = HTTPLayerBuilder::builder()
.with_route_extractor_fn(|req: &http::Request<_>| {
Some(req.uri().path().to_owned())
})
.build()
.unwrap();
Before:
use opentelemetry_instrumentation_tower::HTTPMetricsLayerBuilder;
let layer = HTTPMetricsLayerBuilder::builder()
.with_meter(meter)
.build()
.unwrap();
After:
use opentelemetry_instrumentation_tower::HTTPLayer;
// Set global providers
global::set_meter_provider(meter_provider);
global::set_tracer_provider(tracer_provider); // for tracing support
// Then create the layer - simple API using global providers
let layer = HTTPLayer::new();
HTTPMetricsLayerBuilder with HTTPLayerBuilderHTTPMetricsLayer with HTTPLayerHTTPMetricsService with HTTPServiceHTTPMetricsResponseFuture with ResponseFutureDatadogExporter.export() doesn't require mutability anymore
DatadogExporter.export() doesn't require mutability anymoreopentelemetry-semantic-conventions package for metric names and attribute keys instead of hardcoded
stringsHTTP_SERVER_ACTIVE_REQUESTS_METRIC now uses semconv::metric::HTTP_SERVER_ACTIVE_REQUESTSHTTP_SERVER_REQUEST_BODY_SIZE_METRIC now uses semconv::metric::HTTP_SERVER_REQUEST_BODY_SIZEHTTP_SERVER_RESPONSE_BODY_SIZE_METRIC now uses semconv::metric::HTTP_SERVER_RESPONSE_BODY_SIZEHTTP_SERVER_DURATION_METRIC now uses semconv::metric::HTTP_SERVER_REQUEST_DURATIONNETWORK_PROTOCOL_NAME_LABEL now uses semconv::attribute::NETWORK_PROTOCOL_NAMEHTTP_REQUEST_METHOD_LABEL now uses semconv::attribute::HTTP_REQUEST_METHODHTTP_ROUTE_LABEL now uses semconv::attribute::HTTP_ROUTEHTTP_RESPONSE_STATUS_CODE_LABEL now uses semconv::attribute::HTTP_RESPONSE_STATUS_CODEBump opentelemetry and opentelemetry_sdk versions to 0.28
opentelemetry::global::shutdown_tracer_provider() with tracer_provider.shutdown() (original PR opentelemetry-rust#2369)DatadogPipelineBuilder::install_simple() and DatadogPipelineBuilder::install_batch() now return TracerProvider.
Additionally, global tracer provider now needs to be set by the user by calling global::set_tracer_provider(tracer_provider.clone()) (original PR opentelemetry-rust#1812)Initial release of OpenTelemetry Tower instrumentation middleware for HTTP metrics collection.
axum feature flaghttp.server.request.duration - Request duration histogramhttp.server.active_requests - Active requests counterhttp.server.request.body.size - Request body size histogramhttp.server.response.body.size - Response body size histogramBump opentelemetry and opentelemetry_sdk versions to 0.27
Bump opentelemetry and opentelemetry_sdk versions to 0.26
Bump opentelemetry and opentelemetry_sdk version to 0.25
Bump opentelemetry and opentelemetry_sdk version to 0.24
Nothing published for this version
Pass DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA during build
datadog-agent with agent-sampling feature.datadog-agent generate metrics from spans for APM.Do not set an empty span as the active span when the propagator does not find a remote span.
Update to opentelemetry-api v0.20.0
[Breaking] Add support for unified tagging #931.
Update to opentelemetry v0.18.0
Released 2026-Sep-21
Bump OpenTelemetry dependencies to 0.33.
Breaking: Replace UserEventsTracerProviderBuilderExt::with_user_events_exporter
with a public Processor and ProcessorBuilder. The processor can now be
wrapped by filtering or other custom processors before it is added to an
SdkTracerProvider, and invalid configuration is returned to the caller.
Add links field to Part B (serialized as JSON array of {toTraceId, toSpanId})
Add statusMessage field to Part B for error spans with descriptions
Breaking: Update well-known attribute mappings to use stable OTel semantic conventions. The Common Schema output field names are unchanged, but the OTel attribute keys that trigger the mapping have been updated:
db.system → db.system.name, db.name → db.namespace,
db.statement → db.query.text, messaging.destination → messaging.destination.namerpc.system.name → rpcSystem, rpc.response.status_code → rpcGrpcStatusCodeFix PartA.time and PartB.startTime to use UTC ISO 8601 with trailing Z
instead of +00:00
Update to opentelemetry v0.17.0
Released 2026-May-13
UserEventsSpanExporter::shutdown now takes &self instead of
&mut self, matching the upstream SpanExporter trait change in 0.32.Update to opentelemetry v0.16.0
status_code must be 0 or 1 #580
status_code must be 0 or 1 #580Update to opentelemetry v0.15.0
Released 2025-July-24
Disable optional features for reqwest
Released 2025-May-27
Rename trace config with_default_sampler to with_sampler #482
Your coding agent can read these notes before it upgrades. Set up the MCP server →