Status
| Surface | Status | Notes |
|---|---|---|
| iOS app and keyboard | Native transcription wired | Records and transcribes locally with AVAudioEngine plus WhisperKit/Core ML. The keyboard extension provides modes, punctuation, haptics, and setup verification. |
| Android app and keyboard | Native transcription wired | Records local WAV audio, transcribes with sherpa-onnx model packs, and verifies the native input method in a real text field. |
First-run flow
First launch shows setup before the tab shell:- Welcome
- Recommended model install
- Microphone permission
- Keyboard setup and practice
- Finish
Architecture
Flutter owns the app shell, local model-pack management, local history, modes, settings, clipboard output, and deterministic cleanup. Native iOS uses:ios/Runner/LocalSpeechBridge.swiftfor microphone recording and WhisperKit/Core ML.ios/LocalWhisperKeyboard/for mode buttons, punctuation, haptics, and Verify.
MainActivity.ktfor microphone status, 16 kHz mono WAV recording, app settings, input-method settings, keyboard status, and preference sync.LocalWhisperInputMethodService.ktfor Verify, mode markers, punctuation, Space, New line, Delete, settings, and haptics.AndroidManifest.xmlfor microphone, haptics, app identity, launcher identity, and input-method service.lib/src/sherpa_speech_service.dartfor Flutter-side sherpa-onnx transcription in a background isolate.
History and keyboard control
History stays on the device. The History tab shows saved entry count, total recorded duration, and approximate saved-history size. You can export history as Markdown to the clipboard, delete one transcript, or clear all history after confirmation. The Models tab shows installed pack count and model storage. Installed packs can be removed from the device when you no longer need them. The iOS keyboard reads haptics and quick-insert settings from the shared app group. The Android keyboard reads the same settings from setup preferences. Turning off quick insert keeps Verify, Space, New line, and Delete available while hiding mode and punctuation shortcuts.Model packs
| Pack | Approx size | Notes |
|---|---|---|
| Parakeet-TDT v3 INT8 ONNX | 640 MB | Default Android local ASR pack through sherpa-onnx. |
| Qwen3-ASR 0.6B INT8 ONNX | 940 MB | Android multilingual ASR pack through sherpa-onnx. |
| Qwen3-ASR MLX | 3.8 GB | Desktop and iOS-family local ASR pack. |
| Parakeet-TDT v3 MLX | 2.3 GB | Desktop and iOS-family local ASR pack. |
| Kokoro-82M TTS | 371 MB | Local text-to-speech model. |
| WhisperKit Large v3 | 550 MB | Wired iOS Core ML folder. |
Android notes
Android debug QA can seed the recommended pack and interaction data:Checks
Run fromsrc/flutter/local_whisper: