Speech to Text in Expo in 2026: SFSpeechRecognizer vs SFSpeechAnalyzer
A practical guide for Expo developers choosing between expo-speech-recognition and expo-speech-transcriber.
If you've tried to add real-time speech recognition to an Expo app, you've probably stumbled across two packages: expo-speech-recognition and expo-speech-transcriber. They sound nearly identical, but they are not! The big difference comes down to which native Apple API each one wraps, which has consequences for accuracy and platform coverage.
Let’s break it down.
Before comparing the packages, you need to understand what’s happening under the hood on iOS. Apple ships two distinct speech frameworks, SFSpeechRecognizer and SFSpeechAnalyzer. What are they?
SFSpeechRecognizer: the classic, supported in most versions
SFSpeechRecognizer has been around since iOS 10. It’s the same engine that powers Siri dictation. By default it sends audio to Apple’s servers for transcription, though an on-device mode was added in iOS 13. It supports both live microphone streaming and file-based recognition, and returns a rolling “best guess” transcript that gets revised as the user keeps speaking.
SFSpeechAnalyzer: the new one
SFSpeechAnalyzer is a newer, higher-level API introduced in iOS 17. It’s Apple’s modern take on speech analysis and was designed for more structured, analytics-focused use cases. It offers better integration with the system and can return richer metadata alongside the transcription but it comes with stricter OS requirements.
Now let’s talk about the expo packages.
expo-speech-recognition
It wraps SFSpeechRecognizer on iOS and uses the SpeechRecognition Web API on Android (via the android.speech.SpeechRecognizer class) and on Web. Platform support:
iOS: iOS 13+ recommended for on-device mode
Android: Requires Google app / Speech services
Web: Chromium-based browsers only
How it works
You get a streaming experience where partial results come in as the user speaks. The API design closely mirrors the browser’s SpeechRecognition interface, so if you’ve worked with Web Speech API before, this will feel familiar.
Code example (simplified):
import { useSpeechRecognitionEvent, ExpoSpeechRecognitionModule } from "expo-speech-recognition";
ExpoSpeechRecognitionModule.start({ lang: "en-US", interimResults: true });
useSpeechRecognitionEvent("result", (event) => {
console.log(event.results[0]?.transcript); // live partial results
});Result quality
Decent. On iOS, when Apple’s cloud is involved, accuracy is solid for common vocabulary. On Android, quality heavily depends on the device and whether Google’s speech service is up to date, which can vary noticeably across manufacturers. Web support is Chromium-only, so Firefox and Safari users are out of luck.
expo-speech-transcriber
It wraps SFSpeechAnalyzer, so it’s only available for iOS 17+. This is the biggest trade off; if your app needs to run on Android, web, or iOS below iOS 17, this package won't work.
How it works
SFSpeechAnalyzer takes a more structured approach. Rather than giving you a raw rolling transcript, it returns segmented results with higher confidence metadata. The API is cleaner and the results tend to be more stable, less “jumping around” while the user speaks.
Code example (simplified):
import * as SpeechTranscriber from "expo-speech-transcriber";
// Use the hook for realtime updates
const { text, isFinal, error, isRecording } =
SpeechTranscriber.useRealTimeTranscription();
// Start transcription
await SpeechTranscriber.recordRealTimeAndTranscribe();
// Stop when done
SpeechTranscriber.stopListening();Result quality
Noticeably better on iOS 17+ devices. The transcription is more accurate out of the box, punctuation handling is improved, and the metadata you get alongside the transcript is richer. If your entire user base is on modern iPhones, this is the better experience.
Which one should you to use?
Use expo-speech-recognition if your app targets Android, Web, and iOS versions below 17. In short, use this when you want the largest possible device coverage. The trade-off could be quality of the result, but it’s something you will need to test based on your use case.
Use expo-speech-transcriber if your app is iOS-only, only need to support iOS 17+, and you want to optimize for better transcription result. This can happen if you're building an app for enterprise iPhone users on managed devices, which you have some knowledge or even control on which version the devices are using.
As of today (March 2026), both packages are actively maintained and easy to set up with Expo managed workflow. The “right” answer almost always comes down to your platform requirements first, then the accuracy. Hope it helps!


