1# Telemetry in Zed
2
3**Up to date with v0.112.0**
4
5Zed collects anonymous telemetry data to help the team understand how people are using the application and to see what sort of issues they are experiencing.
6
7## Configuring Telemetry Settings
8
9You have full control over what data is sent out by Zed. To enable or disable some or all telemetry types, open your `settings.json` file via `zed: open settings` from the command palette. Insert and tweak the following:
10
11```json
12"telemetry": {
13 "diagnostics": false,
14 "metrics": false
15},
16```
17
18The telemetry settings can also be configured via the `welcome` screen, which can be invoked via the `workspace: welcome` action in the command palette.
19
20## Dataflow
21
22Telemetry is sent from the application to our servers. Data is proxied through our servers to enable us to easily switch analytics services. We currently use:
23
24- [Axiom](https://axiom.co): Cloud-monitoring service - stores diagnostic events
25- [Clickhouse](https://clickhouse.com): Business Intelligence platform - stores both diagnostic and metric events
26- [Metabase](https://www.metabase.com): Dashboards - dashboards built around data pulled from Clickhouse
27
28## Types of Telemetry
29
30### Diagnostics
31
32Diagnostic events include debug information (stack traces) from crash reports. Reports are sent on the first application launch after the crash occurred. We've built dashboards that allow us to visualize the frequency and severity of issues experienced by users. Having these reports sent automatically allows us to begin implementing fixes without the user needing to file a report in our issue tracker. The plots in the dashboards also give us an informal measurement of the stability of Zed.
33
34When a panic occurs, the following data is sent:
35
36#### PanicRequest
37
38- `panic`: The panic data
39- `token`: An identifier that is used to authenticate the request on zed.dev
40
41#### Panic
42
43- `thread`: The name of the thread that panicked
44- `payload`: The panic message
45- `location_data`: The location of the panic
46 - `file`
47 - `line`
48- `backtrace`: The backtrace of the panic
49- `app_version`: Zed's app version
50- `release_channel`: Zed's release channel
51 - `stable`
52 - `preview`
53 - `dev`
54- `os_name`: The name of your operating system
55- `os_version`: The version of your operating system
56- `architecture`: The architecture of your CPU
57- `panicked_on`: The time that the panic occurred
58- `installation_id`: An identifier that is unique to each installation of Zed (this differs for stable, preview, and dev builds)
59- `session_id`: An identifier that is unique to each Zed session (this differs for each time you open Zed)
60
61### Metrics
62
63Zed also collects metric information based on user actions. Metric events are reported over HTTPS, and requests are rate-limited to avoid using significant network bandwidth. All data remains anonymous, and can't be related to specific Zed users.
64
65The following data is sent:
66
67#### ClickhouseEventRequestBody
68
69- `token`: An identifier that is used to authenticate the request on zed.dev
70- `installation_id`: An identifier that is unique to each installation of Zed (this differs for stable, preview, and dev builds)
71- `session_id`: An identifier that is unique to each Zed session (this differs for each time you open Zed)
72- `is_staff`: A boolean that indicates whether the user is a member of the Zed team or not
73- `app_version`: Zed's app version
74- `os_name`: The name of your operating system
75- `os_version`: The version of your operating system
76- `architecture`: The architecture of your CPU
77- `release_channel`: Zed's release channel
78 - `stable`
79 - `preview`
80 - `dev`
81- `events`: A vector of `ClickhouseEventWrapper`s
82
83#### ClickhouseEventWrapper
84
85- `signed_in`: A boolean that indicates whether the user is signed in or not
86- `event`: An enum, where each variant can be one of the following `ClickhouseEvent` variants:
87
88#### ClickhouseEvent
89
90- `editor`
91 - `operation`: The editor operation that was performed
92 - `open`
93 - `save`
94 - `file_extension`: The extension of the file that was opened or saved
95 - `vim_mode`: A boolean that indicates whether the user is in vim mode or not
96 - `copilot_enabled`: A boolean that indicates whether the user has copilot enabled or not
97 - `copilot_enabled_for_language`: A boolean that indicates whether the user has copilot enabled for the language of the file that was opened or saved
98 - `milliseconds_since_first_event`: Duration of time between this event's timestamp and the timestamp of the first event in the current batch
99- `copilot`
100 - `suggestion_accepted`: A boolean that indicates whether the suggestion was accepted or not
101 - `file_extension`: The file extension of the file that was opened or saved
102 - `milliseconds_since_first_event`: Same as above
103- `call`
104 - `operation`: The call operation that was performed
105 - `accept incoming`
106 - `decline incoming`
107 - `disable microphone`
108 - `disable screen share`
109 - `enable microphone`
110 - `enable screen share`
111 - `hang up`
112 - `invite`
113 - `join channel`
114 - `open channel notes`
115 - `share project`
116 - `unshare project`
117 - `room_id`: The ID of the room
118 - `channel_id`: The ID of the channel
119 - `milliseconds_since_first_event`: Same as above
120- `assistant`
121 - `conversation_id`: The ID of the conversation (for panel events only)
122 - `kind`: An enum with the following variants:
123 - `panel`
124 - `inline`
125 - `model`: The model that was used
126 - `milliseconds_since_first_event`: Same as above
127- `cpu`
128 - `usage_as_percentage`: The CPU usage
129 - `core_count`: The number of cores on the CPU
130 - `milliseconds_since_first_event`: Same as above
131- `memory`
132 - `memory_in_bytes`: The amount of memory used in bytes
133 - `virtual_memory_in_bytes`: The amount of virtual memory used in bytes
134 - `milliseconds_since_first_event`: Same as above
135- `app`
136 - `operation`: The app operation that was performed
137 - `first open`
138 - `open`
139 - `close`
140 - `milliseconds_since_first_event`: Same as above
141
142You can audit the metrics data that Zed has reported by running the command `zed: open telemetry log` from the command palette, or clicking `Help > View Telemetry Log` in the application menu.
143
144The telemetry settings can also be configured via the `welcome` screen, which can be invoked via the `workspace: welcome` action in the command palette.
145
146### Concerns and Questions
147
148If you have concerns about telemetry, please feel free to open issues in our [Zed repository](https://github.com/zed-industries/zed/issues/new/choose).