Skip to content

stennie/notel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

notel

notel helps you audit and update telemetry settings across your CLI dev tools.

Overview

Many popular developer tools collect telemetry by default. This can have benefits for both end users and vendors, but can also be a legitimate privacy concern. I've found it frustrating to have to individually configure each tool to disable telemetry and keep track of which ones have telemetry enabled by default, so I built this tool to:

  • Audit which installed dev tool CLIs have telemetry enabled
  • Check if you've set the right opt-out environment variables
  • Suggest the exact commands to disable telemetry (export env vars for shells or relevant CLI commands)

The initial design goal focuses on environment variable configuration to keep the scope maintainable. notel does not make any changes to your environment or run any CLI commands.

Why disable telemetry?

  • Disabling telemetry exercises your rights to privacy and control over your data and development environments.
  • Poorly considered telemetry collection can potentially impact performance or resources.
  • Telemetry collection may leak unexpected details (internal project names, dependencies, or build configurations) from private build or CI environments.
  • Vendors aren't always up front about telemetry collection practices and details.

Why enable telemetry?

  • Telemetry signals can provide insight into tool adoption, usage patterns, and crash information that will help vendors improve the product experience.
  • Aggregated telemetry signals can help product users understand usage of packages, features, and versions.
  • Well-implemented telemetry can have negligible performance impact and can be configured to exclude CI environments.

DO_NOT_TRACK

There is a proposed DO_NOT_TRACK standard which aims to unambiguously express a user's intent to opt out of:

  • Ad tracking
  • Usage reporting (anonymous or otherwise)
  • Telemetry
  • Crash reporting
  • Non-essential-to-functionality requests

However, this hasn't been widely adopted yet.

Related projects

Some interesting open source projects I found on GitHub after scratching my own itch to audit telemetry tools in my environments:

  • alloydwhitlock/do-not-track-cli: A single .env file to opt out of telemetry across CLI tools, frameworks, SDKs, and runtimes.
  • beatcracker/toptout: This project collects data about telemetry in applications in machine-readable format and makes it easy to create derivative works such as awesome-lists, configuration scripts, APIs, etc.

Related discussions

Requirements

  • Go 1.26.3+
  • Just — Task runner

Install

Install from the Homebrew tap:

brew install stennie/notel/notel

Or tap the repository first and then install notel:

brew tap stennie/notel
brew install notel

If you manage tools with a Brewfile:

tap "stennie/notel"
brew "notel"

The Homebrew formula lives in stennie/homebrew-notel and installs release artifacts published from this repository.

Usage

notel [command]

Commands

Command Description
notel audit Show telemetry status for all installed tools
notel audit --all Show status for all tools (including those not installed)
notel audit --verbose Detailed audit with fix hints for all installed tools
notel audit --verbose --all Detailed audit for all tools (including those not installed)
notel audit --fix / notel audit -f Print shell commands (using stdout) to disable telemetry for the current detected shell. Diagnostic messages and errors use stderr so the output is cleanly redirectable.
notel audit --fix=zsh / notel audit -f=zsh Print shell commands for a specific shell (bash, fish, powershell, zsh)
notel list / notel ls List all supported tools and their opt-out variables
notel version / notel --version Show the application version
notel help Show help

When --fix is combined with --all and/or --verbose, the audit report is still shown on stderr and the shell commands remain redirect-safe on stdout.

Example Output

Command Screenshot
notel audit Screenshot: notel audit
notel audit --fix Screenshot: notel audit
notel audit --verbose Screenshot: notel audit

Supported Tools by Category

All The Things

Tool Environment Variable Opt-out Value Data Collection
Do Not Track DO_NOT_TRACK 1 Signals a global preference to disable telemetry, analytics, crash reporting, and non-essential tracking.

Cloud & Deployment

Tool Environment Variable Opt-out Value Data Collection
Algolia CLI ALGOLIA_CLI_TELEMETRY 0 Command usage, operating system details, CLI version, and local profile metadata.
Azure CLI AZURE_CORE_COLLECT_TELEMETRY 0 Command usage, performance metrics, and error-rate telemetry.

