Privacy
Privacy Policy
Note: This is a convenience translation. The German version is legally binding.
The Dictation app is fully local: your speech, transcripts, and history never leave your device — no cloud backend, no telemetry. This website (dictation.stegner.pro) additionally uses an optional, consent-based audience measurement that only runs after you agree in the banner (details below).
Processing happens locally in a runtime started by the app:
| Runtime | Purpose | Data flow |
|---|---|---|
| Bundled local MLX runtime | Speech-to-text (local model) | Audio stays on your device |
| Bundled local MLX runtime | Text cleanup (local model) | Text stays on your device |
dictation.stegner.pro/appcast.xml | Sparkle update check | HTTP request only, no usage data |
What data is processed?
1. Microphone audio
- Purpose: Transcribing your spoken words.
- Storage: Temp file in
NSTemporaryDirectory(). Deleted immediately after successful transcription or when you cancel. - Transmission: None. The app hands audio files directly to the local runtime on the same Mac. Never leaves your device.
- Permission:
NSMicrophoneUsageDescription(TCC prompt on first launch).
2. History
- Purpose: Your last 50 dictations, for re-copying and search.
- Storage:
~/Library/Application Support/Dictation/history.sqlite(local, not synced). - Content: Raw transcript, cleaned-up text, detected language, timestamp.
- Control: Can be turned off in Settings — existing entries are then deleted. A manual delete button is available.
3. Personal dictionary
- Purpose: Spelling proper names, places, and technical terms correctly (e.g. Kretzschmar, Oer-Erkenschwick).
- Storage:
~/Library/Application Support/Dictation/dictionary.json. - Content: Terms you enter yourself.
- Transmission: Passed to the local models as an initial prompt; never leaves your device.
4. Snippets
- Purpose: Trigger phrases for text expansion.
- Storage:
~/Library/Application Support/Dictation/snippets.json. - Transmission: None.
5. Update check (Sparkle)
- Purpose: Checking whether a new app version is available.
- Endpoint:
https://dictation.stegner.pro/appcast.xml(static XML on a private server). - Data transmitted: Standard HTTP request including user agent (
Dictation/<version> Sparkle/<version>). No device IDs, no telemetry, no usage data. - Hosting: Our own NGINX server. It writes standard web server logs (IP, timestamp, user agent) for operational purposes. These logs are not analyzed and are rotated after 30 days.
- Control: The update check can be turned off in Settings.
6. Permissions
- Microphone (TCC): Required — for audio recording.
- Accessibility: Required — for the global hotkey and pasting into other apps via Cmd+V.
- Apple Events: Requested on the first Cmd+V paste (only for the synthetic keystroke).
Website analytics (with your consent only)
This website can recognize returning visits to get a rough picture of reach and usage (e.g. number of unique visitors, pages viewed, app downloads). This happens only with your active consent via the consent banner. Without your consent, nothing is collected.
- How: After you agree, your browser computes a pseudonymous recognition value (“fingerprint”) from device and browser characteristics (including user agent, language, screen, time zone, canvas and WebGL signatures) and transmits it to the server. Returning visits are recognized via that same value.
- Legal basis: Your consent under Sec. 25 (1) of the German TDDDG and Art. 6 (1) (a) GDPR.
- What is stored: The recognition value, the page viewed, timestamp, user agent, and the truncated IP address (last octet masked to 0). No names, no full IP address.
- Retention: Server logs are automatically rotated and deleted after 30 days at the latest.
- No sharing: The data stays on our own server (dictation.stegner.pro). No transfer to third parties, no ad networks, no profiling beyond this website.
- Withdrawal: You can withdraw your consent at any time with effect for the future — via reset consent (shows the banner again) or by deleting this website’s data in your browser.
The app itself does not take part in this measurement — as ever, it sends no usage data and works entirely locally.
What the app does not do
- No cloud transfer of audio or text.
- No analytics, no tracking, no crash reporting to external services.
- No ads.
- No in-app purchases.
- No account sign-in required.
- No contacts, calendars, location data, or other TCC-protected data.
Third-party libraries
- Sparkle 2.x (MIT license) — auto-update framework. Talks exclusively to
dictation.stegner.pro/appcast.xml. Source code: github.com/sparkle-project/Sparkle
The locally used ML models (speech-to-text and text cleanup) run via MLX in a bundled local runtime started by the app. The model weights are not part of the app and are stored under ~/Library/Application Support/Dictation/Models.
Retention and deletion
- Audio: Deleted immediately after transcription.
- History, dictionary, snippets: Kept until you delete them manually (button in Settings) or uninstall the app.
- Uninstalling the app: Removes the app. The folder
~/Library/Application Support/Dictation/remains — you can remove it manually.
Changes
Changes to this privacy policy are documented per app version (changelog) and published at dictation.stegner.pro/privacy.html.
Contact
For questions or deletion requests: matthias@stegner.pro