Telemetry in Zed
Zed 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.
Dataflow
Telemetry is sent from the application to zed.dev. Data is proxied through our servers to enable us to easily switch analytics services; we never store this data. The data is then sent off to various services:
- Datadog: Cloud-monitoring service - stores diagnostic events
 - Clickhouse: Business Intelligence platform - stores both diagnostic and metric events
 - Metabase: Dashboards - dashboards built around data pulled from Clickhouse
 
Types of Telemetry
Diagnostics
Diagnostic 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.
When a panic occurs, the following data is sent:
PanicRequest
panic: The panic datatoken: An identifier that is used to authenticate the request on zed.dev
Panic
thread: The name of the thread that panickedpayload: The panic messagelocation_data: The location of the panicfileline
backtrace: The backtrace of the panicapp_version: Zed’s app versionrelease_channel: Zed’s release channelstablepreviewdev
os_name: The name of your operating systemos_version: The version of your operating systemarchitecture: The architecture of your CPUpanicked_on: The time that the panic occurredinstallation_id: An identifier that is unique to each installation of Zed (this differs for stable, preview, and dev builds)session_id: An identifier that is unique to each Zed session (this differs for each time you open Zed)
Metrics
Zed 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.
The following data is sent:
ClickhouseEventRequestBody
token: An identifier that is used to authenticate the request on zed.devinstallation_id: An identifier that is unique to each installation of Zed (this differs for stable, preview, and dev builds)session_id: An identifier that is unique to each Zed session (this differs for each time you open Zed)is_staff: A boolean that indicates whether the user is a member of the Zed team or notapp_version: Zed’s app versionos_name: The name of your operating systemos_version: The version of your operating systemarchitecture: The architecture of your CPUrelease_channel: Zed’s release channelstablepreviewdev
events: A vector ofClickhouseEventWrappers
ClickhouseEventWrapper
signed_in: A boolean that indicates whether the user is signed in or notevent: An enum, where each variant can be one of the followingClickhouseEventvariants:
ClickhouseEvent
editoroperation: The editor operation that was performedopensave
file_extension: The extension of the file that was opened or savedvim_mode: A boolean that indicates whether the user is in vim mode or notcopilot_enabled: A boolean that indicates whether the user has copilot enabled or notcopilot_enabled_for_language: A boolean that indicates whether the user has copilot enabled for the language of the file that was opened or savedmilliseconds_since_first_event: Duration of time between this event’s timestamp and the timestamp of the first event in the current batch
copilotsuggestion_id: The ID of the suggestionsuggestion_accepted: A boolean that indicates whether the suggestion was accepted or notfile_extension: The file extension of the file that was opened or savedmilliseconds_since_first_event: Same as above
calloperation: The call operation that was performedaccept incomingdecline incomingdisable microphonedisable screen shareenable microphoneenable screen sharehang upinvitejoin channelopen channel notesshare projectunshare projectroom_id: The ID of the roomchannel_id: The ID of the channelmilliseconds_since_first_event: Same as above
assistantconversation_id: The ID of the conversation (for panel events only)kind: An enum with the following variants:panelinline
model: The model that was usedmilliseconds_since_first_event: Same as above
cpuusage_as_percentage: The CPU usagecore_count: The number of cores on the CPUmilliseconds_since_first_event: Same as above
memorymemory_in_bytes: The amount of memory used in bytesvirtual_memory_in_bytes: The amount of virtual memory used in bytesmilliseconds_since_first_event: Same as above
appoperation: The app operation that was performedfirst openopenclose (only in GPUI2-powered Zed)milliseconds_since_first_event: Same as above
You 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.
Configuring Telemetry Settings
You 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:
"telemetry": {    "diagnostics": false,    "metrics": false},The telemetry settings can also be configured via the welcome screen, which can be invoked via the workspace: welcome action in the command palette.
Concerns and Questions
If you have concerns about telemetry, please feel free to open issues in our community repository.