What is collected
Every CLI invocation sends a single event when telemetry is enabled:| Field | Example | Description |
|---|---|---|
event | "ubx_command" | Always "ubx_command" — the event type |
command | "plan" | Top-level subcommand (plan, apply, validate, …) |
subcommand | "apply" | Second-level subcommand, e.g. workspace apply; empty otherwise |
ubx_version | "v0.1.0" | The ubx CLI version that ran |
os | "darwin" | Operating system (darwin, linux, windows) |
arch | "arm64" | CPU architecture (arm64, amd64) |
exit_code | 0 | 0 for success; only successful invocations send events in v1 |
duration_ms | 1240 | Wall-clock time from start to completion (milliseconds) |
providers | ["aws"] | Provider names in use in the current project |
anonymous_id | "a3f9b2…" | SHA256 hash of the machine ID — see Anonymous ID |
sent_at | "2026-06-29T14:00:00Z" | RFC 3339 UTC timestamp of the event |
What is never collected
The following information is never sent, regardless of configuration:- Source code or
.iacfile contents - Resource names, attribute values, or infrastructure topology
- Stack output values or secret values
- File paths or directory names
- IP addresses
- Cloud account IDs or ARNs
- Git commit messages or branch names
- Any personally identifiable information (PII)
Anonymous ID
Theanonymous_id field is a SHA256 hash of a platform-specific machine identifier:
| Platform | Source identifier |
|---|---|
| macOS | IOPlatformUUID from ioreg |
| Linux | /etc/machine-id |
| Windows | MachineGuid from the Windows registry |
| Fallback | System hostname |
anonymous_id; two machines always produce different values.
Disabled by default
Telemetry is never enabled automatically. ubx requires explicit opt-in through one of the mechanisms below.First-run consent prompt
On the first invocation of ubx (when~/.ubx/telemetry-consent does not yet exist), ubx shows a one-time prompt:
- Typing
yoryesopts in and writes{"enabled": true}to~/.ubx/telemetry-consent. - Any other input (or pressing Enter for the default
N) declines and writes{"enabled": false}.
Non-interactive environments
When stdin is not a TTY (CI pipelines, Docker, piped input), the prompt is never shown. The consent file is written automatically withenabled: false. Telemetry remains disabled unless UBX_TELEMETRY=1 is set explicitly.
--no-telemetry-prompt flag
Pass --no-telemetry-prompt to any ubx command to skip the consent prompt on that run. The consent file is written with enabled: false if it does not already exist:
Opt-in via ubx.yaml
Enable telemetry at the project level by adding telemetry.enabled: true to ubx.yaml:
enabled: true is set, telemetry fires even if the user’s ~/.ubx/telemetry-consent has enabled: false — the project-level setting takes precedence. This is intended for teams that want to collect aggregate usage across all developers and CI runs.
Opt-in via environment variable
UBX_TELEMETRY=1 enables telemetry for a single invocation. It overrides both ubx.yaml and the consent file.
Force disable
UBX_TELEMETRY=0 disables telemetry for a single invocation, overriding all other settings including ubx.yaml and the consent file.
Priority order
When multiple settings conflict, the following priority applies (highest wins):| Priority | Setting | Effect |
|---|---|---|
| 1 (highest) | UBX_TELEMETRY=0 | Force disable |
| 2 | UBX_TELEMETRY=1 | Force enable |
| 3 | ubx.yaml telemetry.enabled: false | Disable |
| 4 | ubx.yaml telemetry.enabled: true | Enable |
| 5 | ~/.ubx/telemetry-consent enabled: false | Disable |
| 6 | ~/.ubx/telemetry-consent enabled: true | Enable |
| 7 (lowest) | no consent file | Disable (opt-in required) |
Override endpoint
Override the telemetry endpoint for testing or self-hosted deployments:ubx.yaml:
ubx.yaml value.
Transmission behaviour
- Events are sent in a background goroutine — telemetry never blocks the CLI.
- The HTTP request has a 2-second timeout. If the endpoint is unreachable, the error is silently dropped.
- Events are never retried on failure.
- No buffering or batching — one HTTP POST per invocation when telemetry is enabled.
- The default endpoint is
https://telemetry.ubiquex.io/v1/event.
Consent file location
CI / automated environments
In CI pipelines, telemetry should be either explicitly disabled or explicitly enabled:{"enabled": false} consent file silently. No prompt is shown, no data is sent.
