FrankenKeys dictates with the aerial off, and the honest label for that is narrower than the sentence. This page is the disclosure the Play listing points at, written before you find the asterisk.
The keyboard never records
FrankenKeys holds the RECORD_AUDIO permission because Android requires the calling app to hold it before a speech recogniser will listen on its behalf. The capture happens inside the recogniser service, a separate app in a separate process. The keyboard receives text: live partials while you speak, a final when you pause, and a ranked list of alternatives per segment so you can tap a word and pick the other reading. No audio buffer ever exists in the FrankenKeys process, and with no network permission there is nothing it could be sent with.
Android 12 and later: on-device, or nothing
Android 12 added SpeechRecognizer.createOnDeviceSpeechRecognizer, which returns an on-device recogniser or throws. FrankenKeys calls only that method on these versions. If the phone has no on-device recogniser, the microphone key reports "no offline recogniser" and stops. It never falls back to the ordinary recogniser here, because the ordinary one may use the network and that would defeat the feature.
Android 10 and 11: a request the system may ignore
FrankenKeys runs on Android 10 and up. On 10 and 11 the on-device factory does not exist, so the keyboard uses the standard recogniser with EXTRA_PREFER_OFFLINE set. Android's documentation for that flag: "Depending on the recognizer implementation, these values may have no effect."
So on those two versions, offline is a preference. If the system's recogniser ignores it, audio may go to whatever service the recogniser vendor runs. That is the system's network, on the system's permission. FrankenKeys holds no network permission on any version and cannot route anything itself. If that concerns you and you are on Android 10 or 11, do not use the microphone key; the keyboard is complete without it.
Two system downloads that are not the keyboard
Two network events can happen near FrankenKeys and are performed by Android, not by this app: the one-time download of the on-device AI model by Android's AICore service, and system emoji font updates. Neither passes through the keyboard and neither carries anything you typed. The privacy policy states the same.
What dictation does once the text arrives
- Keeps listening while you think. On Android 13 and later, where your phone's recogniser supports it, dictation runs as one continuous session and each phrase comes back as it is recognised, so there is no restart between phrases to lose words in. Everywhere else the pause that ends an utterance is yours to set, defaulting to 2.5 seconds, and the keyboard overlaps two recogniser sessions so the gap while one finalises is covered by the other; if the platform refuses the overlap, it falls back to plain restarts.
- Punctuation. On Android 13 and later, where the recogniser can do it, it adds punctuation and capitals itself. Spoken "period", "comma", "new paragraph", "question mark" and the rest are handled by the keyboard's own rules on every phone.
- The best reading, and your corrections. The recogniser returns several readings of each phrase; the keyboard picks the one that fits the words you actually use, and only switches on clear evidence. Fix a misheard word and it remembers the fix, but only if what you typed sounds like what it heard.
- Nothing lands until you send. With Hold it until you send on, which is the default, the field stays untouched while you talk. Tap send and the transcript is tidied on the phone and inserted in one edit with one undo. Each piece of the tidy-up is refused if it would move the text more than 35 percent, grow it more than 40 percent, change a number or drop words you said, and the keyboard's plain rules tidy is used instead. Turn Hold it until you send off and words land as you speak, with the clean-up offered as a chip rather than applied.
- Your own words. On Android 13 and later, the top words of your personal dictionary are passed to the recogniser as biasing strings, so names and jargon decode better. An incognito field never feeds that list.
- Language. The recogniser is told which of the thirty dictionary languages you are typing in. Whether an offline model for it exists on your phone is the system's business, and if the recogniser reports the language unavailable, dictation stops rather than silently using a different one.
What it is not
It is not Google's recogniser. On most phones Gboard gets a better one than the system exposes to third parties, because they ship together. I test accuracy on recorded speech, not on your phone, and would not publish a figure from that or from a single phone.
On-device required
Android 12+
Offline requested
Android 10, 11
Audio stored by keyboard
Never
Network permission
None
Documentation
- developer.android.com,
SpeechRecognizer:createOnDeviceSpeechRecognizerandisOnDeviceRecognitionAvailable, both added in API level 31. - developer.android.com,
RecognizerIntent.EXTRA_PREFER_OFFLINE, added in API level 23. - forgedev.studio/forgeboard/privacy: the policy's voice typing section.
- The longer account: Voice typing without a network, and where the audio goes.
The Play title says Offline Keyboard. The short description says "No internet permission", which is the precise claim, and this page is where the precise claim about voice lives.