Security & data handling
For Dictera 0.8.1 · This page is written to be forwarded. If someone has to approve Dictera before you can install it, this is the document for them.
The short version: speech recognition and the built-in AI model run on your Mac. Dictera has no account system, no analytics SDK, and no telemetry of any kind. Left on its defaults it contacts four hosts, three of which you trigger yourself. The exception is deliberate and opt-in: if you connect a cloud AI provider or the Claude Code engine, the text you process goes to that provider under your own account.
1. Everything that leaves the Mac
This is the complete list. There is no fifth destination on default settings.
| Destination | What is sent | When | Triggered by |
|---|---|---|---|
| Our licensing service Google Cloud, EU region |
A SHA-256 hash of a hardware identifier, your license key, and an activation name that defaults to your Mac's name - which often contains a person's name. | On activation, then re-validated on a jittered timer roughly once a day. | The app, on a schedule |
| Hugging Face | Nothing but the request itself; you receive model weights. They see standard technical data such as your IP address. | Only while a model is downloading. | You, by choosing a model |
| dictera.app | Nothing but the request. Returns the update feed. | Update checks, on Sparkle's schedule. | The app, on a schedule |
| Lemon Squeezy | Whatever you enter at checkout. We never receive full card details. | Only when you buy. | You |
| Your chosen AI provider opt-in, off by default |
The text being processed. For the AI Assistant that includes the transcript window and any screenshots you captured, sent on each pass. | Every request, once configured. | You, by configuring it |
| Anthropic opt-in, off by default |
Via the Claude Code engine: your conversation and the contents of files it reads in the folder you nominated. Signed in with your own Claude account. | Every request, once configured. | You, by configuring it |
Audio is never uploaded, to anyone, ever. It is transcribed in real time and never written to disk as a recording - not by the dictation path and not by the AI Assistant. What can be sent to a remote model is text, and only if you set one up.
1.1 What is not there
- No analytics or telemetry. No Google Analytics, Firebase Analytics, Crashlytics, Sentry, PostHog, Mixpanel or Amplitude. Not disabled by default - not present in the binary.
- No account system. No signup, no email, no password, no profile.
- No crash or usage reporting. If Dictera crashes, we don't hear about it.
- Three third-party dependencies in total, all open source: the speech runtime, the update framework, and the local model runtime.
2. What is stored, and where
Everything is a plain file in ~/Library/Application Support/Dictera/. Nothing
is synced, and deleting the folder deletes all of it.
| File | Contents | Controls |
|---|---|---|
history.json | Your transcriptions | Retention period, export, clear all, or turn history off |
stats.json | Word and session counts | Can be switched off |
vocabulary.json | Your custom replacements | Edited in Settings |
assistant-sessions.json | Assistant transcripts, answers and notes | Most recent 50 kept; searchable, exportable, deletable; can be switched off entirely |
assistant-screenshots/ | One JPEG per screen capture you took | Capped at 250 MB, oldest removed first; deleted with the session |
These files are not encrypted at rest beyond whatever FileVault provides. If that matters for your threat model, turn assistant history off - with it off, nothing is written.
3. Credentials
- API keys for any provider you configure are stored in the macOS Keychain, never in preferences or a plain file.
- They are marked
kSecAttrAccessibleAfterFirstUnlock, so they are unavailable until the Mac has been unlocked once after boot. - Claude Code uses your existing Claude sign-in. Dictera never sees or stores those credentials.
- There is no Dictera password to steal, because there is no Dictera account.
4. A guarantee worth reading twice
To place dictated text correctly, Dictera sometimes needs to look at the characters immediately around your cursor - which means looking at a fragment of whatever document you have open. That fragment is never sent to a remote model. When the decision needs a model at all, the app will only ask the built-in on-device model or a server on loopback; if your engine is a cloud provider, Dictera falls back to a local heuristic instead of sending your document anywhere.
This is a design constraint in the code, not a setting you have to find.
5. Permissions, and why each is needed
| Permission | Needed for | Optional? |
|---|---|---|
| Microphone | Dictation, and your side of a call | Required |
| Accessibility | Typing text into other apps, and reading a selection you asked it to fix | Required for dictation |
| Audio recording | Capturing the other participants on a call, via a Core Audio process tap | Only for the AI Assistant's listening modes |
| Screen recording | The screenshot button in the assistant panel | Optional - meetings do not need it |
6. Distribution and integrity
- Signed with an Apple Developer ID and notarized by Apple.
- Hardened runtime enabled, with a timestamped signature.
- Updates are delivered over HTTPS and verified with an EdDSA signature before installation - a compromised download cannot install.
- The app sandbox is deliberately off. Dictation requires global keyboard event taps and synthesized keystrokes, which a sandboxed app cannot do. That is also why Dictera is not on the Mac App Store. The entitlements file grants exactly one capability: audio input.
7. Verify it yourself
Don't take the above on trust - it takes about a minute to check.
- Watch the connections. With Dictera running, run
lsof -i -P | grep -i dicterain Terminal. Dictate, translate, take meeting notes. On default settings you will see nothing beyond an occasional licence or update check. - Block it entirely. Turn off Wi-Fi once your models are downloaded. Dictation, cleanup, translation, text correction and on-device meeting notes all keep working. A license keeps working offline for 14 days.
- Use a firewall. Little Snitch or LuLu will show you every outbound connection attempt and let you deny the ones you don't want. The list in section 1 is what you should see.
- Check the signature.
codesign -dv --verbose=4 /Applications/Dictera.appandspctl -a -vv /Applications/Dictera.app.
Any product can claim it doesn't upload your data. Very few can be checked in a minute with tools you already have.
8. What we can and cannot see
We cannot read your transcriptions, your meeting notes, your history or your screenshots. They are not on our servers, so there is nothing for us to hand over, lose, or be breached out of. What we hold is what's needed to sell and validate a licence: the device hash, the licence key and status, and the email address attached to the purchase. That is described in full in the Privacy Policy.
9. Questions we're happy to answer
If your security team needs something this page doesn't cover - a specific control, a questionnaire, a data-processing agreement - write to info@dictera.app and we'll answer directly.