NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #494 most downloaded on PyPI
Datadog APM client library
Last release 3 days ago
01 Oct 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
853 releases · first in 2017
Fix for an issue introduced by patching classes in the MRO of a Django View class (#1625).
reintroduce wrapt for patching Django view methods.
This patch release disables span linkage by default in the profiler which was causing some threading lock up issues in gevent. See #1488 and #1485 for
One column per quarter.
This patch release disables span linkage by default in the profiler which was causing some threading lock up issues in gevent. See #1488 and #1485 for the details.
This patch release includes 2 fixes:
This patch release includes 2 fixes:
Fix span/trace id generation collisions when forking by reverting the changes we made to speed up id generation. (#1470)
Force rebuilding of Cython files in setup.py. This will ensure that we build for the right Python version. (#1468)
# Upgrading to 0.38.0
Fix for an issue introduced by patching classes in the MRO of a Django View class (#1625).
reintroduce wrapt for patching Django view methods.
This patch release includes fixes for install problems with Alpine Linux as well as for a bug with tag encoding in the profiler.
This patch release includes fixes for install problems with Alpine Linux as well as for a bug with tag encoding in the profiler.
This release introduces mainly bug fixes as well as some new configuration options for the profiling library.
This release introduces mainly bug fixes as well as some new configuration options for the profiling library.
Fix for an issue introduced by patching classes in the MRO of a Django View class (#1625).
reintroduce wrapt for patching Django view methods.
Nothing published for this version
This release includes support for setting global application tags which will help Datadog better correlate your Python application traces and logs wit
This release includes support for setting global application tags which will help Datadog better correlate your Python application traces and logs with other services in your infrastructure.
By providing the following settings, ddtrace will tag your application's traces and logs appropriately:
DD_ENV environment variable or ddtrace.config.env: the environment in which your application is running. eg: prod, staging.DD_VERSION environment variable or ddtrace.config.version: the version of your application. eg: 1.2.3, 6c44da20, 2020.02.13DD_SERVICE environment variable or ddtrace.config.service: the service which your application represents.In you are using our logging integration manually, please update your formatter to also include the dd.env, dd.service and dd.version attributes as well. See our docs on Logs Injection for more details.
Fix for an issue introduced by patching classes in the MRO of a Django View class (#1625).
reintroduce wrapt for patching Django view methods.
New hook registry for patching on import
This release adds:
botocore support for RequestIdaiobotocore>=0.11.0rediscluster==2.0.0Fix for an issue introduced by patching classes in the MRO of a Django View class (#1625).
Nothing published for this version
This release adds a new integration for Django. The goal of this effort was to make the Django integration more consistent with our other integrations
This release adds a new integration for Django. The goal of this effort was to make the Django integration more consistent with our other integrations, simplifying configuration and patching. See the Django documentation for details on how to get started with the integration. For existing Django applications, be sure to consult the migration section of the documentation.
While we are now vendoring psutil, msgpack will no longer be vendored and instead specified as a requirement.
Finally, improvements have been made to the testing and continuous integration.
This release introduces setting numeric tags as metrics, addresses a regression in Python 3 performance, and introduces a dual license.
This release introduces setting numeric tags as metrics, addresses a regression in Python 3 performance, and introduces a dual license.
Nothing published for this version
Nothing published for this version
This release adds support for dogpile.cache, fixes an issue with the bottle integration, addresses issues with CI, and makes several improvements to t
This release adds support for dogpile.cache, fixes an issue with the bottle integration, addresses issues with CI, and makes several improvements to the core library.
This release addresses issues with the gRPC, Celery, Elasticsearch integrations. In addition, there are internal improvements to how timing for spans
This release addresses issues with the gRPC, Celery, Elasticsearch integrations. In addition, there are internal improvements to how timing for spans is being handled.
Nothing published for this version
Nothing published for this version
In addition to resolving several integration related issues, this release improves critical core components for tracing and runtime metrics.
In addition to resolving several integration related issues, this release improves critical core components for tracing and runtime metrics.
This release introduces a new contextvars-based context manager in Python 3.7 and adds support for Tornado 5 and 6 with Python 3.7. In addition, the r
This release introduces a new contextvars-based context manager in Python 3.7 and adds support for Tornado 5 and 6 with Python 3.7. In addition, the release includes several updates for our Django integration.
This release introduces container tagging and adds support for gRPC server.
This release introduces container tagging and adds support for gRPC server.
This patch release includes performance fix which is highly recommended for anyone currently using 0.27.0.
This patch release includes performance fix which is highly recommended for anyone currently using 0.27.0.
This release introduces improvements to the trace writer. In addition, the release fixes some issues with integrations.
This release introduces improvements to the trace writer. In addition, the release fixes some issues with integrations.
This release introduces several core improvements and continues addressing pain points in our tooling and testing.
This release introduces several core improvements and continues addressing pain points in our tooling and testing.
This release includes several core improvements and addresses pain points in our testing/CI. The release also adds a new integration for Algolia Searc
This release includes several core improvements and addresses pain points in our testing/CI. The release also adds a new integration for Algolia Search.
This release introduces a new feature (disabled by default), supports new versions of integrations and improves our testing and tooling.
This release introduces a new feature (disabled by default), supports new versions of integrations and improves our testing and tooling.
With this release we are introducing a new configuration system across integrations to generate APM events for Trace Search & Analytics. The other cor
With this release we are introducing a new configuration system across integrations to generate APM events for Trace Search & Analytics. The other core changes are the beginnings of a new approach to address issues with tracer loads and improve debugging.
This release contains a few improvements for not marking a Celery task as an error if it is an expected and allowed exception, for propagating synthet
This release contains a few improvements for not marking a Celery task as an error if it is an expected and allowed exception, for propagating synthetics origin header, and to vendor our six and wrapt dependencies.
This is a bug fix release that requires no changes to your code.
This is a bug fix release that requires no changes to your code.
Included in this release is a fix for some database cursors where we would force Cursor.execute and Cursor.executemany to return a cursor instead of the originally intended output. This caused an issue specifically with MySQL libraries which tried to return the row count and we were returning a cursor instead.
With this release we are moving distributed tracing settings to be enabled by default. This change means that you no longer need to explicitly enable
With this release we are moving distributed tracing settings to be enabled by default. This change means that you no longer need to explicitly enable distributed tracing for any integration.
This is a bug fix release, no code changes are required.
This is a bug fix release, no code changes are required.
In this release we have fixed a bug that caused some configuration values to not get updated when set.
This is a bug fix release that requires no changes.
This is a bug fix release that requires no changes.
This release includes a fix for context propagation with futures. Under the right conditions we could incorrectly share a trace context between multiple futures threads which result in multiple traces being joined together in one.
No changes are needed to upgrade to 0.20.2.
No changes are needed to upgrade to 0.20.2.
This big fix release includes changes to ensure we properly read the HTTP response body from the trace agent before we close the HTTP connection.
No changes are needed to upgrade
No changes are needed to upgrade
We have added support for logs injection to the tracer. If you are already using ddtrace-run, the integration can be enabled with setting the environm
We have added support for logs injection to the tracer. If you are already using ddtrace-run, the integration can be enabled with setting the environment variable DD_LOGS_INJECTION=true. The default behavior once logs injection is enabled is to have trace information inserted into all log entries. If you prefer more customization, you can manually instrument and configure a log formatter with the tracer information.
With 0.19.0 we have decided to disable the tracing of dbapi2 fetchone()/fetchmany()/fetchall() methods by default.
With 0.19.0 we have decided to disable the tracing of dbapi2 fetchone()/fetchmany()/fetchall() methods by default.
This change effects all integrations which rely on the dbapi2 API, including psycopg2, mysql, mysqldb, pymysql, and sqlite3.
We have introduced this change to reduce the noise added to traces from having these methods (mostly fetchone()) traced by default.
With fetchone() enabled the traces received can get very large for large result sets, the resulting traces either become difficult to read or become too large causing issues when flushing to the trace agent, potentially causing traces to be dropped.
To re-enable the tracing of these methods you can either configure via the environment variable DD_DBAPI2_TRACE_FETCH_METHODS=true or manually via:
from ddtrace import config
config.dbapi2.trace_fetch_methods = True
Nothing published for this version
This release includes the removal of service sending, this should resolve many of the 400s that are being returned from the Agent resulting in an unfr
This release includes the removal of service sending, this should resolve many of the 400s that are being returned from the Agent resulting in an unfriendly ERROR message and giving the impression that the tracer is failing. (#757)
Nothing published for this version
Nothing published for this version
Add rediscluster integration (#533, #637)
New integrations
Bug fixes
Improvements
HTTPConnection leaking (#542 -- thanks @mackeyja92)[opentracer] Activate span context on extract (#606, #608)
Bug fixes
Improvements
Tracer.set_tags (#612 -- thanks @goodspark)In this release we are happy to introduce the beta for the long-awaited OpenTracing compatible API layer for ddtrace!
OpenTracing
In this release we are happy to introduce the beta for the long-awaited OpenTracing compatible API layer for ddtrace!
Support for opentracing>=2.0.0 is provided in this release. Namely, the following are supported:
start_span/start_active_spaninject and extract functionalitybaggage, through set_baggage_item and get_baggage_itemddtrace-runFor setup information and usage see our docs for the Datadog OpenTracing tracer.
CI Improvements
Also included in this release are some optimizations to our CI which should get things running a bit quicker.
Thanks @labbati!
[core] remove the root logger configuration within the library
Bug fixes
Breaking changes Using the signal based approach increase the stability of our instrumentation, but it limits what is currently traced. This is a list…
New integrations
pymemcache integration (#511)Celery integration
Due to some limitations with our Celery integration, we changed our instrumentation to a signals based approach. We also started using import hooks to instrument Celery, so that enabling the instrumentation doesn't trigger a celery import.
Breaking changes Using the signal based approach increase the stability of our instrumentation, but it limits what is currently traced. This is a list of changes that are considered breaking changes in the behavior and not in the API, so no changes are needed in your code unless you want a different behavior:
apply(), apply_async() and delay() will be traced but tasks invoked with run() will not be traced.patch_task() is deprecated; if it's used, all tasks will be instrumentedBug fixes
DATADOG_TRACE_AGENT_HOSTNAME environment variable if available (#509, #524 -- thanks @hfern!)getresponse (#464, #527)app_type during initialization (#492, #507)None if no region (#525, #526)TraceMiddleware is used (#538)Improvements
[celery] add support for celery v1 tasks (old-style tasks) (#465, #423)
Bugfixes
ddtrace-run broke third-party script support; now it handles correctly the argv params (#469, #423)TaskRegistry to support old-style task with ddtrace-run (#484)DatabaseWrapper loaded in right thread, after removing setting_changed signal from the DatadogSettings (#481, #435)shared_task decorator wrapper to trace properly Celery tasks (#486, #451)sampling_priority field when Distributed Tracing is enabled (#457)quote_ident typing is used (#477, #474, #383)[boto] Botocore and boto instrumentation is enabled by default using patch_all()
New integrations
patch_all() (#319)concurrent module (#429, docs)pymysql support (#296, docs -- thanks @wklken)Improvements
requests module and will be implemented in other integrations in newer releases (#445, #443, #450, #454, #441)celery-producer and celery-worker for better stats (#432)Span (#433)split_by_domain config to split service name by domain (#434)futures instrumentation (#431)Bugfixes
sitecustomize.py is imported when ddtrace-run wrapper is used (#458)ddtrace logger instead of Flask to avoid having a custom log filter (#447, #455)Breaking changes
celery-producer and celery-worker. After the upgrade, you'll stop sending data to what was the default service name (celery). You should check the new services instead because you'll see a drop. Previously reported traces in the celery service, are still available if you move back the time selector.[django] remove MIDDLEWARE_CLASSES deprecation warning from tests
Improvements
route argument in TracePlugin, to support Bottle 0.11.x (#439)Bugfixes
MIDDLEWARE_CLASSES deprecation warning from tests (#444)MIDDLEWARE or MIDDLEWARE_CLASSES are loaded with tracing middlewares (#446)[dbapi] remove sql.query tag from SQL spans, so that the content is properly obfuscated in the Agent. This security fix is required to prevent wrong d…
Security fixes
sql.query tag from SQL spans, so that the content is properly obfuscated in the Agent. This security fix is required to prevent wrong data collection of reported SQL queries. This issue impacts only MySQL integrations and NOT psycopg2 or sqlalchemy while using the PostgreSQL driver. (#421)New integrations
MySQL-python and mysqlclient packages are currently supported (#376 -- thanks @yoichi!)Bugfixes
ddtrace-run script accepts DATADOG_PRIORITY_SAMPLING to enable Priority Sampling (#426)ddtrace-run script can patch a PylonsApp (#416)render function (#420)Distributed Tracing Add distributed tracing using integration settings for the following libraries/frameworks:
Distributed Tracing Add distributed tracing using integration settings for the following libraries/frameworks:
bottle (#382)requests (#372)pyramid (#403)Improvements
concurrent.futures if available, improving the way traces are built when propagation happens between threads (#362 -- thanks @codywilbourn)Bugfixes
register_type (#393 -- thanks @stj)render kwargs (#384 -- thanks @joual)HTTPExceptions as valid response types (#401, #386 -- thanks @TylerLubeck)unpatch and double-patch protection (#404)resource field within request (#353, #410)New feature that propagates the sampling priority across services. This is useful to mark traces as "don’t keep the trace" or "must have" when distrib
Distributed Sampling (beta)
New feature that propagates the sampling priority across services. This is useful to mark traces as "don’t keep the trace" or "must have" when distributed tracing is used. This new functionality requires at least the Datadog Agent 5.19+. Frameworks with out-of-the-box support are: Django, Flask, Tornado (#358, #325, #359, #364, #366, #365, #371, docs)
Improvements
Span context. (#339)HTTPPropagator class to inject and extract the tracing context in HTTP headers (#363, #374 docs)DATADOG_SERVICE_NAME env var, if defined (#347 -- thanks @miketheman)Bugfixes
[django] disable database or cache instrumentation via settings so that each Django component instrumentation can be disabled (#314, docs -- thanks @m
New features
ddtrace.contrib.django.TraceMiddleware for your middleware list after the upgrade. This is not mandatory but suggested (#314, #346)execute_async() operations (#333)Bugfixes
Configurator behavior (#343)Integration coverage
Documentation
patch_all() and patch() (#321 -- thanks @gomlgs)Your coding agent can read these notes before it upgrades. Set up the MCP server →