Skip to main content

Telemetry

tl;dr

Wave Terminal collects telemetry data to help us track feature use, direct future product efforts, and generate aggregate metrics on Wave's popularity and usage. We do NOT collect personal information (PII), keystrokes, file contents, AI prompts, IP addresses, hostnames, or commands. We attach all information to an anonymous, randomly generated ClientId (UUID). You may opt out of collection at any time.

Here’s a quick summary of what is collected:

  • Basic App/System Info – OS, architecture, app version, update settings
  • Usage Metrics – App start/shutdown, active minutes, foreground time, tab/block counts/usage
  • Feature Interactions – When you create tabs, run commands, change settings, etc.
  • Display Info – Monitor resolution, number of displays
  • Connection Events – SSH/WSL connection attempts (but NOT hostnames/IPs)
  • AI Commands – Only which AI backend is used (e.g., OpenAI, Claude) – no text or prompts sent
  • Error Reports – Crash/panic events with minimal debugging info, but no stack traces or detailed errors

Telemetry can be disabled at any time in settings. If not disabled it is sent on startup, on shutdown, and every 4-hours.

How to Disable Telemetry

If you would like to turn telemetry on or off, the first opportunity is a button on the initial welcome page. After this, it can be turned off by adding "telemetry:enabled": false to the config/settings.json file. It can alternatively be turned on by adding "telemetry:enabled": true to the config/settings.json file.

tip

You can also change your telemetry setting (true/false) by running the wsh command:

wsh setconfig telemetry:enabled=true
info

This document outlines the new telemetry system as of v0.11.1. The previous telemetry documentation is still relevant and can be found in our Legacy Telemetry Documentation, but in general, the new telemetry is a superset of the old.

Sending Telemetry

Provided that telemetry is enabled, it is sent 10 seconds after Waveterm is first booted and then again every 4 hours thereafter. It can also be sent in response to a few special cases listed below. When telemetry is sent, it is grouped into individual days as determined by your time zone. Any data from a previous day is marked as Uploaded so it will not need to be sent again.

Sending Once Telemetry is Enabled

As soon as telemetry is enabled, a telemetry update is sent regardless of how long it has been since the last send. This does not reset the usual timer for telemetry sends.

Notifying that Telemetry is Disabled

As soon as telemetry is disabled, Waveterm sends a special update that notifies us of this change. See When Telemetry is Turned Off for more info. The timer still runs in the background but no data is sent.

When Waveterm is Closed

Provided that telemetry is enabled, it will be sent when Waveterm is closed.

Event Types

Below is a list of the event types collected in the new telemetry system. More events are likely to be added in the future.

Event NameDescription
app:startupLogged every time you start the app. Contains basic app information like architecture, version, buildtime, etc.
app:shutdownLogged on every shutdown
app:activityLogged once per hour of app activity
app:displayLogged on startup and contains information about size of displays
app:countsLogged once per hour when app is active, contains basic counts like number of windows, tabs, workspaces, blocks, etc.
action:magnifyLogged each time a block is magnified
action:settabthemeLogged each time a tab theme is changed
action:runaicmdLogged each time an AI request is made (no prompt information or text is sent), only sends "ai:backendtype" to know what type of AI backend is being used (OpenAI, Claude, Gemini, etc.)
action:createtabLogged when a new tab is created
action:createblockLogged when a new block is created (contains the block view type)
wsh:runLogged when a wsh command is executed (contains the command type)
debug:panicLogged when a backend (Go) panic happens. Contains a debugging string that can be used to find which panic was hit in our source code. No data is sent
conn:connectLogged each time a backend ssh/wsl connection connects (logs the conneciton type, no hostname or IP is sent)
conn:connecterrorLogged when you try to connect but it fails (logs the connection type, no hostname or IP is set, and no detailed error information is sent)

Event Properties

Each event may contain the following properties that are relevant to the particular events.

PropertyDescription
client:archWave architecture (darwin, windows, linux) and x64 vs arm64
client:versionThe Wave version (e.g. v0.11.1)
client:initial_versionInitial installed wave version
client:buildtimeThe buildtime (more exact wave version)
client:osreleaseA string representing the version of the OS you're running -- different for darwin, windows, and linux
client:isdevTrue/False if using the dev build
autoupdate:channelWhat auto-update channel you're on (latest vs beta)
autoupdate:enabledTrue/False if auto-updated is enabled
loc:countrycodeTwo character country code (e.g. US, CN, FR, JP)
loc:regioncodeTwo character region code (usually the State or Province within a country)
activity:activeminutesFor app:activity, a number between 0-60 of how many minutes were active within the hour
activity:fgminutesFor app:activity, a number between 0-60 of how many minutes Wave was the foreground application
activity:openminutesFor app:activity, a number between 0-60 of how many minutes Wave was open
action:initiatorFor certain actions logs if the action was initiated by the UI or the backend
debug:panictypeThe string that identifies the panic location within our Go code
block:viewType of block, e.g. "preview", "waveai", "term", "sysinfo", etc.
ai:backendtypeAI backend type (e.g. OpenAI, Gemini, Anthropic, etc.)
wsh:cmdThe wsh command that was run, e.g. "view", "edit", "run", "editconfig" etc.
wsh:haderrorTrue/False whether the wsh command returned an error
conn:conntypeType of connnection (ssh / wsl)
display:heightHeight of the main display in px
display:widthWidth of the main display in px
display:dprDPR of the main display
display:countHow many total displays
display:allJSON for all the displays attached (same attributes as above)
count:blocksTotal number of blocks
count:tabsTotal number of tabs
count:windowsTotal number of windows
count:workspacesTotal number of workspaces
count:sshconnTotal number of SSH connections
count:wslconnTotal number of WSL connections
count:viewsCounts of the types of blocks (views)

When Telemetry is Turned Off

When a user disables telemetry, Waveterm sends a notification that their anonymous ClientId has had its telemetry disabled. This is done with the wcloud.NoTelemetryInputType type in the source code. Beyond that, no further information is sent unless telemetry is turned on again. If it is turned on again, the previous 30 days of telemetry will be sent.


A Note on IP Addresses

Telemetry is uploaded via https, which means your IP address is known to the telemetry server. We do not store your IP address in our telemetry table and do not associate it with your ClientId.


Previously Collected Telemetry Data

While we believe the data we collect with telemetry is fairly minimal, we cannot make that decision for every user. If you ever change your mind about what has been collected previously, you may request that your data be deleted by emailing us at [email protected]. If you do, we will need your ClientId to remove it.


Privacy Policy

For a summary of the above, you can take a look at our Privacy Policy.