Don’t take my word for it
Last checked against the shipping build: 21 August 2026
The claim: your speech is turned into text by a model running on your own Mac. The audio is never written to disk and never sent anywhere. The app makes exactly three kinds of network connection, all listed below, and none of them carry anything you said.
Every privacy page on the internet says something like that. This one tries to be checkable instead of reassuring, because a claim you can test in thirty seconds is worth more than a paragraph you have to trust.
Four ways to check it yourself
1. Turn the wifi off
The cheapest test and the most convincing one. Disconnect from the network entirely, then dictate. Same speed, same words. Nothing that depends on a server survives that.
2. Watch the network while you talk
Open Activity Monitor → Network, sort by “Sent Bytes”, and find Write On. Dictate a few paragraphs. The number does not move. Audio is roughly a megabyte a minute — if it were leaving, you would see it leave.
3. Read the hostnames out of the binary
Every URL the app can reach has to exist somewhere inside it. You can list them without any tooling beyond what macOS ships:
strings -a "/Applications/Write On.app/Contents/MacOS/Write On" \
| grep -oE "https://[a-z0-9.-]+" | sort -u
Three hosts come back. There is no fourth, and there is nowhere for one to hide.
4. Block it and see what breaks
Point Little Snitch, LuLu, or your firewall of choice at Write On and deny it everything. Dictation keeps working. The only things that stop are the update check and, if you have never run it before, the one-time model download — both listed below.
Every connection the app can make
| When | Host | What for |
|---|---|---|
| First launch, once | huggingface.co | Downloads the speech recognition files (about 450 MB) and caches them on your Mac. Never contacted again. |
| Periodically | write-on.app | Fetches appcast-v4.xml to ask whether a newer version exists. It sends nothing about you. Block it and the app carries on; you just update by hand. |
| When you click a link | write-on.app | Opens this website in your browser. That is a link, not a connection the app makes on its own. |
There is no analytics service and no crash reporter. Not in the build, and not in the source either — the project has no analytics dependency to disable. You can confirm the build the same way I do:
ls "/Applications/Write On.app/Contents/Frameworks"
# Sparkle.framework libswiftCompatibilitySpan.dylib
strings -a "/Applications/Write On.app/Contents/MacOS/Write On" \
| grep -ciE "posthog|sentry"
# 0
Sparkle is the open-source updater that fetches the appcast above. It is the only third-party framework in the bundle.
What ends up on your disk
Audio: nothing. The microphone feeds the recogniser in memory and the buffers are released as they are consumed. There is no code path in the app that writes an audio file.
Transcripts: encrypted. Your history is stored at ~/Library/Application Support/Write On/history.enc, encrypted with AES-256-GCM. The key is generated on your Mac and kept in the macOS Keychain — it is not derived from anything I know, and I have no copy of it. Open the file in a text editor and you will find noise.
Your license key: a signed token stored in your preferences. It is checked with a public key compiled into the app, on your machine, with no network call. That is why the app keeps working if this website disappears.
The app is signed and notarized
Which means Apple has checked the build for malware and the signature proves it has not been modified since I built it. Verify both:
codesign --verify --deep --strict --verbose=2 "/Applications/Write On.app"
spctl --assess --type execute --verbose "/Applications/Write On.app"
You should see Notarized Developer ID, and the signing authority should read Developer ID Application: RYAN FRANCIS ANSELMAN (6RR7VH6GZ5). If it says anything else, you did not get that copy from me — delete it.
Accuracy, measured
Write On uses NVIDIA’s Parakeet TDT v2 model, run on your Mac’s Neural Engine through CoreML. I benchmarked it against the on-device alternatives on the same machine rather than quoting anyone’s published numbers. Lower word error rate is better; real-time factor below 1.0 means faster than the audio it is transcribing.
| Engine | Word error rate | Real-time factor |
|---|---|---|
| Parakeet TDT v2 — what Write On ships | 1.17% | 0.025 |
| Parakeet TDT v3 | 2.35% | 0.024 |
| Whisper large-v3 turbo (632 MB) | 2.35% | 0.122 |
| Whisper base.en | 3.72% | 0.028 |
| Whisper tiny.en | 4.89% | 0.023 |
Read that table with its limits in mind, because they are real ones. It is 24 clips of LibriSpeech test-clean — audiobook narration read by trained voices in a quiet room, which is not what dictation sounds like. There is no cloud engine in it, so it tells you which local model to pick and says nothing about how Write On compares to a hosted service. And I ran it, on my machine, on the product I sell. Treat it as the reason v2 ships rather than v3, which is what it was actually for. The harness is scripts/stt-bench and I am happy to send it to anyone who wants to re-run it.
What this page does not claim
Write On has no compliance certification — no SOC 2, no ISO 27001, no HIPAA attestation. It is one person’s app. Running on your own machine is a genuinely different security posture from a certified cloud service, and it is better for some purposes and useless for others; it is not a substitute for paperwork your employer requires. If you need the certificate, you need a company that has one.
Something here wrong, or something you tested that does not match? Email support@write-on.app — a correction on this page is worth more to me than the sale.