Local Whisper splits runtime, UI, and mobile surfaces while keeping audio and text processing local.

macOS runtime

Python modules

Swift modules

Mobile architecture

Flutter owns app shell, onboarding, history, modes, model management, settings, clipboard flow, and deterministic text cleanup. Native iOS owns microphone recording, WhisperKit/Core ML, Apple SpeechTranscriber, and keyboard extension behavior. The Apple SpeechAnalyzer core is shared with the macOS helper. Native Android owns microphone permission/status, WAV recording, app and input-method settings intents, keyboard status, haptics, and input method behavior. Flutter-side sherpa-onnx handles Android transcription after native recording returns the local WAV path.

Long sessions and recovery

Recordings longer than five minutes use the chunked pipeline. Each VAD segment is transcribed, grammar-corrected, and persisted to ~/.whisper/current_session.jsonl before the next chunk runs. If a crash happens mid-session, completed chunks are recovered on next boot. The LaunchAgent uses KeepAlive={SuccessfulExit=false} with ThrottleInterval=10. Crashes restart. Clean stops do not hot-loop.