Privacy
Kaho uses Sentry for crash debugging. Sentry helps us see whether the app launched successfully and gives us native crash reports when the desktop app fails.
The Kaho crash reporting code is configured to avoid app content, opened document contents, prompts, screenshots, and precise location. Kaho sets an anonymous install ID for grouping reports from the same installation, but it does not set a user name, email address, or user IP address field.
Data Sent On App Startup
| Data | Shape | Purpose |
|---|---|---|
| Anonymous install ID | A locally generated UUID sent as Sentry user.id. No user name, email, or IP address is set by Kaho. |
Groups launch and crash data from one installation without asking for personal account details. |
| Release and build | SENTRY_RELEASE plus tags for platform, arch, and build_config. |
Shows which Kaho version, operating system family, CPU architecture, and build produced the event. |
| Kaho telemetry tags | app=kaho, privacy=light, and telemetry_schema=1. |
Separates Kaho events from other Sentry data and records the privacy schema used for the payload. |
| Privacy context | anonymous_install_id=true, content=false, file_paths=false, precise_location=false, raw_ip=false, and country=server_aggregate_only. |
Makes the intended data limits explicit on the event scope. |
| Launch metric | Metric kaho.app.launch with value 1 and attributes schema=1, event=launch, and privacy=light. |
Counts launches so we can tell whether a release is actually starting for users. |
| Sentry session tracking | Sentry native session lifecycle data tied to the same release and build metadata. On app close, Kaho also sends metric kaho.app.session_duration_bucket with value 1, attributes schema=1, event=session_end, privacy=light, and bucketed duration <10s, 10s-1m, 1m-5m, 5m-30m, 30m-2h, or 2h+. |
Lets Sentry classify launches, clean exits, crashed sessions, and approximate session length without sending exact usage duration. |
Data Sent On Crash Dumps
| Data | Shape | Purpose |
|---|---|---|
| Native crash dump | Crashpad minidump data such as exception or signal details, crashing thread state, thread stacks, CPU register state, loaded binary/module metadata, and debug identifiers. | Lets Sentry symbolicate the crash and show the failing native code path. |
| Release, build, and anonymous install ID | The same SENTRY_RELEASE, platform, arch, build_config, and anonymous user.id configured at startup. |
Groups crashes by app version and installation so repeated crashes can be diagnosed. |
| Privacy context | The same privacy flags used at startup: no app content, no opened file paths from Kaho, no precise location, and no user IP address field set by Kaho. | Keeps the crash event scoped to debugging metadata rather than user documents or work content. |
| GPU tags | When graphics initialization succeeds: gpu_api, gpu_vendor, and gpu_device_type. |
Separates crashes by graphics backend and broad GPU class. |
| GPU context | Vulkan reports device name/model, vendor and device IDs, device type, driver/API versions, and device-local memory. Metal reports device name/model, registry ID, Apple vendor IDs, device type, memory, unified memory, low-power, and removable flags. | Helps diagnose renderer crashes that depend on a specific GPU, driver, or memory configuration. |
| Crashed session state | Sentry native session tracking marks the active session as crashed. | Shows crash-free session health for a release. |