Package Exports
- react-native-speech-module
- react-native-speech-module/src/index.ts
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-native-speech-module) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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.
react-native-speech-module
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+).
Installation
npm install github:Muhammet-Duran/react-native-speech-moduleAndroid
No extra steps. Autolinking handles everything.
iOS
cd ios && pod installThen in Xcode, add SpeechModule.swift and SpeechModuleBridge.m to your target.
Permissions
Android
Add to AndroidManifest.xml (auto-merged via the package manifest):
<uses-permission android:name="android.permission.RECORD_AUDIO" />iOS
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>Usage
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>
</>
);
};API
useVoice(locale?: string)
| 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 |
voiceService
Low-level bridge. Use useVoice instead unless you need custom orchestration.
requestMicrophonePermission()
Requests Android microphone permission. iOS is handled automatically.
How it works
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
License
MIT