Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Privacy and collected fields

This page lists everything the SDK can send. If a field is not here, it is not collected. Change this page in the same commit as any change to what is collected.

Principles

  • The host app chooses. It declares its events at build time and picks which to listen to at startup. Undeclared events cannot be recorded.
  • Nothing is sent before the notice. Telemetry is on by default with a first-run notice. Until the host app reports that the user has seen that notice, data is recorded on the device but nothing leaves it. A category the user switches off in the notice is deleted and never sent. (A host app that shows its notice elsewhere, such as in an installer, can lift this.)
  • The user can switch it off. Each category — crash reports, performance, usage — has its own switch. DO_NOT_TRACK=1 or TRACER_DISABLED=1 in the environment turns everything off and nothing is written or sent. A host can choose to ignore DO_NOT_TRACK (honor_do_not_track(false)) and to make telemetry not optional (force_consent(true): no switches, no notice); it must then say so in its own privacy text. TRACER_DISABLED cannot be ignored.
  • No user content. Event names and property text are fixed strings compiled into the app. There is no API that accepts a file name, project name, document text or typed input.
  • No stable identity. The install id is random, is not derived from hardware, and can be reset. The server never stores the IP address.
  • Visible. With inspect mode on, everything that would be sent is also written to outbox.jsonl in the SDK’s folder.
  • Forgettable. “Forget me” deletes local data, including recent log lines and the last crash held in memory, asks the server to delete everything for the install, and issues a new id.

Fields

FieldExampleCategory
App name, version, build id, process kindmy-app, 1.2.3, abc1234, guiall
Install idrandom 32 hex charactersall
Session idrandom 32 hex charactersall
Operating system name and version, CPU architecturemacos, 26.0, aarch64all
CPU model and core count, RAM sizeExample CPU, 10, 32768 MBall
Graphics adapter name, vendor, backend, driver versionsupplied by the host appall
Localeen-USall
Session start, end, how it endedexited, crashed, abnormalusage
Session duration; focused, active and idle seconds62, 50, 40, 22usage
Declared event name and categoryfile.open, fileusage
Event properties: booleans, numbers, fixed short stringsformat = "native"usage
The list of declared events and which are listened tousage
Frame-time histogram, slow and frozen frame countsperformance
Startup time850 msperformance
Process CPU percentage and memory use42.5, 512 MBperformance
Host-defined counters and gaugesaudio.xruns = 2performance
Panic or error message, source location, thread name, backtracescrubbed, see belowcrash
Hang duration2400 mscrash
Child process label, exit code, signalexporter, 134crash
Recent log lines (level, target, message) — only attached to a crashscrubbed, see belowcrash
Counts of data the client discardedqueue_full = 4all

Scrubbing

Applied on the device, before anything is queued or written, to messages, backtraces and log lines:

  • The user’s home directory becomes ~.
  • The user’s account name is removed where it appears in a path.
  • Long values are truncated.

Log lines and error messages are written by the host app, so the host is responsible for not logging user content.

Retention

The server keeps raw data for 90 days by default and daily totals indefinitely. Both are configurable.