A cross-platform React Native module for speech recognition and voice interaction, supporting both Android and iOS. Easily integrate voice commands and speech-to-text features into your React Native apps.
Custom native speech-to-text module for React Native.
No third-party SDK — uses Android SpeechRecognizer and iOS SFSpeechRecognizer directly.
Compatible with React Native New Architecture (0.82+).
npm install github:Muhammet-Duran/react-native-speech-moduleNo extra steps. Autolinking handles everything.
cd ios && pod installThen in Xcode, add SpeechModule.swift and SpeechModuleBridge.m to your target.
Add to AndroidManifest.xml (auto-merged via the package manifest):
<uses-permission android:name="android.permission.RECORD_AUDIO" />Add to Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required for voice input.</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>Speech recognition is required to convert voice to text.</string>import { Pressable, Text, TextInput } from "react-native";
import { useVoice } from "react-native-speech-module";
const MyScreen = () => {
const { status, displayedText, toggleListening, onTextChange } =
useVoice("tr-TR");
return (
<>
<TextInput value={displayedText} onChangeText={onTextChange} />
<Pressable
onPress={toggleListening}
style={{
padding: 12,
backgroundColor: "#007AFF",
borderRadius: 6,
alignItems: "center",
marginTop: 8,
}}
>
<Text style={{ color: "white", fontWeight: "bold" }}>
{status === "listening" ? "Stop" : "Speak"}
</Text>
</Pressable>
</>
);
};| Return value | Type | Description |
|---|---|---|
status |
VoiceStatus |
idle / listening / processing / typing / done |
displayedText |
string |
Transcribed text (animated) |
isListening |
boolean |
Shorthand for status === 'listening' |
error |
string | null |
Last error message |
toggleListening |
() => Promise<void> |
Start / stop listening |
onTextChange |
(text: string) => void |
Manual text edit handler |
Low-level bridge. Use useVoice instead unless you need custom orchestration.
Requests Android microphone permission. iOS is handled automatically.
toggleListening→SpeechModule.startListening(locale)- Android
SpeechRecognizer/ iOSSFSpeechRecognizerstreams audio - Partial results fire
onSpeechPartialResults→ live preview in input - Final result fires
onSpeechResults→ silence detection triggers commit onSpeechEnd→ typing animation starts, text revealed character by character- A 1.2s fallback timer ensures text appears even if
onSpeechEndis delayed
MIT