-
-
Notifications
You must be signed in to change notification settings - Fork 60
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.
- The two consent switches
- What is collected
- When data is sent (timing)
- Where it goes (endpoints)
- How to disable telemetry
- The PersonalAccessToken plaintext note
- Data stored only on your machine
- See also
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.
There are three upload streams, each gated by the consent switch shown:
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
Exceptionobject itself (message, inner exception, stack).
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).
A small periodic ping carrying { AppVersion, Time }, where Time is 1 on the first ping and otherwise the interval in seconds.
Two additional best-effort posts, also gated by TelemetryData:
-
Download telemetry — before downloading a Store wallpaper, a
DownloadTelemetryDataJSON 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.
| 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.
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.
- Open the Portal (Sucrose settings).
- Go to Settings → Other.
- Turn off
ExceptionDatato stop crash-report uploads. - Turn off
TelemetryDatato 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 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.
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, includingCache\Reportcrash JSONs),Library,Showcase. -
%LocalAppData%\Sucrose\— the installed binaries and the privateSucrose.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.
Getting Started
- Installation
- System Requirements
- Quick Start
- Portal Interface Tour
- Updating Sucrose
- Uninstalling Sucrose
Wallpaper Types
Using Sucrose
- Managing Library
- Using Store
- Customizing Wallpaper
- Multi-Monitor
- Wallpaper Cycling
- Choosing Engines
- Performance Rules
- Theme, Tray & Startup
- Discord Rich Presence
Settings Reference
- Settings Overview
- Settings: General
- Settings: Personal
- Settings: Performance
- Settings: Wallpaper
- Settings: System
- Settings: Other
- Settings: All Keys
Creating Wallpapers
- Create Overview
- Create: Step By Step
- Create: Package Format
- Create: Customization Controls
- Create: JS Bridge
- Create: Audio API
- Create: System API
- Create: Property Listener & Filters
- Create: Web Architecture
- Create: Compatibility
- Create: Example Wallpapers
- Create: Sharing & Publishing
Engine Reference
- Engines Overview
- Engine: MpvPlayer
- Engine: VlcPlayer
- Engine: WebView
- Engine: CefSharp
- Engine: Nebula
- Engine: Vexana
- Engine: Xavier
- Engine: Aurora
- Engine Comparison
Automation & Command Line
Architecture & Internals
- Architecture Overview
- Lifecycle
- Commandog Dispatcher
- Single-Instance Mutexes
- IPC
- Backgroundog Service
- Crash Reporting
- Update Internals
- Property Service
- Undo Internals
Data, Files & Diagnostics
Building & Contributing
- Building From Source
- Repository Layout
- Shared Item Projects
- Code Conventions
- Preprocessor Symbols
- Publish Pipeline
- Bundle Installer Internals
- Extending Sucrose
- Contributing
- Translating with Localizer
- Localization Coverage
- Security Policy
- Privacy & Telemetry
Help & Support