---
description: Capacitor plugin to transcribe speech into text (also known as speech-to-text) with advanced features like silence detection, contextual strings, and more.
title: Capacitor Speech Recognition Plugin - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/speech-recognition.png
---

<!doctype html> 

[Skip to content ](#capacitor-speech-recognition-plugin) 

[🔐 Introducing the **Capacitor Vault** plugin — store secrets behind biometrics or a device passcode. ](/blog/announcing-the-capacitor-vault-plugin/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* Speech Recognition [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ iOS ](#ios)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Type Aliases ](#type-aliases)
* [ Enums ](#enums)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ Breaking Changes ](#breaking-changes)
* [ License ](#license)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ iOS ](#ios)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Type Aliases ](#type-aliases)
* [ Enums ](#enums)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ Breaking Changes ](#breaking-changes)
* [ License ](#license)

# Capacitor Speech Recognition Plugin[¶](#capacitor-speech-recognition-plugin "Permanent link")

Capacitor plugin to transcribe speech into text (also known as speech-to-text) with advanced features like silence detection, contextual strings, and more.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

The Capacitor Speech Recognition plugin is one of the most complete speech-to-text solutions for Capacitor apps. Here are some of the key features:

* 🖥️ **Cross-platform**: Supports Android, iOS and Web.
* 🌐 **Multiple Languages**: Supports many different languages.
* 🔑 **Permissions**: Check and request permissions for recording audio.
* 🔊 **Events**: Listen for events like `start`, `end`, `speechStart`, `speechEnd`, `error`, `partialResults`, and `results`.
* 🔇 **Silence Detection**: Automatically detects silence to stop the recording.
* 📊 **Silence Threshold**: Define what's considered "silence" for your recordings.
* 💬 **Contextual Strings**: Provide an array of phrases that should be recognized, even if they are not in the system vocabulary.
* 📱 **On-Device Recognition**: Force on-device-only speech recognition, query available on-device languages, and download language models.
* 🧠 **SpeechTranscriber**: Opt-in support for Apple's modern `SpeechTranscriber` API (iOS 26+) with fully on-device processing and no "Speech data will be sent to Apple" permission dialog.
* 🤝 **Compatibility**: Compatible with the [Audio Player](https://capawesome.io/docs/sdks/capacitor/audio-player/), [Audio Recorder](https://capawesome.io/docs/sdks/capacitor/audio-recorder/) and [Speech Synthesis](https://capawesome.io/docs/sdks/capacitor/speech-synthesis/) plugins.
* ⚔️ **Battle-Tested**: Used in more than 250 projects.
* 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.
* ⭐️ **Support**: Priority support from the Capawesome Team.
* ✨ **Handcrafted**: Built from the ground up with care and expertise, not forked or AI-generated.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Use Cases[¶](#use-cases "Permanent link")

The Speech Recognition plugin is typically used whenever an app needs to turn spoken words into text, for example:

* **Voice dictation**: Let users dictate messages, notes, or form inputs instead of typing, with live feedback via the `partialResult` event.
* **Voice commands**: Trigger actions in your app by recognizing spoken phrases, using contextual strings to reliably detect custom terms that are not in the system vocabulary.
* **Voice search**: Let users search your app hands-free by speaking their query instead of typing it.
* **Privacy-sensitive transcription**: Force on-device speech recognition so that no audio is sent to external servers.
* **Accessibility**: Offer users with limited mobility an alternative way to enter text.

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 8.x.x          | \>=8.x.x          | Active support |
| 7.x.x          | 7.x.x             | Deprecated     |
| 6.x.x          | 6.x.x             | Deprecated     |

## Guides[¶](#guides "Permanent link")

* [Exploring the Capacitor Speech Recognition API](https://capawesome.io/blog/exploring-the-capacitor-speech-recognition-api/)

## Installation[¶](#installation "Permanent link")

This plugin is only available to [Capawesome Insiders](https://capawesome.io/insiders/). First, make sure you have the Capawesome npm registry set up. You can do this by running the following commands:

`[](#%5F%5Fcodelineno-0-1)npm config set @capawesome-team:registry https://npm.registry.capawesome.io
[](#%5F%5Fcodelineno-0-2)npm config set //npm.registry.capawesome.io/:_authToken <YOUR_LICENSE_KEY>
`

**Attention**: Replace `<YOUR_LICENSE_KEY>` with the license key you received from Polar. If you don't have a license key yet, you can get one by becoming a [Capawesome Insider](https://capawesome.io/insiders/).

Next, you can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-1-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-2-1)Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome-team/capacitor-speech-recognition` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-3-1)npm install @capawesome-team/capacitor-speech-recognition
[](#%5F%5Fcodelineno-3-2)npx cap sync
`

### Android[¶](#android "Permanent link")

#### Proguard[¶](#proguard "Permanent link")

If you are using Proguard, you need to add the following rules to your `proguard-rules.pro` file:

`[](#%5F%5Fcodelineno-4-1)-keep class io.capawesome.capacitorjs.plugins.** { *; }
`

### iOS[¶](#ios "Permanent link")

#### Privacy Descriptions[¶](#privacy-descriptions "Permanent link")

Add the `NSSpeechRecognitionUsageDescription` and `NSMicrophoneUsageDescription` keys to the `ios/App/App/Info.plist` file, which tells the user why the app needs access to speech recognition and the microphone:

`[](#%5F%5Fcodelineno-5-1)<key>NSSpeechRecognitionUsageDescription</key>
[](#%5F%5Fcodelineno-5-2)<string>Speech recognition is used to transcribe speech into text.</string>
[](#%5F%5Fcodelineno-5-3)<key>NSMicrophoneUsageDescription</key>
[](#%5F%5Fcodelineno-5-4)<string>Microphone is used to record audio for speech recognition.</string>
`

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Usage[¶](#usage "Permanent link")

The following examples show how to check availability and permissions, start and stop listening, query the recognizer state and available languages, and handle recognition events.

### Check if speech recognition is available[¶](#check-if-speech-recognition-is-available "Permanent link")

Check whether the speech recognizer is available on the device before offering the feature to the user:

`[](#%5F%5Fcodelineno-6-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)const isAvailable = async () => {
[](#%5F%5Fcodelineno-6-4)  const { isAvailable } = await SpeechRecognition.isAvailable();
[](#%5F%5Fcodelineno-6-5)  return isAvailable;
[](#%5F%5Fcodelineno-6-6)};
`

### Check and request permissions[¶](#check-and-request-permissions "Permanent link")

Speech recognition requires permission to record audio and, on iOS, to use speech recognition. Check and request the permissions before you start listening:

`[](#%5F%5Fcodelineno-7-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const checkPermissions = async () => {
[](#%5F%5Fcodelineno-7-4)  const { audioRecording, speechRecognition } = await SpeechRecognition.checkPermissions();
[](#%5F%5Fcodelineno-7-5)};
[](#%5F%5Fcodelineno-7-6)
[](#%5F%5Fcodelineno-7-7)const requestPermissions = async () => {
[](#%5F%5Fcodelineno-7-8)  const { audioRecording, speechRecognition } = await SpeechRecognition.requestPermissions({
[](#%5F%5Fcodelineno-7-9)    permissions: ['audioRecording', 'speechRecognition'],
[](#%5F%5Fcodelineno-7-10)  });
[](#%5F%5Fcodelineno-7-11)};
`

### Start and stop listening[¶](#start-and-stop-listening "Permanent link")

Start listening for speech in a specific language. The `silenceThreshold` option automatically stops the recognition after the given number of milliseconds of silence. You can also stop listening manually:

`[](#%5F%5Fcodelineno-8-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-8-2)
[](#%5F%5Fcodelineno-8-3)const startListening = async () => {
[](#%5F%5Fcodelineno-8-4)  await SpeechRecognition.startListening({
[](#%5F%5Fcodelineno-8-5)    language: 'en-US',
[](#%5F%5Fcodelineno-8-6)    silenceThreshold: 2000,
[](#%5F%5Fcodelineno-8-7)  });
[](#%5F%5Fcodelineno-8-8)};
[](#%5F%5Fcodelineno-8-9)
[](#%5F%5Fcodelineno-8-10)const stopListening = async () => {
[](#%5F%5Fcodelineno-8-11)  await SpeechRecognition.stopListening();
[](#%5F%5Fcodelineno-8-12)};
`

### Check if the recognizer is listening[¶](#check-if-the-recognizer-is-listening "Permanent link")

Query whether the speech recognizer is currently listening:

`[](#%5F%5Fcodelineno-9-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-9-2)
[](#%5F%5Fcodelineno-9-3)const isListening = async () => {
[](#%5F%5Fcodelineno-9-4)  const { isListening } = await SpeechRecognition.isListening();
[](#%5F%5Fcodelineno-9-5)  return isListening;
[](#%5F%5Fcodelineno-9-6)};
`

### Get the available languages[¶](#get-the-available-languages "Permanent link")

Retrieve the supported languages for speech recognition as BCP-47 language tags. Only available on Android and iOS:

`[](#%5F%5Fcodelineno-10-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-10-2)
[](#%5F%5Fcodelineno-10-3)const getLanguages = async () => {
[](#%5F%5Fcodelineno-10-4)  const { languages } = await SpeechRecognition.getLanguages();
[](#%5F%5Fcodelineno-10-5)  return languages;
[](#%5F%5Fcodelineno-10-6)};
`

### Listen for recognition events[¶](#listen-for-recognition-events "Permanent link")

React to the different stages of the recognition, for example to display partial results while the user is still speaking:

`[](#%5F%5Fcodelineno-11-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-11-2)
[](#%5F%5Fcodelineno-11-3)const addListeners = () => {
[](#%5F%5Fcodelineno-11-4)  SpeechRecognition.addListener('start', () => {
[](#%5F%5Fcodelineno-11-5)    console.log('Speech recognition started');
[](#%5F%5Fcodelineno-11-6)  });
[](#%5F%5Fcodelineno-11-7)  SpeechRecognition.addListener('end', () => {
[](#%5F%5Fcodelineno-11-8)    console.log('Speech recognition ended');
[](#%5F%5Fcodelineno-11-9)  });
[](#%5F%5Fcodelineno-11-10)  SpeechRecognition.addListener('error', (event) => {
[](#%5F%5Fcodelineno-11-11)    console.error('Speech recognition error:', event.message);
[](#%5F%5Fcodelineno-11-12)  });
[](#%5F%5Fcodelineno-11-13)  SpeechRecognition.addListener('partialResult', (event) => {
[](#%5F%5Fcodelineno-11-14)    console.log('Partial result:', event.result);
[](#%5F%5Fcodelineno-11-15)  });
[](#%5F%5Fcodelineno-11-16)  SpeechRecognition.addListener('result', (event) => {
[](#%5F%5Fcodelineno-11-17)    console.log('Final result:', event.result);
[](#%5F%5Fcodelineno-11-18)  });
[](#%5F%5Fcodelineno-11-19)  SpeechRecognition.addListener('soundLevel', (event) => {
[](#%5F%5Fcodelineno-11-20)    console.log('Sound level:', event.level);
[](#%5F%5Fcodelineno-11-21)  });
[](#%5F%5Fcodelineno-11-22)  SpeechRecognition.addListener('speechStart', () => {
[](#%5F%5Fcodelineno-11-23)    console.log('User started speaking');
[](#%5F%5Fcodelineno-11-24)  });
[](#%5F%5Fcodelineno-11-25)  SpeechRecognition.addListener('speechEnd', () => {
[](#%5F%5Fcodelineno-11-26)    console.log('User stopped speaking');
[](#%5F%5Fcodelineno-11-27)  });
[](#%5F%5Fcodelineno-11-28)};
`

### Remove all listeners[¶](#remove-all-listeners "Permanent link")

Remove all listeners for this plugin when they are no longer needed:

`[](#%5F%5Fcodelineno-12-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-12-2)
[](#%5F%5Fcodelineno-12-3)const removeAllListeners = async () => {
[](#%5F%5Fcodelineno-12-4)  await SpeechRecognition.removeAllListeners();
[](#%5F%5Fcodelineno-12-5)};
`

## API[¶](#api "Permanent link")

* [getLanguages()](#getlanguages)
* [getOnDeviceLanguages()](#getondevicelanguages)
* [downloadOnDeviceLanguage(...)](#downloadondevicelanguage)
* [isAvailable()](#isavailable)
* [isListening()](#islistening)
* [startListening(...)](#startlistening)
* [stopListening(...)](#stoplistening)
* [checkPermissions()](#checkpermissions)
* [requestPermissions(...)](#requestpermissions)
* [addListener('end', ...)](#addlistenerend-)
* [addListener('error', ...)](#addlistenererror-)
* [addListener('partialResult', ...)](#addlistenerpartialresult-)
* [addListener('result', ...)](#addlistenerresult-)
* [addListener('speechEnd', ...)](#addlistenerspeechend-)
* [addListener('speechStart', ...)](#addlistenerspeechstart-)
* [addListener('start', ...)](#addlistenerstart-)
* [addListener('soundLevel', ...)](#addlistenersoundlevel-)
* [removeAllListeners()](#removealllisteners)
* [Interfaces](#interfaces)
* [Type Aliases](#type-aliases)
* [Enums](#enums)

### getLanguages()[¶](#getlanguages "Permanent link")

`[](#%5F%5Fcodelineno-13-1)getLanguages() => Promise<GetLanguagesResult>
`

Get the available languages for speech recognition.

**Attention**: On Android, this method is unfortunately not supported by all devices. If the method is not supported, the promise will never resolve. It's recommended to set a timeout for the promise.

Only available on Android and iOS.

**Returns:** `Promise<[GetLanguagesResult](#getlanguagesresult)>`

**Since:** 6.0.0

---

### getOnDeviceLanguages()[¶](#getondevicelanguages "Permanent link")

`[](#%5F%5Fcodelineno-14-1)getOnDeviceLanguages() => Promise<GetOnDeviceLanguagesResult>
`

Get the available on-device languages for speech recognition.

Only available on Android (SDK 33+) and iOS (26+).

**Returns:** `Promise<[GetOnDeviceLanguagesResult](#getondevicelanguagesresult)>`

**Since:** 8.1.0

---

### downloadOnDeviceLanguage(...)[¶](#downloadondevicelanguage "Permanent link")

`[](#%5F%5Fcodelineno-15-1)downloadOnDeviceLanguage(options: DownloadOnDeviceLanguageOptions, callback: DownloadOnDeviceLanguageCallback) => Promise<CallbackId>
`

Download an on-device language model for speech recognition.

**Note**: On Android, this might trigger user interaction to approve the download.

**Note**: On Android (SDK 33), the `callback` is never invoked because progress tracking is only available on SDK 34+. Use {@link getOnDeviceLanguages} to verify when the download completes.

Only available on Android (SDK 33+) and iOS (26+).

| Param        | Type                                                                  |
| ------------ | --------------------------------------------------------------------- |
| **options**  | [DownloadOnDeviceLanguageOptions](#downloadondevicelanguageoptions)   |
| **callback** | [DownloadOnDeviceLanguageCallback](#downloadondevicelanguagecallback) |

**Returns:** `Promise<string>`

**Since:** 8.1.0

---

### isAvailable()[¶](#isavailable "Permanent link")

`[](#%5F%5Fcodelineno-16-1)isAvailable() => Promise<IsAvailableResult>
`

Check if the speech recognizer is available on the device.

**Returns:** `Promise<[IsAvailableResult](#isavailableresult)>`

**Since:** 6.0.0

---

### isListening()[¶](#islistening "Permanent link")

`[](#%5F%5Fcodelineno-17-1)isListening() => Promise<IsListeningResult>
`

Check if the speech recognizer is currently listening.

**Returns:** `Promise<[IsListeningResult](#islisteningresult)>`

**Since:** 6.0.0

---

### startListening(...)[¶](#startlistening "Permanent link")

`[](#%5F%5Fcodelineno-18-1)startListening(options?: StartListeningOptions | undefined) => Promise<void>
`

Start listening for speech.

| Param       | Type                                            |
| ----------- | ----------------------------------------------- |
| **options** | [StartListeningOptions](#startlisteningoptions) |

**Since:** 6.0.0

---

### stopListening(...)[¶](#stoplistening "Permanent link")

`[](#%5F%5Fcodelineno-19-1)stopListening(options?: StopListeningOptions | undefined) => Promise<void>
`

Stop listening for speech.

| Param       | Type                                          |
| ----------- | --------------------------------------------- |
| **options** | [StopListeningOptions](#stoplisteningoptions) |

**Since:** 6.0.0

---

### checkPermissions()[¶](#checkpermissions "Permanent link")

`[](#%5F%5Fcodelineno-20-1)checkPermissions() => Promise<PermissionStatus>
`

Check permissions for the plugin.

**Returns:** `Promise<[PermissionStatus](#permissionstatus)>`

**Since:** 6.0.0

---

### requestPermissions(...)[¶](#requestpermissions "Permanent link")

`[](#%5F%5Fcodelineno-21-1)requestPermissions(permissions?: SpeechRecognitionPluginPermission | undefined) => Promise<PermissionStatus>
`

Request permissions for the plugin.

| Param           | Type                                                                    |
| --------------- | ----------------------------------------------------------------------- |
| **permissions** | [SpeechRecognitionPluginPermission](#speechrecognitionpluginpermission) |

**Returns:** `Promise<[PermissionStatus](#permissionstatus)>`

**Since:** 6.0.0

---

### addListener('end', ...)[¶](#addlistenerend "Permanent link")

`[](#%5F%5Fcodelineno-22-1)addListener(eventName: 'end', listenerFunc: () => void) => Promise<PluginListenerHandle>
`

Called when the speech recognizer has stopped listening.

| Param            | Type       |
| ---------------- | ---------- |
| **eventName**    | 'end'      |
| **listenerFunc** | () => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 6.0.0

---

### addListener('error', ...)[¶](#addlistenererror "Permanent link")

`[](#%5F%5Fcodelineno-23-1)addListener(eventName: 'error', listenerFunc: (event: ErrorEvent) => void) => Promise<PluginListenerHandle>
`

Called when an error occurs.

| Param            | Type                                       |
| ---------------- | ------------------------------------------ |
| **eventName**    | 'error'                                    |
| **listenerFunc** | (event: [ErrorEvent](#errorevent)) => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 6.0.0

---

### addListener('partialResult', ...)[¶](#addlistenerpartialresult "Permanent link")

`[](#%5F%5Fcodelineno-24-1)addListener(eventName: 'partialResult', listenerFunc: (event: PartialResultEvent) => void) => Promise<PluginListenerHandle>
`

Called when a partial result is available.

| Param            | Type                                                       |
| ---------------- | ---------------------------------------------------------- |
| **eventName**    | 'partialResult'                                            |
| **listenerFunc** | (event: [PartialResultEvent](#partialresultevent)) => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 6.0.0

---

### addListener('result', ...)[¶](#addlistenerresult "Permanent link")

`[](#%5F%5Fcodelineno-25-1)addListener(eventName: 'result', listenerFunc: (event: ResultEvent) => void) => Promise<PluginListenerHandle>
`

Called when the final results are available.

| Param            | Type                                         |
| ---------------- | -------------------------------------------- |
| **eventName**    | 'result'                                     |
| **listenerFunc** | (event: [ResultEvent](#resultevent)) => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 6.0.0

---

### addListener('speechEnd', ...)[¶](#addlistenerspeechend "Permanent link")

`[](#%5F%5Fcodelineno-26-1)addListener(eventName: 'speechEnd', listenerFunc: () => void) => Promise<PluginListenerHandle>
`

Called when the user has stopped speaking.

Only available on Android and Web.

| Param            | Type        |
| ---------------- | ----------- |
| **eventName**    | 'speechEnd' |
| **listenerFunc** | () => void  |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 6.0.0

---

### addListener('speechStart', ...)[¶](#addlistenerspeechstart "Permanent link")

`[](#%5F%5Fcodelineno-27-1)addListener(eventName: 'speechStart', listenerFunc: () => void) => Promise<PluginListenerHandle>
`

Called when the user has started to speak.

Only available on Android and Web.

| Param            | Type          |
| ---------------- | ------------- |
| **eventName**    | 'speechStart' |
| **listenerFunc** | () => void    |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 6.0.0

---

### addListener('start', ...)[¶](#addlistenerstart "Permanent link")

`[](#%5F%5Fcodelineno-28-1)addListener(eventName: 'start', listenerFunc: () => void) => Promise<PluginListenerHandle>
`

Called when the speech recognizer has started listening.

| Param            | Type       |
| ---------------- | ---------- |
| **eventName**    | 'start'    |
| **listenerFunc** | () => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 6.0.0

---

### addListener('soundLevel', ...)[¶](#addlistenersoundlevel "Permanent link")

`[](#%5F%5Fcodelineno-29-1)addListener(eventName: 'soundLevel', listenerFunc: (event: SoundLevelEvent) => void) => Promise<PluginListenerHandle>
`

Called when the sound level changes during speech recognition.

**Attention**: There is no guarantee that this method will be called.

Only available on Android and iOS.

| Param            | Type                                                 |
| ---------------- | ---------------------------------------------------- |
| **eventName**    | 'soundLevel'                                         |
| **listenerFunc** | (event: [SoundLevelEvent](#soundlevelevent)) => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 7.5.0

---

### removeAllListeners()[¶](#removealllisteners "Permanent link")

`[](#%5F%5Fcodelineno-30-1)removeAllListeners() => Promise<void>
`

Remove all listeners for this plugin.

**Since:** 6.0.0

---

### Interfaces[¶](#interfaces "Permanent link")

#### GetLanguagesResult[¶](#getlanguagesresult "Permanent link")

| Prop          | Type       | Description                                                             | Since |
| ------------- | ---------- | ----------------------------------------------------------------------- | ----- |
| **languages** | string\[\] | The supported languages for speech recognition as BCP-47 language tags. | 6.0.0 |

#### GetOnDeviceLanguagesResult[¶](#getondevicelanguagesresult "Permanent link")

| Prop                   | Type       | Description                                                                                                                                                       | Since |
| ---------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **installedLanguages** | string\[\] | The installed on-device languages as BCP-47 language tags.                                                                                                        | 8.1.0 |
| **pendingLanguages**   | string\[\] | The on-device languages whose download is scheduled or in progress as BCP-47 language tags. Only available on Android.                                            | 8.1.0 |
| **supportedLanguages** | string\[\] | The supported on-device languages as BCP-47 language tags. These languages can be downloaded for on-device use using the {@link downloadOnDeviceLanguage} method. | 8.1.0 |

#### DownloadOnDeviceLanguageOptions[¶](#downloadondevicelanguageoptions "Permanent link")

| Prop         | Type   | Description                                           | Since |
| ------------ | ------ | ----------------------------------------------------- | ----- |
| **language** | string | The BCP-47 language tag for the language to download. | 8.1.0 |

#### DownloadOnDeviceLanguageCallbackEvent[¶](#downloadondevicelanguagecallbackevent "Permanent link")

| Prop          | Type    | Description                                             | Since |
| ------------- | ------- | ------------------------------------------------------- | ----- |
| **progress**  | number  | The download progress, as a percentage between 0 and 1. | 8.1.0 |
| **completed** | boolean | Whether the download is completed or not.               | 8.1.0 |

#### IsAvailableResult[¶](#isavailableresult "Permanent link")

| Prop            | Type    | Description                                                      | Since |
| --------------- | ------- | ---------------------------------------------------------------- | ----- |
| **isAvailable** | boolean | Whether or not the speech recognizer is available on the device. | 6.0.0 |

#### IsListeningResult[¶](#islisteningresult "Permanent link")

| Prop            | Type    | Description                                                  | Since |
| --------------- | ------- | ------------------------------------------------------------ | ----- |
| **isListening** | boolean | Whether or not the speech recognizer is currently listening. | 6.0.0 |

#### StartListeningOptions[¶](#startlisteningoptions "Permanent link")

| Prop                             | Type                                          | Description                                                                                                                                                                                                                                                                                                                                                                                             | Default                      | Since |
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----- |
| **audioSessionCategory**         | [AudioSessionCategory](#audiosessioncategory) | The audio session category to use for speech recognition. Only available on iOS.                                                                                                                                                                                                                                                                                                                        | AudioSessionCategory.Record  | 7.2.0 |
| **audioSessionMode**             | [AudioSessionMode](#audiosessionmode)         | The audio session mode for speech recognition. Only available on iOS.                                                                                                                                                                                                                                                                                                                                   | AudioSessionMode.Measurement | 8.1.0 |
| **contextualStrings**            | string\[\]                                    | An array of phrases that should be recognized, even if they are not in the system vocabulary. Only available on Android (SDK 33+) and iOS.                                                                                                                                                                                                                                                              |                              | 7.3.0 |
| **deactivateAudioSessionOnStop** | boolean                                       | Whether or not to deactivate your app's audio session on stop. Only available on iOS.                                                                                                                                                                                                                                                                                                                   | true                         | 7.2.0 |
| **enableFormatting**             | boolean                                       | Whether to add punctuation to speech recognition results. **Note**: On Android, this option does not work reliably as it varies depending on the device and TTS engine. Only available on Android (SDK 33+) and iOS (+16).                                                                                                                                                                              | false                        | 7.4.0 |
| **language**                     | string                                        | The BC-47 language tag for the language to use for speech recognition.                                                                                                                                                                                                                                                                                                                                  |                              | 6.0.0 |
| **silenceThreshold**             | number                                        | The number of milliseconds of silence before the speech recognition ends. **Attention**: This option may not work reliably on all devices and platforms as it depends on the underlying speech recognition service. This is a limitation of the platform and not the plugin itself. Continuous listening by setting an extremely high value will not work. Only available on Android (SDK 33+) and iOS. | 2000                         | 6.0.0 |
| **taskHint**                     | [TaskHint](#taskhint)                         | The type of task for which the speech recognition is being used for. Only available on iOS.                                                                                                                                                                                                                                                                                                             | TaskHint.Unspecified         | 7.5.0 |
| **requireOnDeviceRecognition**   | boolean                                       | Whether to require on-device speech recognition. If true, speech recognition will only use on-device models. If the on-device model is not available, the call will fail with an error. Only available on Android (SDK 33+) and iOS.                                                                                                                                                                    | false                        | 8.1.0 |
| **useSpeechTranscriber**         | boolean                                       | Whether to use the SpeechTranscriber API for on-device speech recognition. This avoids the "Speech data from this app will be sent to Apple" permission dialog and only requires microphone permission. On-device recognition is used implicitly when this option is set to true, so requireOnDeviceRecognition does not need to be set separately. Only available on iOS (26+).                        | false                        | 8.1.0 |

#### StopListeningOptions[¶](#stoplisteningoptions "Permanent link")

| Prop                       | Type    | Description                                                                   | Default | Since |
| -------------------------- | ------- | ----------------------------------------------------------------------------- | ------- | ----- |
| **deactivateAudioSession** | boolean | Whether or not to deactivate your app's audio session. Only available on iOS. | true    | 7.2.0 |

#### PermissionStatus[¶](#permissionstatus "Permanent link")

| Prop                  | Type                                | Description                                                     | Since |
| --------------------- | ----------------------------------- | --------------------------------------------------------------- | ----- |
| **audioRecording**    | [PermissionState](#permissionstate) | Permission state for recording audio.                           | 7.1.0 |
| **recordAudio**       | [PermissionState](#permissionstate) | Permission state for speech recognition.                        | 6.0.0 |
| **speechRecognition** | [PermissionState](#permissionstate) | Permission state for speech recognition. Only available on iOS. | 7.1.0 |

#### SpeechRecognitionPluginPermission[¶](#speechrecognitionpluginpermission "Permanent link")

| Prop            | Type                                |
| --------------- | ----------------------------------- |
| **permissions** | SpeechRecognitionPermissionType\[\] |

#### PluginListenerHandle[¶](#pluginlistenerhandle "Permanent link")

| Prop       | Type                |
| ---------- | ------------------- |
| **remove** | () => Promise<void> |

#### ErrorEvent[¶](#errorevent "Permanent link")

| Prop        | Type   | Description        | Since |
| ----------- | ------ | ------------------ | ----- |
| **message** | string | The error message. | 6.0.0 |

#### PartialResultEvent[¶](#partialresultevent "Permanent link")

| Prop       | Type   | Description                                   | Since |
| ---------- | ------ | --------------------------------------------- | ----- |
| **result** | string | The partial result of the speech recognition. | 6.0.0 |

#### ResultEvent[¶](#resultevent "Permanent link")

| Prop       | Type   | Description                                 | Since |
| ---------- | ------ | ------------------------------------------- | ----- |
| **result** | string | The final result of the speech recognition. | 6.0.0 |

#### SoundLevelEvent[¶](#soundlevelevent "Permanent link")

| Prop      | Type   | Description                                                                                                                                                                          | Since |
| --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| **level** | number | The sound level of the audio signal. The value is normalized across platforms to a range of 0-100, where 0 represents minimum detected sound and 100 represents maximum sound level. | 7.5.0 |

### Type Aliases[¶](#type-aliases "Permanent link")

#### DownloadOnDeviceLanguageCallback[¶](#downloadondevicelanguagecallback "Permanent link")

`(event: [DownloadOnDeviceLanguageCallbackEvent](#downloadondevicelanguagecallbackevent) | null, error: any): void`

#### CallbackId[¶](#callbackid "Permanent link")

`string`

#### PermissionState[¶](#permissionstate "Permanent link")

`'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'`

#### SpeechRecognitionPermissionType[¶](#speechrecognitionpermissiontype "Permanent link")

`'audioRecording' | 'speechRecognition'`

### Enums[¶](#enums "Permanent link")

#### AudioSessionCategory[¶](#audiosessioncategory "Permanent link")

| Members           | Value               | Description                                                           | Since |
| ----------------- | ------------------- | --------------------------------------------------------------------- | ----- |
| **Record**        | 'RECORD'            | The category for recording audio while also silencing playback audio. | 7.2.0 |
| **PlayAndRecord** | 'PLAY\_AND\_RECORD' | The category for recording (input) and playback (output) of audio.    | 7.2.0 |

#### AudioSessionMode[¶](#audiosessionmode "Permanent link")

| Members            | Value              | Description                                                                   | Since |
| ------------------ | ------------------ | ----------------------------------------------------------------------------- | ----- |
| **Default**        | 'DEFAULT'          | Default mode that doesn't enable additional audio session features.           | 8.1.0 |
| **GameChat**       | 'GAME\_CHAT'       | Mode for chat communication over VoIP or internet, optimized for low latency. | 8.1.0 |
| **Measurement**    | 'MEASUREMENT'      | Mode for high-quality measurement recordings with maximum dynamic range.      | 8.1.0 |
| **SpokenAudio**    | 'SPOKEN\_AUDIO'    | Mode for speech recording and transcription with optimized voice processing.  | 8.1.0 |
| **VideoChat**      | 'VIDEO\_CHAT'      | Mode for two-way video chat communications.                                   | 8.1.0 |
| **VideoRecording** | 'VIDEO\_RECORDING' | Mode for recording video content with high-quality audio.                     | 8.1.0 |
| **VoiceChat**      | 'VOICE\_CHAT'      | Mode for voice chat communications.                                           | 8.1.0 |

#### TaskHint[¶](#taskhint "Permanent link")

| Members          | Value          | Since |
| ---------------- | -------------- | ----- |
| **Confirmation** | 'CONFIRMATION' | 7.5.0 |
| **Dictation**    | 'DICTATION'    | 7.5.0 |
| **Search**       | 'SEARCH'       | 7.5.0 |
| **Unspecified**  | 'UNSPECIFIED'  | 7.5.0 |

## FAQ[¶](#faq "Permanent link")

### Why does `getLanguages` never resolve on some Android devices?[¶](#why-does-getlanguages-never-resolve-on-some-android-devices "Permanent link")

The `getLanguages()` method is unfortunately not supported by all Android devices. If the method is not supported, the promise will never resolve. It's therefore recommended to set a timeout for the promise and fall back to a predefined list of languages if the timeout is reached.

### Can I use this plugin for continuous speech recognition?[¶](#can-i-use-this-plugin-for-continuous-speech-recognition "Permanent link")

No, continuous listening is not supported. The `silenceThreshold` option controls how many milliseconds of silence end the recognition, but it depends on the underlying speech recognition service and setting an extremely high value will not keep the recognizer listening indefinitely. This is a limitation of the platforms and not of the plugin itself.

### How can I avoid the "Speech data will be sent to Apple" permission dialog?[¶](#how-can-i-avoid-the-speech-data-will-be-sent-to-apple-permission-dialog "Permanent link")

Set the `useSpeechTranscriber` option of the `startListening(...)` method to `true`. This uses Apple's modern `SpeechTranscriber` API with fully on-device processing, so only the microphone permission is required and no speech recognition permission dialog is shown. This option is only available on iOS 26+.

### What is the difference between the `partialResult` and `result` events?[¶](#what-is-the-difference-between-the-partialresult-and-result-events "Permanent link")

The `partialResult` event is emitted while the user is still speaking and delivers intermediate transcriptions, which is useful for displaying live feedback. The `result` event is emitted when the final results of the speech recognition are available.

### What permissions does this plugin require?[¶](#what-permissions-does-this-plugin-require "Permanent link")

The plugin requires permission to record audio and, on iOS, permission to use speech recognition. On iOS, you must add the `NSSpeechRecognitionUsageDescription` and `NSMicrophoneUsageDescription` keys to your `Info.plist` file as described in the [Installation](#installation) section. You can check and request the permissions at runtime using the `checkPermissions()` and `requestPermissions(...)` methods.

### Can I use this plugin with Ionic, React, Vue or Angular?[¶](#can-i-use-this-plugin-with-ionic-react-vue-or-angular "Permanent link")

Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.

## Related Plugins[¶](#related-plugins "Permanent link")

* [Speech Synthesis](https://capawesome.io/docs/sdks/capacitor/speech-synthesis/): Synthesize speech from text (also known as text-to-speech).
* [Audio Recorder](https://capawesome.io/docs/sdks/capacitor/audio-recorder/): Record audio using the device's microphone.
* [Audio Player](https://capawesome.io/docs/sdks/capacitor/audio-player/): Play audio with background support.

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/speech-recognition/CHANGELOG.md).

## Breaking Changes[¶](#breaking-changes "Permanent link")

See [BREAKING.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/speech-recognition/BREAKING.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/speech-recognition/LICENSE).

July 8, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/speech-recognition/#article", "headline": "Capacitor Speech Recognition Plugin", "name": "Capacitor Speech Recognition Plugin", "description": "Capacitor plugin to transcribe speech into text (also known as speech-to-text) with advanced features like silence detection, contextual strings, and more.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/speech-recognition/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/speech-recognition/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/speech-recognition/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/speech-recognition/#software", "name": "Capacitor Speech Recognition Plugin", "description": "Capacitor plugin to transcribe speech into text (also known as speech-to-text) with advanced features like silence detection, contextual strings, and more.", "url": "https://capawesome.io/docs/sdks/capacitor/speech-recognition/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Why does getLanguages never resolve on some Android devices?", "acceptedAnswer": {"@type": "Answer", "text": "The getLanguages() method is unfortunately not supported by all Android devices. If the method is not supported, the promise will never resolve. It's therefore recommended to set a timeout for the promise and fall back to a predefined list of languages if the timeout is reached."}}, {"@type": "Question", "name": "Can I use this plugin for continuous speech recognition?", "acceptedAnswer": {"@type": "Answer", "text": "No, continuous listening is not supported. The silenceThreshold option controls how many milliseconds of silence end the recognition, but it depends on the underlying speech recognition service and setting an extremely high value will not keep the recognizer listening indefinitely. This is a limitation of the platforms and not of the plugin itself."}}, {"@type": "Question", "name": "How can I avoid the \"Speech data will be sent to Apple\" permission dialog?", "acceptedAnswer": {"@type": "Answer", "text": "Set the useSpeechTranscriber option of the startListening(...) method to true. This uses Apple's modern SpeechTranscriber API with fully on-device processing, so only the microphone permission is required and no speech recognition permission dialog is shown. This option is only available on iOS 26+."}}, {"@type": "Question", "name": "What is the difference between the partialResult and result events?", "acceptedAnswer": {"@type": "Answer", "text": "The partialResult event is emitted while the user is still speaking and delivers intermediate transcriptions, which is useful for displaying live feedback. The result event is emitted when the final results of the speech recognition are available."}}, {"@type": "Question", "name": "What permissions does this plugin require?", "acceptedAnswer": {"@type": "Answer", "text": "The plugin requires permission to record audio and, on iOS, permission to use speech recognition. On iOS, you must add the NSSpeechRecognitionUsageDescription and NSMicrophoneUsageDescription keys to your Info.plist file as described in the Installation section. You can check and request the permissions at runtime using the checkPermissions() and requestPermissions(...) methods."}}, {"@type": "Question", "name": "Can I use this plugin with Ionic, React, Vue or Angular?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects."}}], "url": "https://capawesome.io/docs/sdks/capacitor/speech-recognition/"}
```