az config set core.collect_telemetry=no

Cloudflare Wrangler CLI WRANGLER_SEND_METRICS false Command names, anonymized arguments and flags, anonymized project metadata, API timing, CLI and runtime details, session duration, CI or interactive usage, AI agent usage, sanitized error details, and general machine information.

npx wrangler telemetry status

npx wrangler telemetry disable

npx wrangler telemetry enable

CockroachDB COCKROACH_SKIP_ENABLING
_DIAGNOSTIC_REPORTING
true Cluster diagnostics, telemetry, and crash reports sent to Cockroach Labs.

NOTE: The environment variable only has effect if be set before initialising the first node of the cluster. After a cluster is running update the diagnostics.reporting.enabled setting. Telemetry is required during the 30 day self-service Enterprise Trial (see: Licensing FAQs).

GitHub CLI DO_NOT_TRACK / GH_TELEMETRY false / 1 Command usage, feature usage, and diagnostic telemetry from the GitHub CLI.

gh config get telemetry

gh config set telemetry disabled

gh config set telemetry enabled

Google Cloud SDK CLOUDSDK_CORE_DISABLE
_USAGE_REPORTING
true Anonymized command execution metrics, timing, and error status.

NOTE: Unless you opt-in during Google Cloud CLI installation, gcloud CLI software does not collect usage statistics.

