Privacy in the app
Scratch is local-first. Your buffers never leave your Mac. The only outbound traffic the app makes on its own is update checks and, if you turn it on, anonymous telemetry.
For the legally binding statement, see the privacy policy. This page describes the same behavior in product terms.
What Scratch never sends
- Buffer content. Not in crash reports, not in metrics, not in update checks. The bitmap captured by capture text is processed locally and discarded. Rephrase with Apple Intelligence runs the model on your Mac — the buffer text never leaves the device.
- Filenames or buffer titles.
- Any field you type into the app.
- An IP-derived profile or any identifier tied to your name or email.
Telemetry — both off by default
In Settings → Privacy there are two independent toggles. Both ship off:
Crash reports
When on, Scratch sends a crash payload if it hits an uncaught exception. The toggle takes effect the next time you open Scratch. The payload contains:
- Error name (e.g.
TypeError). - Truncated message (capped at 256 characters).
- Stack trace.
- Scratch version, macOS version, and CPU architecture.
- An anonymous installation UUID, generated the first time telemetry is enabled and stored locally.
That’s the entire payload. No extra fields, no environment variables, no buffer content.
Anonymous usage data
When on, Scratch sends a small set of named events that describe which features get used. Today the main one is app_launched. Each event carries the same Scratch version, macOS version, architecture, and anonymous installation UUID — no event-specific properties contain user input.
Where it goes
Both crash reports and usage data are sent to PostHog (US cloud), our analytics provider. The anonymous UUID is the only identifier. PostHog’s privacy policy governs their handling.
Update checks
When Settings → General → Check for updates is on (the default), Scratch checks GitHub Releases for new versions about thirty seconds after launch and every four hours after that. GitHub receives standard HTTP request metadata — IP address, user-agent, the version of Scratch making the request. Blade Instruments doesn’t see these requests. Turn the toggle off to stop background checks. You can still pull a check on demand from Help → Check for updates….
Turning it all off
If you want Scratch to make zero outbound network calls, leave both Settings → Privacy toggles off (the default) and turn off Settings → General → Check for updates. There is nothing else to configure.
Where the local data lives
- Buffers:
~/Library/Application Support/Scratch/buffers/by default, or the folder you set in Settings → General → Buffer location - Settings:
~/Library/Application Support/Scratch/settings.json - Trial countdown:
~/Library/Application Support/Scratch/trial.json - License:
~/Library/Application Support/Scratch/license.json(only after activation) - Anonymous installation UUID:
~/Library/Application Support/Scratch/analytics-id(only after telemetry is enabled at least once)
Delete any of these to reset that piece of state.