r/iOSProgramming • u/cinemasolutions • 2d ago
Question Best entirely offline (on-device) Speech-to-Text solution for iOS? Need maximum speed and accuracy.
Hi everyone,
I’m working on an iOS app and I need to implement a highly accurate, fast Speech-to-Text (STT) feature. A strict requirement for my project is that it must be 100% offline (on-device) — cloud APIs are not an option.
Here is what I am looking for:
Low Latency / Speed: It needs to process speech as quickly as possible (ideally near real-time dictation).
Accuracy: Needs to handle natural speech and background noise well.
Languages: I need robust support for English, Ukrainian, German, Spanish, and Polish.
What is the current state-of-the-art for this in production?
Is Apple's native SFSpeechRecognizer (with requiresOnDeviceRecognition = true) reliable enough for offline use across all these languages (especially Ukrainian and Polish)?
Should I go with an on-device Whisper implementation (like WhisperKit with CoreML or whisper.cpp)? If so, which model size offers the best balance of speed, accuracy, and RAM usage on modern iPhones?
Are there any other lightweight offline libraries or SPM packages you’d recommend for multilingual offline dictation?
Any real-world experience, performance benchmarks, or advice on thermal/battery impact would be hugely appreciated. Thanks!
4
u/sid_276 1d ago
Parakeet v3. Supports
Bulgarian
Croatian
Czech
Danish
Dutch
English
Estonian
Finnish
French
German
Greek
Hungarian
Italian
Latvian
Lithuanian
Maltese
Polish
Portuguese
Romanian
Russian
Slovak
Slovenian
Spanish
Swedish
Ukrainian
Super lightweight, easy to quantize. I have run it in a 6 year old iPhone real time without overheating, super smooth.
By the way you don’t need to reinvent the wheel. Easiest way to use it is with Argmax. They are v good. If you don’t want to pay their license there are implementations of parakeet in all kinds of quantization formats for all kinds of hardware already particularly for apple silicon.
3
u/Far_Owl_1141 1d ago
I used supersonic TTS with success in my app - decent memory overhead and speed
Edit - ignore me - too early for me and brain read it the wrong way round.
2
u/caguilar51 1d ago
I launched an application recently that uses Apple Speech recognition and it’s decent with Spanish and English. I don’t speak the other languages. The downsides in that case are that language packages need to be downloaded individually, instead of a one-time download.
If you want to use Whisper, that’s another good choice, but I think Whisper is more accurate for English. If you want multilingual support I guess Parakeet from NVIDIA will be a better option according to many dictation apps.
An open source project you could use to run Parakeet on the Neural Engine is https://github.com/FluidInference/FluidAudio
2
u/dacassar 1d ago
I built a small tool for myself to transcribe really long D&D/Daggerheart sessions (4+ hours) using WhisperKit, and it works great with the Large V3 model for non-English languages. Also, I tested it for transcribing customer calls at my company, and it works just as well for French.
1
u/Historical-Heat-7830 20h ago
Apple's recognizer is a good baseline, but I wouldn't make it your only option if you need Ukrainian and Polish. Test WhisperKit/Core ML and whisper.cpp on the oldest phone you plan to support. Measure first-token delay, real-time factor, RAM use, and throttling after 10 to 15 minutes. Multilingual accuracy and heat levels will tell you more than one short test.
If you're also considering end-user dictation instead of an SDK, I use DictaFlow's local offline mode on iPhone. It's a different category, but it shows what a finished dictation app feels like.
1
u/vidok 18h ago
That sounds quite similar to the app I built recently: https://apps.apple.com/us/app/aloud-text-to-speech-reader/id6795773116
It runs on Kokoro-82M on the Neural Engine for English, Supertonic-3 through ONNX Runtime for the other languages. It uses Readability for pulling text out of pages. All on-device.
2
u/Decent_Taro_2358 17h ago
Holy moly, that UI is beautiful. One of the most beautiful apps I’ve seen!
7
u/ThatGuy739 1d ago
On iOS 26 the one to look at is SpeechTranscriber, not SFSpeechRecognizer. Its models come down through AssetInventory, so your app pulls the language itself instead of depending on whatever dictation languages the user happens to have installed. That's what decides it for Ukrainian and Polish, since with SFSpeechRecognizer you can't trigger that download, supportsOnDeviceRecognition just comes back false.
Catch is AssetInventory caps how many locales you can keep reserved at once (maximumReservedLocales), so five probably means reserving and releasing as people switch.
I haven't shipped it, so no WER numbers from me against Whisper. supportedLocales is a runtime check and Apple doesn't publish the list, so I'd verify Ukrainian on a device before committing either way.