# whisperIME: an offline Whisper keyboard for Android

> whisperIME turns OpenAI's Whisper speech models into an Android input method, a system voice input service and an intent target. It runs offline after a one-time model download, and the README warns it will stop working on certified Android devices in 2026/2027.

**woheller69/whisperIME** — Android Input Method Editor (IME) based on Whisper

- Repository: https://github.com/woheller69/whisperIME
- Stars: 643 · Forks: 42
- Language: Java
- License: MIT
- Published: 2026-09-17 · Updated: 2026-09-17 · Language: en
- Canonical page: https://hysenlabs.com/projects/woheller69-whisperime

## What whisperIME solves, and for whom

Most Android voice typing routes audio through a cloud service. whisperIME does not. It is an input method editor built on the Whisper speech recognition engine, packaged so that the recognition runs on the phone itself. The README states that internet permission is needed only for the initial model download; after that, voice recognition works entirely offline.

The app serves three roles at once. It is a standalone app that can also translate any supported language to English. It is an IME, so it can be selected as a keyboard and invoked from a microphone button in another keyboard such as HeliBoard. And it registers as a system-wide voice input through Android's RecognitionService, plus it answers RecognizerIntent.ACTION_RECOGNIZE_SPEECH calls. That last part matters for developers: any app that fires the standard speech recognizer intent can be pointed at whisperIME instead of a cloud recognizer.

The audience is narrow but real. People who dictate messages in languages they do not want sent to a server, and developers who want an on-device recognizer behind the standard Android speech APIs, are the two groups this fits.

## How the offline pipeline is put together

The repository is a Java Android project with a single app module. The recognition core is not written from scratch: the README credits the Whisper-Android project by vilassn, OpenAI's Whisper, Android VAD by gkonovalov, and Opencc4j for Chinese conversions. The models themselves are TFLite conversions hosted on Hugging Face under DocWolle/whisper_tflite_models, and the app pulls them down on first launch.

Android VAD, voice activity detection, is the piece that decides when speech starts and stops, which is why the README tells you to pause briefly before speaking and to press and hold the button while talking. The recording window is capped at 30 seconds per utterance. That is a hard constraint of the pipeline rather than a setting you can raise in the UI.

Two models ship. One is compact and English-only, chosen for speed. The other is multilingual and, in the README's words, much slower. Whichever you pick is applied consistently across all uses, including when the app runs as an IME. There is no per-app model switching. The recognition service class is org.woheller69.whisper/com.whispertflite.WhisperRecognitionService, which is the component Android binds to when the app acts as system voice input.

## Installing whisperIME and dictating your first sentence

The README links two distribution points: F-Droid and OpenAPK. There is no Play Store listing and no build-from-source instructions in the README, so the practical route is the F-Droid package. The application ID is org.woheller69.whisper.

If you prefer to fetch the APK directly from F-Droid's package page, the identifier is what you search for:

```bash
# F-Droid package id
org.woheller69.whisper
```

On first launch the app downloads roughly 435 MB of Whisper TFLite models. This is the only point at which it needs network access, so do it on Wi-Fi. When the download finishes, pick a model in the app: the English-only one for speed, the multilingual one if you dictate in other languages.

To use it as a keyboard, enable it in Android's input method settings and switch to it. To use it as system voice input instead, the README points to a separate settings activity reached through Android settings, under System > Languages > Speech > Voice Input. Select the app there and use its settings button to choose the model for voice input. If whisperIME does not appear in that list, or the list only shows the hard-coded entries from vendors like Google and Samsung, the README gives an adb command to set it directly:

```bash
adb shell settings put secure voice_recognition_service org.woheller69.whisper/com.whispertflite.WhisperRecognitionService
```

USB debugging has to be enabled first. Once the service is bound, hold the button while you speak, pause briefly before starting, and keep each utterance under 30 seconds.

## The 30-second ceiling and the multilingual trade-off

Two limitations shape daily use. The first is the recording limit. Thirty seconds is enough for a message or a search query, but it is not enough for dictating a page of notes. You will be stopping and restarting, and every restart costs you the pause and the button press.

