Skip to content

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.

  1. DO_NOT_TRACK=1 in the environment. Any non-empty value other than a false spelling (0, f, false, n, no, off) opts out, so DO_NOT_TRACK=anything does too.
  2. The --no-send-anonymous-usage-stats flag, placed before the command: dct --no-send-anonymous-usage-stats render board.yml.
  3. DBT_SEND_ANONYMOUS_USAGE_STATS=false in the environment (also 0, f, n, no, off; true, 1, t, y, yes, on turn it on).
  4. send_anonymous_usage_stats: false under flags: in dbt_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.

More information