Estimated end-of-life date, accurate to within three months: 09-2026 See the support level definitions for more information.
tracing: Fixes encoding bytes objects as span attributes by truncating byte string, rather than throwing PyErr_Format.
libinjection: allow deny listing python modules executed with python -m and deny py_compile.
Estimated end-of-life date, accurate to within three months: 09-2026 See the support level definitions for more information.
python -m and deny py_compile.Estimated end-of-life date, accurate to within three months: 09-2026 See the support level definitions for more information.
DD_GIT_COMMIT_SHA and DD_GIT_REPOSITORY_URL are defined before using the git command.Estimated end-of-life date, accurate to within three months: 09-2026 See the support level definitions for more information.
sampling: This change prevents the DatadogSampler from getting recreated whenever the SpanAggregator is reset, and instead updates the rate limiter that the sampler uses.
source code integration: check that DD_GIT_COMMIT_SHA and DD_GIT_REPOSITORY_URL are defined before using the git command.
CI Visibility: This fix resolves an issue where coverage from sessions with pytest-xdist were not submitted with the proper session id, preventing Test Impact Analysis feature from working properly.
Estimated end-of-life date, accurate to within three months: 09-2026 See the support level definitions for more information.
DD_GIT_COMMIT_SHA and DD_GIT_REPOSITORY_URL are defined before using the git command.Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
ml_app is now optional, defaulting to service. while it is still recommended to set ml_app, enabling LLM Observability will no longer throw if one is not provided or propagated from an upstream service.tool_definitions parameter to the LLMObs.annotate() method for tool calling scenarios. Users can now pass a list of tool definition dictionaries directly to annotate LLM spans with available tools. Each tool definition must include a name (string) field, with optional description (string) and schema (JSON-serializable dictionary) fields.create_dataset, create_dataset_from_csv and pull_dataset) argument name is changed to dataset_name.ValueError: coroutine already executing on Python 3.13+ with django.utils.decorators.async_only_middleware."Error: expected pool connect callback to return an instance of 'asyncpg.connection.Connection', got 'ddtrace.contrib.internal.asyncpg.patch._TracedConnection'" due to using the custom connect option. With this fix, postgres.connect spans will be created when this option is used.pkg_resources, either directly or indirectly.Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
__repr__ on SpanPointer objected raised an AttributeError. This caused aws_lambdas to crash when debug logging was enabled.Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
__repr__ on SpanPointer objected raised an AttributeError. This caused aws_lambdas to crash when debug logging was enabled.Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
ml_app is now optional, defaulting to service. while it is still recommended to set ml_app, enabling LLM Observability will no longer throw if one is not provided or propagated from an upstream service.tool_definitions parameter to the LLMObs.annotate() method for tool calling scenarios. Users can now pass a list of tool definition dictionaries directly to annotate LLM spans with available tools. Each tool definition must include a name (string) field, with optional description (string) and schema (JSON-serializable dictionary) fields.create_dataset, create_dataset_from_csv and pull_dataset) argument name is changed to dataset_name.ValueError: coroutine already executing on Python 3.13+ with django.utils.decorators.async_only_middleware."Error: expected pool connect callback to return an instance of 'asyncpg.connection.Connection', got 'ddtrace.contrib.internal.asyncpg.patch._TracedConnection'" due to using the custom connect option. With this fix, postgres.connect spans will be created when this option is used.pkg_resources, either directly or indirectly.Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
ValueError: coroutine already executing on Python 3.13+ with django.utils.decorators.async_only_middleware.Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
ml_app is now optional, defaulting to service. while it is still recommended to set ml_app, enabling LLM Observability will no longer throw if one is not provided or propagated from an upstream service.tool_definitions parameter to the LLMObs.annotate() method for tool calling scenarios. Users can now pass a list of tool definition dictionaries directly to annotate LLM spans with available tools. Each tool definition must include a name (string) field, with optional description (string) and schema (JSON-serializable dictionary) fields."Error: expected pool connect callback to return an instance of 'asyncpg.connection.Connection', got 'ddtrace.contrib.internal.asyncpg.patch._TracedConnection'" due to using the custom connect option. With this fix, postgres.connect spans will be created when this option is used.pkg_resources, either directly or indirectly.Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
ddtrace.tracer.Pin is deprecated and will be removed in version 4.0.0. To manage configuration of the tracer or integrations please use environment variables.opentelemetry
opentelemetry-otlp-exporter and set DD_LOGS_OTEL_ENABLED=true.LLM Observability
LLMObs.annotate() method now accept input and output data with optional to ol_calls and tool_results fields for function calling scenarios.Django: Added the DD_DJANGO_ALWAYS_CREATE_DATABASE_SPANS config option (default: true).
When enabled, the Django integration always generates a database span for every operation, even if the underlying database engine is already instrumented. This ensures complete coverage but may produce duplicat e spans and extra overhead.
When disabled, spans are only created if the database engine is not instrumented.
To avoid multiple spans per database call, we recommend disabling this option. DD_DJANGO_ALWAYS_CREATE_DATABASE_SPANS=false
AAP
AAP: Fixes an issue where security signals would be incorrectly reported on an inferred proxy service instead of the current service.
CI Visibility: This fix resolves an issue where the pytest plugin would hold a reference to test exceptions beyond the end of the test, preventing them from being garbage-collected and increasing memory usage.
psycopg: This fix resolves a potential circular import with the psycopg3 contrib.
internal: This fix resolves an issue where the tracer flare was not sent when DD_TRACE_AGENT_URL was not set, as the default URL was not used.
tracing
websocket.receive span not closing exactly when another websocket.receive span was opened.websocket.close parent should be the handshake span when configuration is disabled.ddtrace.trace.tracer.configure(...) resets the trace writer buffer, causing spans to be dropped.Code Security: Fixed a crash in the taint-aware modulo aspect when formatting SQLAlchemy objects whose __repr__ can raise (e.g., inside complex CASE expressions).
LLM Observability: Properly parse DD_TAGS onto LLM Observability span events' tags.
sampling
_dd.p.dm=-3) during distributed tracing header extraction.ssi, crashtracker: This fix resolves an issue where crashtracker receiver binary was not available in an injected environment.