The second is the model choice, which is really a language choice. The fast model handles English only. If you need anything else, you take the multilingual model and accept that the README calls it much slower. Because the selection is global, a bilingual user cannot keep the fast English model for English and switch to the multilingual one for another language without changing the setting each time. That is a design decision, not an oversight, but it is the kind of thing that wears on you after a week.

There is also a platform-level expiry. The README carries a notice that Google will require developers to submit personal identity details for apps on certified Android devices starting in 2026/2027, and that because the developers do not agree to this, the app will no longer work on certified Android devices after that time. That is an unusual thing to find at the top of a README, and it is the single most important fact for anyone planning to standardize on this app.

## Where whisperIME sits next to HeliBoard and gptAssist

The natural comparison is with the keyboard you already use. HeliBoard is a general-purpose Android keyboard, and the README describes whisperIME as something that can be activated from HeliBoard's microphone button. That is the intended pairing: HeliBoard for typing, whisperIME for the voice layer. Choosing whisperIME instead of a cloud recognizer is the actual decision, and it is a privacy decision as much as a technical one.

The same author publishes gptAssist, listed in the README's other-apps table. That is a separate project aimed at a different job, so it is not a substitute for whisperIME. The more useful comparison for a developer is between whisperIME and the upstream Whisper-Android project it is based on. Whisper-Android provides the recognition plumbing; whisperIME wraps it as an IME, a RecognitionService and an intent handler, which is the part that makes it usable system-wide rather than inside one app.

## Licence terms and what upgrades cost you

whisperIME is MIT licensed, copyright woheller69. The dependencies are a mix: Whisper-Android, OpenAI Whisper, Android VAD and the Hugging Face TFLite model repository are all MIT, while Opencc4j, used for Chinese conversions, is Apache-2.0. MIT and Apache-2.0 both permit commercial use and modification; Apache-2.0 adds an explicit patent grant and requires you to preserve notices. If you fork the app, keep the upstream notices in place. This is a description of the licences named in the README, not legal advice.

Upgrade cost is low but not zero. Releases are infrequent: V3.5 in August 2025, V3.6 in January 2026, V3.7 in August 2026. The last push to the repository was on 2026-08-30, so the project is not dormant. Because distribution runs through F-Droid, updates arrive through that client rather than a store. The expensive part of upgrading is not the app, it is the model download: if a release changes the model set, you may be pulling hundreds of megabytes again over Wi-Fi.

## Conclusion

whisperIME fits Android users who type by voice, want transcription to stay on the device, and are willing to accept a 30-second recording limit and a slow multilingual model. It is the wrong choice for anyone who needs long dictation, iOS, or a keyboard that will keep working on certified Android devices after the 2026/2027 developer-identity requirement takes effect. Before adopting it, confirm that the app appears in System > Languages > Speech > Voice Input on your device, and check whether the adb workaround for a missing voice input entry applies to your build.

## FAQ

### What is the Whisper app used for?

whisperIME is an Android input method and voice input service built on the Whisper engine. It can be used as a standalone app that translates supported languages to English, as an IME, and as system-wide voice input through Android's RecognitionService.

### Does Whisper automatically detect language?

The README does not describe automatic language detection. It presents a choice between a compact English-only model and a multilingual model, and the model you select is applied across all uses, including when the app runs as an IME.

### Does Whisper use AI?

Yes. The app is based on the Whisper speech recognition engine, and it downloads Whisper TFLite models from Hugging Face on first launch. Android VAD is used to detect speech, and Opencc4j handles Chinese conversions.

### Why do people use Whisper?

The README states that after the initial model download, voice recognition works entirely offline, and that the download is the only instance where internet permission is required. That offline operation is the main reason to choose it over a cloud recognizer.

## Sources

- [Issues](https://github.com/woheller69/whisperIME/issues)
- [License: MIT](https://github.com/woheller69/whisperIME/blob/master/LICENSE)
- [README](https://github.com/woheller69/whisperIME/blob/master/README.md)
- [Releases](https://github.com/woheller69/whisperIME/releases)
- [woheller69/whisperIME on GitHub](https://github.com/woheller69/whisperIME)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/woheller69-whisperime