gcloud config set disable_usage_reporting `true

Hasura CLI HASURA_GRAPHQL_ENABLE_TELEMETRY false Command name, timestamp, error status, server version and UUID, operating system platform and architecture, and CLI version.
Hugging Face CLI DO_NOT_TRACK / HF_HUB_DISABLE_TELEMETRY 1 / 1 By default, some data is collected by HF libraries (transformers, datasets, gradio,..) to monitor usage, debug issues and help prioritize features. Each library defines its own policy (i.e. which usage to monitor) but the core implementation happens in huggingface_hub.
Netlify CLI NETLIFY_TELEMETRY_DISABLED 1 Anonymous CLI usage and diagnostic telemetry.

netlify --telemetry-disable

netlify --telemetry-enable

Railway CLI DO_NOT_TRACK / RAILWAY_NO_TELEMETRY 1 / 1 Command and subcommand names, duration, success, truncated error message, OS, architecture, CLI version, and whether the command ran in CI.
Redocly CLI REDOCLY_TELEMETRY off Anonymous usage information about Redocly project feature usage, with additional filtering to avoid sending secrets and other sensitive data.
Stripe CLI STRIPE_CLI_TELEMETRY_OPTOUT 1 Command usage patterns, error rates and types, performance metrics, operating system details, CLI version information, and detected AI coding agent names.
Turborepo TURBO_TELEMETRY_DISABLED 1 Anonymous command usage, host information, and repo or task metrics.

turbo telemetry status

turbo telemetry disable

turbo telemetry enable

Vercel CLI VERCEL_TELEMETRY_DISABLED 1 Command usage, arguments, CLI version, and general machine information.

vercel telemetry status

vercel telemetry disable

vercel telemetry enable

Framework

Tool Environment Variable Opt-out Value Data Collection
Angular CLI NG_CLI_ANALYTICS false or ci Command usage, selected flags, workspace shape, and local version metadata.

`ng analytics [disable

Astro ASTRO_TELEMETRY_DISABLED 1 Anonymous command usage, integration usage, and project metadata.

astro telemetry disable

astro telemetry enable

Expo CLI EXPO_NO_TELEMETRY 1 Anonymous CLI usage and diagnostics for Expo development workflows.
Gatsby GATSBY_TELEMETRY_DISABLED 1 Anonymous command usage, plugin usage, and machine characteristics.

gatsby telemetry --disable

Next.js NEXT_TELEMETRY_DISABLED 1 Anonymous command usage, session timing, and project or machine characteristics.

`npx @nuxt/telemetry [status

Nuxt NUXT_TELEMETRY_DISABLED 1 Anonymous command usage, module usage, and environment characteristics.
Storybook STORYBOOK_DISABLE_TELEMETRY true Anonymous framework usage, addon data, and environment metadata.

npm run storybook -- --disable-telemetry

Package Manager

Tool Environment Variable Opt-out Value Data Collection
CocoaPods COCOAPODS_DISABLE_STATS true Anonymous pod install statistics, including hashed project target identifiers, target product types, pod names, and CocoaPods version information.
Homebrew HOMEBREW_NO_ANALYTICS 1 Anonymous install events, command usage, and build error metadata.

brew analytics state

brew analytics off

brew analytics on

Poetry POETRY_TELEMETRY_ENABLED 0 Anonymous usage statistics and telemetry about Poetry command execution.
Yarn (v2+) YARN_ENABLE_TELEMETRY 0 Anonymous command usage and version information.

Runtimes & SDKs

Tool Environment Variable Opt-out Value Data Collection
Bun DO_NOT_TRACK 1 Anonymous telemetry and crash-reporting signals from Bun tooling.
.NET SDK DOTNET_CLI_TELEMETRY_OPTOUT 1 CLI command usage, SDK versions, and exception metadata.
Flutter FLUTTER_CLI_CRASH_REPORTING false CLI crash reports, tool usage signals, and local environment metadata.

Note: ⁠FLUTTER_CLI_CRASH_REPORTING does not disable the general analytics reporting setting which must be set via the CLI:

flutter config --no-analytics

Node.js DISABLE_TELEMETRY / NODE_NO_TELEMETRY 1 Anonymous runtime and CLI telemetry in Node features that support it.

Security & Observability

Tool Environment Variable Opt-out Value Data Collection
Semgrep SEMGREP_SEND_METRICS off Usage metrics about Semgrep runs, registry usage, and login-related activity.

`semgrep --metrics auto

Sentry CLI SENTRY_CLI_NO_TELEMETRY 1 Anonymous CLI usage and diagnostic telemetry.

Build

  • Local build: just build -> bin/notel
  • Cross-platform release artifacts: just release -> dist/
  • Full release preflight plus artifacts: just release-check
  • Release packaging is shared by local and CI builds via scripts/release.sh

just release builds archives for:

  • darwin/amd64
  • darwin/arm64
  • linux/amd64
  • linux/arm64
  • windows/amd64
  • windows/arm64

Release artifacts follow the convention notel_<version>_<os>_<arch>.tar.gz or .zip, and dist/SHA256SUMS is generated for the packaged archives.

Adding a new tool

Add an entry to internal/tools/registry.go:

{
    Name:        "My Tool",
    Description: "Description of the tool",
    DocumentationURL: "https://example.com/docs/telemetry",
    DataCollection:   "Anonymous command usage and diagnostic metadata.",
    Binary:           "mytool",        // binary name checked via PATH
    Category:         "Framework",
    EnvChecks: []EnvCheck{
        {
            Name:        "MYTOOL_TELEMETRY_DISABLED",
            ValidValues: []string{"1", "true"},
            Description: "Disables My Tool telemetry",
        },
    },
},

Keep registry entries sorted alphabetically by Category and then by Name.

Project Structure

notel/
├── main.go
├── cmd/
│   ├── root.go      # Cobra root command
│   ├── audit.go     # notel audit
│   └── list.go      # notel list
└── internal/
    ├── tools/
    │   └── registry.go   # Tool definitions (add new tools here)
    ├── check/
    │   └── checker.go    # Detection & env-var audit logic
    └── output/
        └── formatter.go  # Lipgloss-styled output

License

Licensed under the Apache License, Version 2.0. See LICENSE.

Feedback or Suggestions?

Bug reports, feature requests, and questions can be posted in the Issues section on GitHub.

About

Telemetry auditing CLI

Topics

Resources

License

Stars

Watchers

Forks

Contributors