NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #610 most downloaded on PyPI
Datadog APM client library
Last release 5 days ago
23 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
10 years old
851 releases · first in 2017
Estimated end-of-life date, accurate to within three months: 09-2026 See the support level definitions for more information.
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.
One column per quarter.
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.
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.
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: 09-2026 See the support level definitions for more information.
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.
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: 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.
__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.
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.tracing: ddtrace.tracer.Pin is deprecated and will be removed in version 4.0.0. To manage configuration of the tracer or integrations please use envir…
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.
tracing: ddtrace.tracer.Pin is deprecated and will be removed in version 4.0.0. To manage configuration of the tracer or integrations please use envir…
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.
Estimated end-of-life date, accurate to within three months: 09-2026 See the support level definitions for more information.
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.
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.
__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.
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.
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
Versions 3.12.1 through 3.12.4 did not include the full set of updates originally delivered in 3.12.0. As a result, several enhancements — including the critical profiling fix described below — were not present in those patch releases.
With 3.12.5, all updates are now fully aligned and included. We recommend upgrading directly to 3.12.5 to ensure you have the complete set of improvements and fixes.
asyncpg: Fix the error "Error: expected pool connect callback to return an instance of 'asyncpg.connection.Connection', got 'ddtrace.contrib.internal.
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.
DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES is disabled.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.
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.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.
openai: Resolves an issue in the OpenAI integration where asyncio.CancelledError was not caught or re-raised.
LLM Observability: Properly parse DD_TAGS onto LLM Observability span events' tags.
ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
AI Guard is an upcoming Datadog security product currently under active design and development. Note: The Python SDK is released as a technical preview. Functionality and APIs are subject to change, and backward compatibility is not guaranteed at this stage.
DD_PROFILING_TIMELINE_ENABLED=True). This provides visualization of profiling data with timing information.ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.HTTPPropagator.inject method. HTTPPropagator.inject(context=...) should be used to inject headers instead.DD_TRACE_WEBSOCKET_MESSAGES_ENABLED, which replaces DD_TRACE_WEBSOCKET_MESSAGES.CIVisibility tracer is kept separate from the global ddtrace tracer, which helps avoid interference between test and non-test tracer configurations. This mode is currently experimental, and can be enabled by setting the environment variable DD_CIVISIBILITY_USE_BETA_WRITER to true.kickoff/kickoff_async calls, including tracing internal flow method execution.SpanProcessor return None.DD_MCP_DISTRIBUTED_TRACING=False for both the client and server.route parameter was not being correctly handled in the Django path function.skipif marker with the condition passed as a keyword argument (or not provided at all) would cause the test to be reported as failed, in particular when the flaky or pytest-rerunfailures were also used.patch() with no arguments, and thus patch_all(), breaks the integration.bytes.OpenAI/AsyncOpenAI client would result in an AttributeError.pydantic-ai-slim >= 0.4.4 would fail. See this issue <https://github.com/DataDog/dd-trace-py/issues/14161>_ for more details.DD_TRACE_SAMPLING_RULES='\[{"resource": null, "sample_rate": 1}\]' will be equivalent to DD_TRACE_SAMPLING_RULES='\[{"sample_rate": 1}\]'.list_topics call in the Kafka integration could hang indefinitely. The integration now sets a 1-second timeout on `list_topics</span> calls and caches both successful cluster ID results and failures (with a 5-minute retry interval) to prevent repeated slow metadata queries.google-genai would result in no output messages on the LLM Observability llm span.ModuleNotFoundError errors when patching langgraph>=0.6.0openai>=1.66.0,<1.66.2 would result in an AttributeError.HTTPPropagator.inject method to help diagnose issues with sampling decisions.DD_PROFILING_MAX_EVENTS is deprecated and does nothing. Use DD_PROFILING_HEAP_SAMPLE_SIZE to control sampling frequency of the memory profiler.ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
AI Guard is an upcoming Datadog security product currently under active design and development. Note: The Python SDK is released as a technical preview. Functionality and APIs are subject to change, and backward compatibility is not guaranteed at this stage.
DD_PROFILING_TIMELINE_ENABLED=True). This provides visualization of profiling data with timing information.ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.HTTPPropagator.inject method. HTTPPropagator.inject(context=...) should be used to inject headers instead.DD_TRACE_WEBSOCKET_MESSAGES_ENABLED, which replaces DD_TRACE_WEBSOCKET_MESSAGES.CIVisibility tracer is kept separate from the global ddtrace tracer, which helps avoid interference between test and non-test tracer configurations. This mode is currently experimental, and can be enabled by setting the environment variable DD_CIVISIBILITY_USE_BETA_WRITER to true.kickoff/kickoff_async calls, including tracing internal flow method execution.SpanProcessor return None.DD_MCP_DISTRIBUTED_TRACING=False for both the client and server.route parameter was not being correctly handled in the Django path function.skipif marker with the condition passed as a keyword argument (or not provided at all) would cause the test to be reported as failed, in particular when the flaky or pytest-rerunfailures were also used.patch() with no arguments, and thus patch_all(), breaks the integration.bytes.OpenAI/AsyncOpenAI client would result in an AttributeError.pydantic-ai-slim >= 0.4.4 would fail. See this issue <https://github.com/DataDog/dd-trace-py/issues/14161>_ for more details.DD_TRACE_SAMPLING_RULES='\[{"resource": null, "sample_rate": 1}\]' will be equivalent to DD_TRACE_SAMPLING_RULES='\[{"sample_rate": 1}\]'.list_topics call in the Kafka integration could hang indefinitely. The integration now sets a 1-second timeout on `list_topics</span> calls and caches both successful cluster ID results and failures (with a 5-minute retry interval) to prevent repeated slow metadata queries.google-genai would result in no output messages on the LLM Observability llm span.ModuleNotFoundError errors when patching langgraph>=0.6.0openai>=1.66.0,<1.66.2 would result in an AttributeError.HTTPPropagator.inject method to help diagnose issues with sampling decisions.DD_PROFILING_MAX_EVENTS is deprecated and does nothing. Use DD_PROFILING_HEAP_SAMPLE_SIZE to control sampling frequency of the memory profiler.ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
AI Guard is an upcoming Datadog security product currently under active design and development. Note: The Python SDK is released as a technical preview. Functionality and APIs are subject to change, and backward compatibility is not guaranteed at this stage.
DD_PROFILING_TIMELINE_ENABLED=True). This provides visualization of profiling data with timing information.ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.HTTPPropagator.inject method. HTTPPropagator.inject(context=...) should be used to inject headers instead.DD_TRACE_WEBSOCKET_MESSAGES_ENABLED, which replaces DD_TRACE_WEBSOCKET_MESSAGES.CIVisibility tracer is kept separate from the global ddtrace tracer, which helps avoid interference between test and non-test tracer configurations. This mode is currently experimental, and can be enabled by setting the environment variable DD_CIVISIBILITY_USE_BETA_WRITER to true.SpanProcessor return None.DD_MCP_DISTRIBUTED_TRACING=False for both the client and server.route parameter was not being correctly handled in the Django path function.skipif marker with the condition passed as a keyword argument (or not provided at all) would cause the test to be reported as failed, in particular when the flaky or pytest-rerunfailures were also used.patch() with no arguments, and thus patch_all(), breaks the integration.bytes.OpenAI/AsyncOpenAI client would result in an AttributeError.pydantic-ai-slim >= 0.4.4 would fail. See this issue <https://github.com/DataDog/dd-trace-py/issues/14161>_ for more details.DD_TRACE_SAMPLING_RULES='\[{"resource": null, "sample_rate": 1}\]' will be equivalent to DD_TRACE_SAMPLING_RULES='\[{"sample_rate": 1}\]'.list_topics call in the Kafka integration could hang indefinitely. The integration now sets a 1-second timeout on `list_topics</span> calls and caches both successful cluster ID results and failures (with a 5-minute retry interval) to prevent repeated slow metadata queries.google-genai would result in no output messages on the LLM Observability llm span.ModuleNotFoundError errors when patching langgraph>=0.6.0openai>=1.66.0,<1.66.2 would result in an AttributeError.HTTPPropagator.inject method to help diagnose issues with sampling decisions.DD_PROFILING_MAX_EVENTS is deprecated and does nothing. Use DD_PROFILING_HEAP_SAMPLE_SIZE to control sampling frequency of the memory profiler.ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
AI Guard is an upcoming Datadog security product currently under active design and development. Note: The Python SDK is released as a technical preview. Functionality and APIs are subject to change, and backward compatibility is not guaranteed at this stage.
DD_PROFILING_TIMELINE_ENABLED=True). This provides visualization of profiling data with timing information.ddtrace.settings.__init__ imports are deprecated and will be removed in version 4.0.0.HTTPPropagator.inject method. HTTPPropagator.inject(context=...) should be used to inject headers instead.DD_TRACE_WEBSOCKET_MESSAGES_ENABLED, which replaces DD_TRACE_WEBSOCKET_MESSAGES.CIVisibility tracer is kept separate from the global ddtrace tracer, which helps avoid interference between test and non-test tracer configurations. This mode is currently experimental, and can be enabled by setting the environment variable DD_CIVISIBILITY_USE_BETA_WRITER to true.SpanProcessor return None.DD_MCP_DISTRIBUTED_TRACING=False for both the client and server.route parameter was not being correctly handled in the Django path function.skipif marker with the condition passed as a keyword argument (or not provided at all) would cause the test to be reported as failed, in particular when the flaky or pytest-rerunfailures were also used.patch() with no arguments, and thus patch_all(), breaks the integration.bytes.OpenAI/AsyncOpenAI client would result in an AttributeError.pydantic-ai-slim >= 0.4.4 would fail. See this issue <https://github.com/DataDog/dd-trace-py/issues/14161>_ for more details.DD_TRACE_SAMPLING_RULES='\[{"resource": null, "sample_rate": 1}\]' will be equivalent to DD_TRACE_SAMPLING_RULES='\[{"sample_rate": 1}\]'.list_topics call in the Kafka integration could hang indefinitely. The integration now sets a 1-second timeout on `list_topics</span> calls and caches both successful cluster ID results and failures (with a 5-minute retry interval) to prevent repeated slow metadata queries.google-genai would result in no output messages on the LLM Observability llm span.ModuleNotFoundError errors when patching langgraph>=0.6.0openai>=1.66.0,<1.66.2 would result in an AttributeError.HTTPPropagator.inject method to help diagnose issues with sampling decisions.DD_PROFILING_MAX_EVENTS is deprecated and does nothing. Use DD_PROFILING_HEAP_SAMPLE_SIZE to control sampling frequency of the memory profiler.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.
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.asyncio.CancelledError was not caught or re-raised.google-genai would result in no output messages on the LLM Observability llm span.ModuleNotFoundError errors when patching langgraph>=0.6.0openai>=1.66.0,<1.66.2 would result in an AttributeError.AAP: resolves a bug where ASGI middleware would not catch the BlockingException raised by AAP because it was aggregated in an ExceptionGroup
route parameter was not being correctly handled in the Django path function.bytes.OpenAI/AsyncOpenAI client would result in an AttributeError.this issue <https://github.com/DataDog/dd-trace-py/issues/14161>_ for more details.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.
skipif marker with the condition passed as a keyword argument (or not provided at all) would cause the test to be reported as failed, in particular when the flaky or pytest-rerunfailures were also used.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.
patch() with no arguments, and thus patch_all(), breaks the integration.CI Visibility: The freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correc…
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
pytest does not require coverage.py as a dependency anymore.freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correct reporting of test durations and timestamps.submit_evaluation_for() for submitting boolean metrics in LLMObs evaluation metrics, using metric_type="boolean". This enables tracking binary evaluation results such as toxicity detection and content appropriateness in your LLM application workflow.toolResult content blocks are formatted as tool messages on LLM Observability llm spans' inputs.mcp.client.session.ClientSession.call_tool and mcp.server.fastmcp.tools.tool_manager.ToolManager.call_tool methods in the MCP SDK.DD_METRICS_OTEL_ENABLED must be set to true and the application must include its own OTLP metrics exporter.DD_ASGI_OBFUSCATE_404_RESOURCE is enabled (disabled by default).ddtrace-run or import ddtrace.auto. To disable this feature, set the environment variable DD_LOGS_INJECTION to False.CI Visibility
freezegun would not work with tests defined in unittest classes.flaky or pytest-rerunfailures would cause the test results not to be reported correctly to Datadog. With this change, those plugins can be used with ddtrace, and test results will be reported to Datadog, but Test Optimization advanced features such as Early Flake Detection and Auto Test Retries will not be available when such plugins are used.pytest, leading to I/O operation on closed file errors at the end of the test session.pytest-xdist.AAP: This fix resolves an issue where the FastAPI body extraction was not functioning correctly in asynchronous contexts for large bodies, leading to missing security events. The timeout for reading request body chunks has been set to 0.1 seconds to ensure timely processing without blocking the event loop. This can be configured using the DD_FASTAPI_ASYNC_BODY_TIMEOUT_SECONDS environment variable.
litellm: This fix resolves an issue where potentially sensitive parameters were being tagged as metadata on LLM Observability spans. Now, metadata tags are based on an allowlist instead of a denylist.
lib-injection: Fix a bug preventing the Single Step Instrumentation (SSI) telemetry forwarder from completing when debug logging was enabled.
litellm: This fix resolves an issue where potentially sensitive parameters were being tagged as metadata on LLM Observability spans. Now, metadata tags are based on an allowlist instead of a denylist.
LLM Observability
AttributeError while parsing NoneType streamed chunk deltas.AttributeError.AttributeError while parsing NoneType streamed chunk deltas.langgraph>=0.3.22.langchain libraries raised a ValueError.dynamic instrumentation: improve support for function probes with frameworks and applications that interact with the Python garbage collector (e.g. synapse).
logging: Fix issue when dd.* properties were not injected onto logging records unless DD_LOGS_ENABLED=true env var was set (default value is structured). This issue causes problems for non-structured loggers which set their own format string instead of having ddtrace set the logging format string for you.
azure_functions: This fix resolves an issue where a function that consumes a list of service bus messages throws an exception when instrumented.
profiling
tracing
@tracer.wrap() decorator failed to preserve the decorated function's return type, returning Any instead of the original return type.freezegun was in use. With this change, the freezegun integration is not necessary anymore.LONG_MAX caused traces to fail to send.Code Security (IAST)
mysqlsh (MySQL Shell) reassigns globals with a custom object. This can interfere with analysis or instrumentation logic.CI Visibility: The freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correc…
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
pytest does not require coverage.py as a dependency anymore.freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correct reporting of test durations and timestamps.submit_evaluation_for() for submitting boolean metrics in LLMObs evaluation metrics, using metric_type="boolean". This enables tracking binary evaluation results such as toxicity detection and content appropriateness in your LLM application workflow.toolResult content blocks are formatted as tool messages on LLM Observability llm spans' inputs.mcp.client.session.ClientSession.call_tool and mcp.server.fastmcp.tools.tool_manager.ToolManager.call_tool methods in the MCP SDK.DD_METRICS_OTEL_ENABLED must be set to true and the application must include its own OTLP metrics exporter.DD_ASGI_OBFUSCATE_404_RESOURCE is enabled (disabled by default).ddtrace-run or import ddtrace.auto. To disable this feature, set the environment variable DD_LOGS_INJECTION to False.CI Visibility
freezegun would not work with tests defined in unittest classes.flaky or pytest-rerunfailures would cause the test results not to be reported correctly to Datadog. With this change, those plugins can be used with ddtrace, and test results will be reported to Datadog, but Test Optimization advanced features such as Early Flake Detection and Auto Test Retries will not be available when such plugins are used.pytest, leading to I/O operation on closed file errors at the end of the test session.pytest-xdist.AAP: This fix resolves an issue where the FastAPI body extraction was not functioning correctly in asynchronous contexts for large bodies, leading to missing security events. The timeout for reading request body chunks has been set to 0.1 seconds to ensure timely processing without blocking the event loop. This can be configured using the DD_FASTAPI_ASYNC_BODY_TIMEOUT_SECONDS environment variable.
litellm: This fix resolves an issue where potentially sensitive parameters were being tagged as metadata on LLM Observability spans. Now, metadata tags are based on an allowlist instead of a denylist.
lib-injection: Fix a bug preventing the Single Step Instrumentation (SSI) telemetry forwarder from completing when debug logging was enabled.
litellm: This fix resolves an issue where potentially sensitive parameters were being tagged as metadata on LLM Observability spans. Now, metadata tags are based on an allowlist instead of a denylist.
LLM Observability
AttributeError while parsing NoneType streamed chunk deltas.AttributeError.AttributeError while parsing NoneType streamed chunk deltas.langgraph>=0.3.22.langchain libraries raised a ValueError.dynamic instrumentation: improve support for function probes with frameworks and applications that interact with the Python garbage collector (e.g. synapse).
logging: Fix issue when dd.* properties were not injected onto logging records unless DD_LOGS_ENABLED=true env var was set (default value is structured). This issue causes problems for non-structured loggers which set their own format string instead of having ddtrace set the logging format string for you.
azure_functions: This fix resolves an issue where a function that consumes a list of service bus messages throws an exception when instrumented.
profiling
tracing
@tracer.wrap() decorator failed to preserve the decorated function's return type, returning Any instead of the original return type.freezegun was in use. With this change, the freezegun integration is not necessary anymore.LONG_MAX caused traces to fail to send.Code Security (IAST)
mysqlsh (MySQL Shell) reassigns globals with a custom object. This can interfere with analysis or instrumentation logic.CI Visibility: The freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correc…
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
pytest does not require coverage.py as a dependency anymore.freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correct reporting of test durations and timestamps.submit_evaluation_for() for submitting boolean metrics in LLMObs evaluation metrics, using metric_type="boolean". This enables tracking binary evaluation results such as toxicity detection and content appropriateness in your LLM application workflow.toolResult content blocks are formatted as tool messages on LLM Observability llm spans' inputs.mcp.client.session.ClientSession.call_tool and mcp.server.fastmcp.tools.tool_manager.ToolManager.call_tool methods in the MCP SDK.DD_METRICS_OTEL_ENABLED must be set to true and the application must include its own OTLP metrics exporter.DD_ASGI_OBFUSCATE_404_RESOURCE is enabled (disabled by default).ddtrace-run or import ddtrace.auto. To disable this feature, set the environment variable DD_LOGS_INJECTION to False.freezegun would not work with tests defined in unittest classes.flaky or pytest-rerunfailures would cause the test results not to be reported correctly to Datadog. With this change, those plugins can be used with ddtrace, and test results will be reported to Datadog, but Test Optimization advanced features such as Early Flake Detection and Auto Test Retries will not be available when such plugins are used.pytest, leading to I/O operation on closed file errors at the end of the test session.pytest-xdist.DD_FASTAPI_ASYNC_BODY_TIMEOUT_SECONDS environment variable.AttributeError while parsing NoneType streamed chunk deltas.AttributeError.AttributeError while parsing NoneType streamed chunk deltas.langgraph>=0.3.22.langchain libraries raised a ValueError.dd.* properties were not injected onto logging records unless DD_LOGS_ENABLED=true env var was set (default value is structured). This issue causes problems for non-structured loggers which set their own format string instead of having ddtrace set the logging format string for you.@tracer.wrap() decorator failed to preserve the decorated function's return type, returning Any instead of the original return type.freezegun was in use. With this change, the freezegun integration is not necessary anymore.LONG_MAX caused traces to fail to send.mysqlsh (MySQL Shell) reassigns globals with a custom object. This can interfere with analysis or instrumentation logic.CI Visibility: The freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correc…
Estimated end-of-life date, accurate to within three months: 08-2026 See the support level definitions for more information.
pytest does not require coverage.py as a dependency anymore.freezegun integration is deprecated and will be removed in 4.0.0. The freezegun integration is not necessary anymore for the correct reporting of test durations and timestamps.submit_evaluation_for() for submitting boolean metrics in LLMObs evaluation metrics, using metric_type="boolean". This enables tracking binary evaluation results such as toxicity detection and content appropriateness in your LLM application workflow.toolResult content blocks are formatted as tool messages on LLM Observability llm spans' inputs.mcp.client.session.ClientSession.call_tool and mcp.server.fastmcp.tools.tool_manager.ToolManager.call_tool methods in the MCP SDK.DD_METRICS_OTEL_ENABLED must be set to true and the application must include its own OTLP metrics exporter.DD_ASGI_OBFUSCATE_404_RESOURCE is enabled (disabled by default).ddtrace-run or import ddtrace.auto. To disable this feature, set the environment variable DD_LOGS_INJECTION to False.freezegun would not work with tests defined in unittest classes.flaky or pytest-rerunfailures would cause the test results not to be reported correctly to Datadog. With this change, those plugins can be used with ddtrace, and test results will be reported to Datadog, but Test Optimization advanced features such as Early Flake Detection and Auto Test Retries will not be available when such plugins are used.pytest-xdist.DD_FASTAPI_ASYNC_BODY_TIMEOUT_SECONDS environment variable.AttributeError while parsing NoneType streamed chunk deltas.AttributeError.langgraph>=0.3.22.langchain libraries raised a ValueError.dd.* properties were not injected onto logging records unless DD_LOGS_ENABLED=true env var was set (default value is structured). This issue causes problems for non-structured loggers which set their own format string instead of having ddtrace set the logging format string for you.@tracer.wrap() decorator failed to preserve the decorated function's return type, returning Any instead of the original return type.freezegun was in use. With this change, the freezegun integration is not necessary anymore.LONG_MAX caused traces to fail to send.mysqlsh (MySQL Shell) reassigns globals with a custom object. This can interfere with analysis or instrumentation logic.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.
skipif marker with the condition passed as a keyword argument (or not provided at all) would cause the test to be reported as failed, in particular when the flaky or pytest-rerunfailures were also used.<!-- -->
<!-- -->
dynamic instrumentation: improve support for function probes with frameworks and applications that interact with the Python garbage collector (e.g. sy
@tracer.wrap() decorator failed to preserve the decorated function's return type, returning Any instead of the original return type.mysqlsh (MySQL Shell) reassigns globals with a custom object. This can interfere with analysis or instrumentation logic.logging: Fix issue when dd.* properties were not injected onto logging records unless DD_LOGS_ENABLED=true env var was set (default value is structure
dd.* properties were not injected onto logging records unless DD_LOGS_ENABLED=true env var was set (default value is structured). This issue causes problems for non-structured loggers which set their own format string instead of having ddtrace set the logging format string for you.This fix resolves an issue where using Test Optimization together with external retry plugins such as flaky or pytest-rerunfailures would cause the te
flaky or pytest-rerunfailures would cause the test results not to be reported correctly to Datadog. With this change, those plugins can be used with ddtrace, and test results will be reported to Datadog, but Test Optimization advanced features such as Early Flake Detection and Auto Test Retries will not be available when such plugins are used.pytest-xdist.langgraph>=0.3.22.The DD_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL environment variable has been deprecated in favor of DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_S…
DD_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL environment variable has been deprecated in favor of DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS. The old environment variable will be removed in a future major release.escaped and timestamp arguments in the record_exception method are deprecated and will be removed in version 4.0.0.DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED to enable runtime metrics for tagging runtime metrics with the current runtime ID. This is useful for tracking runtime metrics across multiple processes. Previously, this was DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED.azure_servicebus: Add support for Azure Service Bus producers.azure_functions: Adds messaging span attributes for service bus triggersazure_functions: Add distributed tracing support for Service Bus triggers.ddtrace-api: Adds patching of ddtrace_api.tracer.set_tags to the ddtrace_api integrationinvoke_agent calls. If bedrock agents tracing is enabled, the internal bedrock traces will be converted and submitted as LLM Observability spans.DD_LLMOBS_INSTRUMENTED_PROXY_URLS environment variable or by enabling LLM Observability with the instrumented_proxy_urls argument. Spans sent to a proxy URL will now show up as workflow spans instead of LLM spans.google_genai: Introduces tracing support for Google's Generative AI SDK for Python's generate_content and generate_content_stream methods.
See the docs for more information.pydantic_ai: Introduces tracing support for PydanticAI's Agent.iter and Tool.run methods.
See the docs for more information.TypeError in encoding when truncating a large bytes object.os.system or subprocess.Popen could return the wrong exception type.for v in g: yield v during the wrapping of generator functions where full bidrectional communication with the sub-generator via yield from g was appropriate. See PEP380 for an explanation of how these two generator uses differ.@tracer.wrap() decorator failed to preserve return values from generator functions, causing StopIteration.value to be None instead of the actual returned value.rq: Enable parsing distributed tracing metadata in perform jobPYTEST_ADDOPTS environment variable.DD_LLMOBS_ML_APP missing errors when LLM Observability was disabled.export_span was incorrect.langchain: Resolved an AttributeError that could occur when async tasks are cancelled during agenerate calls.try: for CPython 3.11 and later.ddtrace.tracer.get_log_correlation_context() returns the expected log correlation attributes (e.g., dd.trace_id, dd.span_id, dd.service instead of trace_id, span_id, service). This change aligns the method's output with the attributes in ddtrace log-correlation docs.ddtrace.tracer.get_log_correlation_context() would return the service name of the current span instead of the global service name.Tracing:
Profiling:
DD_PROFILING_EXPORT_LIBDD_ENABLED configuration variable is removed. As a result of this change, profiling for 32-bit Linux is not supported. Please file an issue or open a support ticket if you need profiling for 32-bit Linux.Single Step Instrumentation:
DD_TRACE_SAFE_INSTRUMENTATION_ENABLED. This change ensures that instrumentation patching is only applied to for supported versions of packages, leaving unsupported package versions unpatched.pydantic_ai: Introduces tracing support for PydanticAI's Agent.iter and Tool.run methods. See the docs for more information.
LLM Observability
pydantic_ai: Introduces tracing support for PydanticAI's Agent.iter and Tool.run methods.
See the docs for more information.Tracing
azure_functions: Adds messaging span attributes for service bus triggersThe escaped and timestamp arguments in the record_exception method are deprecated and will be removed in version 4.0.0.
escaped and timestamp arguments in the record_exception method are deprecated and will be removed in version 4.0.0.LLMObs:
google_genai: Introduces tracing support for Google's Generative AI SDK for Python's generate_content and generate_content_stream methods.
See the docs for more information.Tracing:
azure_servicebus: Add support for Azure Service Bus producers.azure_functions: Add distributed tracing support for Service Bus triggers.ddtrace-api: Adds patching of ddtrace_api.tracer.set_tags to the ddtrace_api integrationCI Visibility:
PYTEST_ADDOPTS environment variable.Dynamic Instrumentation:
try: for CPython 3.11 and later.Tracing:
@tracer.wrap() decorator failed to preserve return values from generator functions, causing StopIteration.value to be None instead of the actual returned value.rq: Enable parsing distributed tracing metadata in perform jobLLMObs:
langchain: Resolved an AttributeError that could occur when async tasks are cancelled during agenerate calls.Logging:
ddtrace.tracer.get_log_correlation_context() returns the expected log correlation attributes (e.g., dd.trace_id, dd.span_id, dd.service instead of trace_id, span_id, service). This change aligns the method's output with the attributes in ddtrace log-correlation docs.ddtrace.tracer.get_log_correlation_context() would return the service name of the current span instead of the global service name.The DD_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL environment variable has been deprecated in favor of DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_S…
DD_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL environment variable has been deprecated in favor of DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS. The old environment variable will be removed in a future major release.DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED to enable runtime metrics for tagging runtime metrics with the current runtime ID. This is useful for tracking runtime metrics across multiple processes. Previously, this was DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED.invoke_agent calls. If bedrock agents tracing is enabled, the internal bedrock traces will be converted and submitted as LLM Observability spans.DD_LLMOBS_INSTRUMENTED_PROXY_URLS environment variable or by enabling LLM Observability with the instrumented_proxy_urls argument. Spans sent to a proxy URL will now show up as workflow spans instead of LLM spans.TypeError in encoding when truncating a large bytes object.os.system or subprocess.Popen could return the wrong exception type.for v in g: yield v during the wrapping of generator functions where full bidrectional communication with the sub-generator via yield from g was appropriate. See PEP380 for an explanation of how these two generator uses differ.DD_LLMOBS_ML_APP missing errors when LLM Observability was disabled.export_span was incorrect.Tracing:
Profiling:
DD_PROFILING_EXPORT_LIBDD_ENABLED configuration variable is removed. As a result of this change, profiling for 32-bit Linux is not supported. Please file an issue or open a support ticket if you need profiling for 32-bit Linux.Single Step Instrumentation:
DD_TRACE_SAFE_INSTRUMENTATION_ENABLED. This change ensures that instrumentation patching is only applied to for supported versions of packages, leaving unsupported package versions unpatched.This fix resolves an issue where track_user was generating additional unexpected security activity for customers.
TypeError in encoding when truncating a large bytes object.DD_LLMOBS_ML_APP missing errors when LLM Observability was disabled.Algoliasearch: Fix for potential dangling reference that could trhow an exception. -
os.system or subprocess.Popen could return the wrong exception type.This fix resolves an issue in which traced nested generator functions had their execution order subtly changed in a way that affected the stack unwind
for v in g: yield v during the wrapping of generator functions where
full bidrectional communication with the sub-generator via
yield from g was appropriate. See PEP380 for an explanation of how
these two generator uses differ.Fix an issue where the trace ID exported from export_span was incorrect.
export_span was incorrect.Unvalidated Redirect detection for Django, Flask and FastAPI applications, which will be displayed on your DataDog Vulnerability Explorer dashboard. S…
completion and text_completion router methods.ml_app of the most recent LLM Observability span (or the global ml_app) when injecting distributed headers. In distributed services, uses the ml_app from the distributed trace headers.DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERSDD_TAGS.LLM Observability
astream_events on a compiled graph would raise a KeyError.CI Visibility
crewai
TypeError to be thrown due to empty task contexts.tracing
ddtrace.trace.Context fails in coroutines. This regression was introduced in v3.7.0.TraceFilter and tracer.configure.unicode string is too large error.openai
None would result in unfinished spans.dynamic instrumentation
langgraph
astream_events on a compiled graph would cause missing spans.This fix resolves an issue where LLM interactions were not being traced when a non-default base URL was provided for the Anthropic, Bedrock, LangChain
This introduces report links to the pytest plugin. At the end of a test session, ddtrace shows links to the Datadog Test Optimization pages with the t
tracer.wrap(). Previously, calling tracer.current_span() inside a wrapped generator function would return None, leading to AttributeError when interacting with the span. Additionally, traces reported to Datadog showed incorrect durations, as span context was not maintained across generator iteration. This change ensures that tracer.wrap() now correctly handles both sync and async generators by preserving the tracing context throughout their execution and finalizing spans correctly. Users can now safely use tracer.current_span() within generator functions and expect accurate trace reporting.Adds a new configuration option DD_TRACE_SAFE_INSTRUMENTATION_ENABLED to enable safer patching of integrations.
When enabled, the tracer will check if the installed version of an integration is compatible with the explicit version range supported by that integration. If an incompatible version is detected, the integration will not be patched and an error message will be logged.
This feature is currently disabled by default, but will be enabled by default in a future version.
Currently the only supported integrations for this feature are: aiobotocore (>=1.0.0), fastapi (>=0.57.0), and elasticsearch (>=1.10).
profiling
docs
--lazy-apps config. For uWSGI<2.0.30 when --lazy-apps is set , we advise our customers to also set --skip-atexit to avoid crashes that could occur from our native extensions when worker processes are terminated.Fix resolves an issue where running from a GitHub action triggered on a tag push would cause the branch name to be null, causing errors when fetching
<!-- -->
Avoid excessive filtering of stacktrace locations when finding vulnerabilities. After this change, vulnerabilities that were previously discarded will…
DD_ERROR_TRACKING_HANDLED_ERRORS=allthird_partyDD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE=module1, module2, module3.submoduletracing
unicode string is too large error.ddtrace.trace.Context fails in coroutines. This regression was introduced in v3.7.0.CI Visibility
DD_CIVISIBILITY_ITR_ENABLED was not honored properly.profiling
SynchronizedSamplePool where pool could be null when calling into ddog_ArrayQueue_ functions, leading to segfaults in the uWSGI shutdownCode Security
LLM Observability
dynamic instrumentation
kafka
UNKNOWN_SERVER_ERROR (-1).code origin for spans
LLM Observability: add processor capability to process span inputs and outputs. See usage documentation \here\.
unicode string is too large error.Resolves an issue where the DD_CIVISIBILITY_ITR_ENABLED was not honored properly.
CI Visibility
DD_CIVISIBILITY_ITR_ENABLED was not honored properly.Tracing
ddtrace.trace.Context fails in coroutines. This regression was introduced in v3.7.0.Avoids excessive filtering of stacktrace locations when finding vulnerabilities. After this change, vulnerabilities that were previously discarded wil…
CI Visibility
Code Security
langchain v0.1.0 and above.Error Tracking
DD_ERROR_TRACKING_HANDLED_ERRORS=user|third_party|allDD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE=module1, module2, module3.submoduleLLM Observability
openai: Introduces tracing support for the OpenAI Responses endpoint.CI Visibility
pytest-xdist would not exit with the proper status code if ATR was enabled.xdist would report test suites as failing even when all tests pass.Code Origin
Code Security (IAST)
Dynamic Instrumentation
LLM Observability
Profiling
SynchronizedSamplePool where pool could be null when calling into ddog_ArrayQueue_ functions, leading to segfaults in the uWSGI shutdownTracing
kafka: Resolves an issue where message headers were sent to Kafka brokers that do not support them. Message headers are turned off when the Kafka server responds with UNKNOWN_SERVER_ERROR (-1).CI Visibility: This fix resolves an issue where the DD_CIVISIBILITY_ITR_ENABLED was not honored properly.
unicode string is too large error.CI Visibility: This fix resolves an issue where pytest-xdist would not exit with the proper status code if ATR was enabled.
The field representing the class name in IAST vulnerability location reporting was previously incorrectly named as class_name. This fix standardizes t…
AAP (ASM is now AAP)
ddtrace.appsec.track_user_sdk for manual instrumentation.CI Visibility
LLM Observability
Tracing
baggage. prefix The DD_TRACE_BAGGAGE_TAG_KEYS configuration allows users to specify a comma-separated list of baggage keys for span tagging, by default the value is set to user.id,account.id,session.id. When set to \*, all baggage keys will be converted into span tags. Setting it to an empty value disables baggage tagging.Code Security
class_name. This fix standardizes the naming and ensures that the correct field name is used (class).Dynamic Instrumentation
LLM Observability
openai: This fix resolves an issue where using client.beta.chat.completions.stream with openai patching caused an attribute error.client.beta.chat.completions.stream with LLM Observability enabled caused an attribute errorconverse_stream calls.converse_stream calls contained an extra empty output message.Profiling
Tracing
azure_functions: Resolves an issue where async functions throw an error when instrumented.datastreams: Resolves an issue where failure to decode the data streams context caused infinite loops in data streams checkpoints.futures: Resolves an edge case where trace context was not propagated to spans generated by the ThreadPoolExecutor.kafka: Fixes an issue where a producer or consumer initialized with an unpacked config resulted in TypeError, causing a failed connection. confluent-kafka supports both unpacked and packed config; this change allows initialization with either.telemetry: Improves periodic telemetry writer performance by removing unnecessary calls to importlib.metadata for reporting imported dependencies.AttributeError when reinitializing the DatadogSampler. This prevented sampling rules from being reset. Note: This only affected cases where sampling rules were an empty list. It did not impact cases with at least one rule or when rules were set to null.?* was not being matched correctly for DD_TRACE_SAMPLING_RULES tags, due to it matching on spans with no tag matching the specified key.RuntimeWarning from an unwaited coroutine during tab completion in IPython REPL when asyncio integration is active. Tracer now wraps an asyncio coroutine only when there is an active trace context.The field representing the class name in IAST vulnerability location reporting was previously incorrectly named as class_name. This fix standardizes t…
Code Security
class_name. This fix standardizes the naming and ensures that the correct field name is used (class).Tracing
futures: Resolves an edge case where trace context was not propagated to spans generated by the ThreadPoolExecutor.RuntimeWarning from an unwaited coroutine during tab completion in IPython REPL when asyncio integration is active. Tracer now wraps an asyncio coroutine only when there is an active trace context.Introduces a new user event sdk available through ddtrace.appsec.track_user_sdk for manual instrumentation.
AAP (ASM is now AAP)
ddtrace.appsec.track_user_sdk for manual instrumentation.LLM Observability
Tracing
baggage. prefix The DD_TRACE_BAGGAGE_TAG_KEYS configuration allows users to specify a comma-separated list of baggage keys for span tagging, by default the value is set to user.id,account.id,session.id. When set to \*, all baggage keys will be converted into span tags. Setting it to an empty value disables baggage tagging.Dynamic Instrumentation
LLM Observability
openai: This fix resolves an issue where using client.beta.chat.completions.stream with openai patching caused an attribute error.client.beta.chat.completions.stream with LLM Observability enabled caused an attribute errorconverse_stream calls.converse_stream calls contained an extra empty output message.Profiling
Tracing
azure_functions: Resolves an issue where async functions throw an error when instrumented.datastreams: Resolves an issue where failure to decode the data streams context caused infinite loops in data streams checkpoints.kafka: Fixes an issue where a producer or consumer initialized with an unpacked config resulted in TypeError, causing a failed connection. confluent-kafka supports both unpacked and packed config; this change allows initialization with either.telemetry: Improves periodic telemetry writer performance by removing unnecessary calls to importlib.metadata for reporting imported dependencies.AttributeError when reinitializing the DatadogSampler. This prevented sampling rules from being reset. Note: This only affected cases where sampling rules were an empty list. It did not impact cases with at least one rule or when rules were set to null.?* was not being matched correctly for DD_TRACE_SAMPLING_RULES tags, due to it matching on spans with no tag matching the specified key.Upgrades echion, improving the performance of stack sampler by replacing proc filesystem reads with clock_gettime().
Profiling
echion, improving the performance of stack sampler by replacing proc filesystem reads with clock_gettime().echion, improving the performance of the stack sampler by reusing memory and reducing the frequency of memory allocation.Tracing
LLM Observability
session_id on a LLM Observability span via LLMObs.annotate/annotation_context() as a tag only set it as a tag on the span, but did not update the span's actual session ID value.Profiling
process_vm_readv() syscalls for Python frame objects for Python versions 3.11+.echion to pick up a fix which resolves a potential crash. The stack sampler could read off of an empty queue of frames after failing to resolve specific frame information, triggering undefined behavior.Tracing
x-datadog-sampling-priority header. The sampling decision is now made using the updated sampling formula.Upgrades echion, improving the performance of stack sampler by replacing proc filesystem reads with clock_gettime().
Profiling
echion, improving the performance of stack sampler by replacing proc filesystem reads with clock_gettime().echion, improving the performance of the stack sampler by reusing memory and reducing the frequency of memory allocation.Tracing
LLM Observability
session_id on a LLM Observability span via LLMObs.annotate/annotation_context() as a tag only set it as a tag on the span, but did not update the span's actual session ID value.Profiling
process_vm_readv() syscalls for Python frame objects for Python versions 3.11+.echion to pick up a fix which resolves a potential crash. The stack sampler could read off of an empty queue of frames after failing to resolve specific frame information, triggering undefined behavior.Tracing
x-datadog-sampling-priority header. The sampling decision is now made using the updated sampling formula.azure_functions: Resolves an issue where spans generated from timer triggers did not include the trigger type in the resource name.
azure_functions: Resolves an issue where spans generated from timer triggers did not include the trigger type in the resource name.Your coding agent can read these notes before it upgrades. Set up the MCP server →