Telemetry¶
dct sends anonymous usage statistics to dbt Labs so the team can count how many people run it and which commands they use. Events travel through the same pipeline as dbt's own usage stats, and dct shares dbt's anonymous user id (.user.yml), so one person running both tools counts as one user.
What is sent¶
Two events per command: one when it starts and one when it ends.
| Field | Meaning |
|---|---|
event_id |
Random UUID, unique per event |
invocation_id |
Random UUID shared by the start and end event of one command |
progress |
start or end |
command |
The command path, such as render or cloud connect. Only command names are sent, never arguments or option values |
version |
The installed dbt-charts version |
python_version |
The Python version |
os_name |
The operating system name, such as Darwin or Linux |
project_id |
MD5 hash of the name in your dbt_project.yml; empty outside a dbt project. The name itself is never sent |
dbt_local_cookie_user_id |
The anonymous id stored in .user.yml |
result_type |
ok or error; end event only |
duration_ms |
Command run time in milliseconds; end event only |
Fields that do not apply to an event are sent empty (project_id outside a dbt project, result_type and duration_ms on the start event). Requests carry no credentials. Events are sent in the background, and dct waits at most one second on exit for delivery; a failed or slow send is dropped silently and never changes a command's result.
Board contents, queries, file paths, warehouse credentials, and query results are never sent. The payload carries no IP address, but the receiving pipeline adds IP-derived geolocation to each event on the server.
Where the id lives¶
The anonymous id is a random UUID in ~/.dbt/.user.yml, or in $DBT_PROFILES_DIR/.user.yml when that variable is set. It is shared with dbt when dbt uses the default ~/.dbt or the same DBT_PROFILES_DIR; dbt's --profiles-dir option and a profiles.yml in the current directory are not consulted, so in those setups the two tools keep separate ids. dct creates the file on the first run that sends an event, prints a one-line notice to stderr when it does, and never creates it while usage stats are disabled.
Opting out¶
Any one of these turns usage stats off. They are listed in precedence order.
DO_NOT_TRACK=1in the environment. Any non-empty value other than a false spelling (0,f,false,n,no,off) opts out, soDO_NOT_TRACK=anythingdoes too.- The
--no-send-anonymous-usage-statsflag, placed before the command:dct --no-send-anonymous-usage-stats render board.yml. DBT_SEND_ANONYMOUS_USAGE_STATS=falsein the environment (also0,f,n,no,off;true,1,t,y,yes,onturn it on).send_anonymous_usage_stats: falseunderflags:indbt_project.yml.
Settings 3 and 4 and the project's project_id come from the project a command targets: --project-dir / DCT_PROJECT_DIR and --dbt-project-dir / DBT_PROJECT_DIR, not the current directory.
A value that is not a boolean, such as DBT_SEND_ANONYMOUS_USAGE_STATS=maybe, prints a warning to stderr and disables usage stats for that run.