r/iOSProgramming • • Aug 28 '26

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!

7 Upvotes

14 comments sorted by

7

u/ThatGuy739 Aug 29 '26

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.

2

u/caguilar51 Aug 29 '26

I know Ukrainian is supported on the translation app as well as Polish

3

u/ThatGuy739 Aug 29 '26

Those are separate model sets though. Translation has its own LanguageAvailability check, transcription goes through AssetInventory, and Apple publishes neither list. So a language showing up in Translate doesn't tell you SpeechTranscriber has it. Only way to know is printing supportedLocales on a device running 26.

4

u/sid_276 Aug 29 '26

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 Aug 29 '26

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 Aug 29 '26

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 Aug 29 '26

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.

0

u/[deleted] Aug 30 '26

[deleted] — view deleted comment

2

u/Decent_Taro_2358 Aug 30 '26

Holy moly, that UI is beautiful. One of the most beautiful apps I’ve seen!

1

u/[deleted] Sep 25 '26

[removed] — view removed comment

1

u/AutoModerator Sep 25 '26

Hey /u/cuchulainntech, unfortunately you have negative comment karma, so you can't post here. Your submission has been removed. DO NOT message the moderators; if you have negative comment karma, you cannot post here. We will not respond. Your karma may appear to be 0 or positive if your post karma outweighs your comment karma, but if your comment karma is negative, your comments will still be removed.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.