Skip to content

Privacy Telemetry

Taiizor edited this page Jun 5, 2026 · 2 revisions

Privacy & Telemetry

Audience: users, admins. Sucrose can optionally send crash reports and usage analytics to its backend (Soferity). Both are opt-in, controlled by two independent consent switches, and can be turned off entirely. This page documents exactly what data is collected, when it is sent, where it goes, how to disable it, and one important handling note: the optional PersonalAccessToken setting is stored in plaintext. The services responsible are Sucrose.Reportdog (uploader) and Sucrose.Watchdog (crash capture) — see Crash Reporting for the capture mechanics.

Contents


The two consent switches

All telemetry and crash uploading is gated by two settings on Portal → Settings → Other (keys in Sucrose.Manager.Manage.General). Both default to true but can be turned off independently:

Setting key Default Controls
ExceptionData true Upload of crash reports (the Throw stream).
TelemetryData true Upload of analytics + online heartbeat + update/download telemetry.

The uploader service, Sucrose.Reportdog, runs only if at least one of these is enabled (and only as a single instance). If both are off, no data is uploaded at all.


What is collected

There are three upload streams, each gated by the consent switch shown:

1. Crash reports — Throw stream (gated by ExceptionData)

When a Sucrose process crashes, Sucrose.Watchdog writes a structured report JSON to …\AppData\Roaming\Sucrose\Cache\Report\<Guid>.json. Sucrose.Reportdog watches that folder and uploads each report, then deletes the file on success. A report (ThrowExceptionData) contains:

  • An identifier set: Id (Guid), AppId, Sid (a hash of user + device model + manufacturer).
  • Environment: UserName, DeviceModel, AppName, AppVersion, AppFramework, AppArchitecture, ManufacturerBrand, OperatingSystem, OperatingSystemBuild, OperatingSystemArchitecture, ProcessArchitecture, ProcessorArchitecture, IsServer, IsWorkstation.
  • Locale: CultureName, CultureCode, CultureDisplay.
  • The Exception object itself (message, inner exception, stack).

2. Analytics — Analytic stream (gated by TelemetryData)

A large AnalyticTelemetryData snapshot of nearly every user setting and hardware summary, including: app exit/visible/startup settings; all per-type engine choices (Gif/Url/Web/Video/YouTube/Application); all *Performance modes; library/store/cycling settings; and hardware info (total memory, CPU cores, processor count, GPU/network/CPU lists, OS, architecture, culture).

3. Online heartbeat — Online stream (gated by TelemetryData)

A small periodic ping carrying { AppVersion, Time }, where Time is 1 on the first ping and otherwise the interval in seconds.

Best-effort download/update telemetry

Two additional best-effort posts, also gated by TelemetryData:

  • Download telemetry — before downloading a Store wallpaper, a DownloadTelemetryData JSON is posted to …/v8/Telemetry/Download/{Guid} (errors swallowed). See Using the Store.
  • Update telemetry — during an update network check, an UpdateTelemetryData {AppVersion, UpdateAutoType} is posted to …/v8/Telemetry/Update/<UserGuid>. See Update Internals.

When data is sent (timing)

Stream Trigger / interval Notes
Crash report (Throw) On each crash report file appearing (plus a drain of existing files on Reportdog startup) Uploaded then deleted on success. Requires network reachability.
Analytics (Analytic) Timer every 10 minutes (AnalyticTime = 10 min) One-shot per run — after the first successful analytic POST, the analytic timer is disposed.
Online heartbeat (Online) Timer every ~2–2.5 minutes (OnlineTime = Random.Next(120,150) seconds) Recurs for the lifetime of the service run.

Sucrose.Reportdog runs a do { … } while (Exit) loop with a 1000 ms (AppTime) base tick.


Where it goes (endpoints)

All telemetry and crash uploads go to the Soferity backend, base URL https://sucrose.soferity.com, API version segment v8 (Soferity.Version). The client-visible endpoints:

Stream Endpoint
Crash report …/v8/Exception/Throw/<UserGuid>
Analytics …/v8/Telemetry/Analytic/<UserGuid>
Online heartbeat …/v8/Telemetry/Online/<UserGuid>
Download telemetry …/v8/Telemetry/Download/<Guid>
Update telemetry …/v8/Telemetry/Update/<UserGuid>

Payloads are JSON (application/json, UTF-8). The <UserGuid> is a per-user identifier. The Soferity backend itself is closed-source and out of scope for this wiki beyond these client-visible endpoints.


How to disable telemetry

  1. Open the Portal (Sucrose settings).
  2. Go to Settings → Other.
  3. Turn off ExceptionData to stop crash-report uploads.
  4. Turn off TelemetryData to stop analytics, the online heartbeat, and download/update telemetry.

With both disabled, Sucrose.Reportdog does not upload anything. (See Settings — Other for these keys in context.) Disabling telemetry does not stop crash reports from being written locally to Cache\Report — it only stops them being uploaded; you can clear that folder via cache management (see Cache Management).


The PersonalAccessToken plaintext note

The optional PersonalAccessToken setting (Portal → Settings → Other, key in Sucrose.Manager.Manage.Objectionable, default empty) is a GitHub Personal Access Token you can supply to raise GitHub API rate limits when browsing the GitHub Store backend. It is sent as an Authorization: Bearer … header.

Handling note: like all Sucrose settings, this token is stored in plaintext JSON under %AppData%\Sucrose\. It is not encrypted. Only provide a token with the minimum scope you need, and be aware it sits in a readable settings file on disk. This is a documented privacy/handling note, not a reported vulnerability — for reporting actual vulnerabilities, see Security Policy.


Data stored only on your machine

Most Sucrose data never leaves your computer. Settings, the wallpaper library, logs, and caches all live under your user profile:

  • %AppData%\Sucrose\ — settings (Setting), logs (Log), caches (Cache, including Cache\Report crash JSONs), Library, Showcase.
  • %LocalAppData%\Sucrose\ — the installed binaries and the private Sucrose.Runtime.

See Data Locations for the full map. None of this is uploaded unless one of the two consent switches above is on, and even then only the specific payloads listed above are sent.


See also

Home

Getting Started

Wallpaper Types

Using Sucrose

Settings Reference

Creating Wallpapers

Engine Reference

Automation & Command Line

Architecture & Internals

Data, Files & Diagnostics

Building & Contributing

Help & Support

Clone this wiki locally