---
description: Practical guide to the Capacitor Speech Recognition API: integrate on-device voice transcription into Ionic and Capacitor apps.
title: Exploring the Capacitor Speech Recognition API - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/exploring-the-capacitor-speech-recognition-api.png
---

<!doctype html> 

[Skip to content ](#exploring-the-capacitor-speech-recognition-api) 

[🖥️ Introducing the **Capacitor Electron Platform** — build desktop apps for macOS, Windows, and Linux. Free & open source. ](/blog/announcing-the-capacitor-electron-platform/) 

* [ 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/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ 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 ](/docs/sdks/capacitor/speech-recognition/)
* [ 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/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ 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/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ 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

* [ Best Practices ](#best-practices)
* [ FAQ ](#faq)
* [ Conclusion ](#conclusion)

* Related links

# Exploring the Capacitor Speech Recognition API[¶](#exploring-the-capacitor-speech-recognition-api "Permanent link")

Voice interaction has become a cornerstone of modern mobile applications, transforming how users engage with their devices through natural speech commands and dictation. With the [Capacitor Speech Recognition plugin](/docs/sdks/capacitor/speech-recognition/) from Capawesome, developers can seamlessly integrate powerful voice recognition capabilities into their Ionic and Capacitor applications, enabling real-time speech-to-text conversion across Android, iOS, and Web platforms through a unified API that handles the complexities of platform-specific speech recognition implementations.

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

To install the Capacitor Speech Recognition plugin, please refer to the [Installation](/docs/sdks/capacitor/speech-recognition/#installation) section in the plugin documentation.

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

Let's explore the key features of the Capacitor Speech Recognition API and how to implement them effectively in your Ionic applications.

### Permission Handling[¶](#permission-handling "Permanent link")

Before implementing speech recognition functionality, it's crucial to ensure your application has the necessary permissions to access the microphone and speech recognition services. The Capacitor Speech Recognition API provides the [checkPermissions(...)](/docs/sdks/capacitor/speech-recognition/#checkpermissions) and [requestPermissions(...)](/docs/sdks/capacitor/speech-recognition/#requestpermissions) methods for this purpose:

`[](#%5F%5Fcodelineno-0-1)import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const checkPermissions = async () => {
[](#%5F%5Fcodelineno-0-4)  const permissions = await SpeechRecognition.checkPermissions();
[](#%5F%5Fcodelineno-0-5)
[](#%5F%5Fcodelineno-0-6)  if (permissions.speechRecognition !== 'granted' || permissions.microphone !== 'granted') {
[](#%5F%5Fcodelineno-0-7)    console.log('Permissions not granted, requesting...');
[](#%5F%5Fcodelineno-0-8)    await requestPermissions();
[](#%5F%5Fcodelineno-0-9)  }
[](#%5F%5Fcodelineno-0-10)};
[](#%5F%5Fcodelineno-0-11)
[](#%5F%5Fcodelineno-0-12)const requestPermissions = async () => {
[](#%5F%5Fcodelineno-0-13)  const permissions = await SpeechRecognition.requestPermissions();
[](#%5F%5Fcodelineno-0-14)
[](#%5F%5Fcodelineno-0-15)  if (permissions.speechRecognition !== 'granted') {
[](#%5F%5Fcodelineno-0-16)    alert('Speech recognition permission is required to use this feature.');
[](#%5F%5Fcodelineno-0-17)  }
[](#%5F%5Fcodelineno-0-18)
[](#%5F%5Fcodelineno-0-19)  if (permissions.microphone !== 'granted') {
[](#%5F%5Fcodelineno-0-20)    alert('Microphone permission is required to capture audio.');
[](#%5F%5Fcodelineno-0-21)  }
[](#%5F%5Fcodelineno-0-22)};
`

Always verify permissions before starting speech recognition to ensure a smooth user experience and prevent permission-related errors.

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

To begin capturing and recognizing speech, use the [startListening(...)](/docs/sdks/capacitor/speech-recognition/#startlistening) method. This method allows you to configure various options for the recognition session:

`[](#%5F%5Fcodelineno-1-1)const startListening = async () => {
[](#%5F%5Fcodelineno-1-2)  try {
[](#%5F%5Fcodelineno-1-3)    // Add all necessary event listeners
[](#%5F%5Fcodelineno-1-4)    SpeechRecognition.addListener('start', () => {
[](#%5F%5Fcodelineno-1-5)      console.log('Speech recognition started');
[](#%5F%5Fcodelineno-1-6)    });
[](#%5F%5Fcodelineno-1-7)    SpeechRecognition.addListener('speechStart', () => {
[](#%5F%5Fcodelineno-1-8)      console.log('User started speaking');
[](#%5F%5Fcodelineno-1-9)    });
[](#%5F%5Fcodelineno-1-10)    SpeechRecognition.addListener('speechEnd', () => {
[](#%5F%5Fcodelineno-1-11)      console.log('User stopped speaking');
[](#%5F%5Fcodelineno-1-12)    });
[](#%5F%5Fcodelineno-1-13)    SpeechRecognition.addListener('partialResult', (event) => {
[](#%5F%5Fcodelineno-1-14)      console.log('Partial result:', event.partialResult);
[](#%5F%5Fcodelineno-1-15)    });
[](#%5F%5Fcodelineno-1-16)    SpeechRecognition.addListener('result', (event) => {
[](#%5F%5Fcodelineno-1-17)      console.log('Final result:', event.result);
[](#%5F%5Fcodelineno-1-18)    });
[](#%5F%5Fcodelineno-1-19)    SpeechRecognition.addListener('end', () => {
[](#%5F%5Fcodelineno-1-20)      console.log('Speech recognition ended');
[](#%5F%5Fcodelineno-1-21)    });
[](#%5F%5Fcodelineno-1-22)    SpeechRecognition.addListener('error', (event) => {
[](#%5F%5Fcodelineno-1-23)      console.error('Speech recognition error:', event.message);
[](#%5F%5Fcodelineno-1-24)    });
[](#%5F%5Fcodelineno-1-25)
[](#%5F%5Fcodelineno-1-26)    // Start listening for speech input
[](#%5F%5Fcodelineno-1-27)    await SpeechRecognition.startListening({
[](#%5F%5Fcodelineno-1-28)      language: 'en-US',
[](#%5F%5Fcodelineno-1-29)      silenceThreshold: 2000,
[](#%5F%5Fcodelineno-1-30)      partialResultsEnabled: true,
[](#%5F%5Fcodelineno-1-31)      contextualStrings: ['Capacitor', 'Ionic', 'Angular']
[](#%5F%5Fcodelineno-1-32)    });
[](#%5F%5Fcodelineno-1-33)
[](#%5F%5Fcodelineno-1-34)    console.log('Speech recognition started successfully');
[](#%5F%5Fcodelineno-1-35)  } catch (error) {
[](#%5F%5Fcodelineno-1-36)    console.error('Failed to start speech recognition:', error);
[](#%5F%5Fcodelineno-1-37)  }
[](#%5F%5Fcodelineno-1-38)};
`

The `startListening(...)` method accepts several configuration options including language selection, silence detection thresholds, and contextual strings that help improve recognition accuracy for domain-specific vocabulary. Make sure to adjust these parameters based on your application's requirements. Also, ensure that you add all necessary event listeners before calling `startListening(...)` to handle various speech recognition events effectively. The following events are available:

* **`start`**: Triggered when speech recognition begins - use this to update your UI to show that the system is ready to listen.
* **`end`**: Triggered when the recognition session concludes - essential for returning your UI to an idle state.
* **`speechStart`**: Fired when the user begins speaking - ideal for providing visual feedback that speech is being detected.
* **`speechEnd`**: Called when the user stops speaking - useful for indicating that the system is processing the captured audio.
* **`partialResult`**: Provides interim transcription results while the user is speaking - enables real-time text display for better user experience.
* **`result`**: Delivers the final transcribed text when recognition completes - this is where you'll process the user's speech input.
* **`error`**: Fired when recognition errors occur - critical for handling network issues, permission problems, or recognition failures gracefully.

### Stop Listening[¶](#stop-listening "Permanent link")

To manually end the speech recognition session, use the [stopListening(...)](/docs/sdks/capacitor/speech-recognition/#stoplistening) method:

`[](#%5F%5Fcodelineno-2-1)const stopListening = async () => {
[](#%5F%5Fcodelineno-2-2)  try {
[](#%5F%5Fcodelineno-2-3)    await SpeechRecognition.stopListening();
[](#%5F%5Fcodelineno-2-4)    console.log('Speech recognition stopped');
[](#%5F%5Fcodelineno-2-5)  } catch (error) {
[](#%5F%5Fcodelineno-2-6)    console.error('Failed to stop speech recognition:', error);
[](#%5F%5Fcodelineno-2-7)  }
[](#%5F%5Fcodelineno-2-8)};
`

The `stopListening(...)` method only needs to be called if you want to manually stop the recognition session. Otherwise, the speech recognition will automatically stop based on the configured timeout or when silence is detected for the specified duration.

## Best Practices[¶](#best-practices "Permanent link")

When implementing speech recognition with the Capacitor Speech Recognition API, consider these best practices:

1. **Implement comprehensive error handling**: Always handle the `error` event to manage network issues, audio capture problems, and recognition failures gracefully. Provide clear feedback to users about what went wrong and how they can resolve the issue, ensuring your application remains stable even when speech recognition encounters problems.
2. **Optimize silence detection**: Configure the `silenceThreshold` parameter based on your application's use case. For conversational interfaces, use shorter thresholds (1-2 seconds) to maintain responsiveness, while dictation applications may benefit from longer thresholds (5-10 seconds) to accommodate natural pauses in speech.
3. **Provide visual feedback**: Use the various event listeners (`start`, `speechStart`, `speechEnd`, `end`) to update your UI and provide clear visual indicators of the recognition state. Show users when the system is listening, processing, or idle to create an intuitive voice interface that builds user confidence and understanding.

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

### Does `silenceThreshold` work reliably on every platform, including a very high value for continuous listening?[¶](#does-silencethreshold-work-reliably-on-every-platform-including-a-very-high-value-for-continuous-listening "Permanent link")

Not fully reliably, and it's Android (SDK 33+) and iOS only — there's no web equivalent. Even on supported platforms, this option depends on the underlying OS speech recognition service, so behavior can vary by device, and setting an extremely high value to try to force continuous listening is documented not to work. Treat it as a hint to the platform, not a guaranteed timer.

### Can I force speech recognition to run entirely on-device, without sending audio to a server?[¶](#can-i-force-speech-recognition-to-run-entirely-on-device-without-sending-audio-to-a-server "Permanent link")

Yes, on Android (SDK 33+) and iOS, using `requireOnDeviceRecognition: true`. If the on-device model isn't available on that device, the call fails with an error rather than silently falling back to server-based recognition — so you need to handle that failure case if privacy-sensitive, offline-capable transcription is a hard requirement for your feature.

### What's the difference between `requireOnDeviceRecognition` and `useSpeechTranscriber`?[¶](#whats-the-difference-between-requireondevicerecognition-and-usespeechtranscriber "Permanent link")

`useSpeechTranscriber` is a separate, iOS 26+-only option that opts into Apple's newer `SpeechTranscriber` API. It implies on-device processing on its own — you don't need to also set `requireOnDeviceRecognition` — and its specific benefit is avoiding the "Speech data will be sent to Apple" permission dialog entirely, requiring only microphone permission instead.

### Does `contextualStrings` help recognition accuracy on every platform?[¶](#does-contextualstrings-help-recognition-accuracy-on-every-platform "Permanent link")

No — it's Android (SDK 33+) and iOS only, with no web support. On unsupported OS versions, passing domain-specific vocabulary this way simply has no effect, so don't rely on it as your only accuracy strategy if you need to support older Android devices.

### Will `enableFormatting` reliably add punctuation to my transcripts?[¶](#will-enableformatting-reliably-add-punctuation-to-my-transcripts "Permanent link")

Only somewhat, and only on Android (SDK 33+) and iOS 16+. The plugin's own documentation is explicit that on Android, this option doesn't work reliably since behavior varies by device and TTS engine — so don't build a feature that assumes punctuation will always be present in Android transcripts.

## Conclusion[¶](#conclusion "Permanent link")

The Capacitor Speech Recognition Plugin from Capawesome provides a comprehensive solution for integrating voice recognition capabilities into Ionic applications. By offering a unified API across multiple platforms, it enables developers to create sophisticated voice-enabled applications without the complexity of platform-specific speech recognition implementations.

To stay updated with the latest updates, features, and news about the Capawesome, Capacitor, and Ionic ecosystem, subscribe to the [Capawesome newsletter](/newsletter/) and follow us on [X (formerly Twitter)](https://x.com/capawesomeio).

If you have any questions or need assistance with the Capacitor Speech Recognition Plugin, feel free to reach out to the Capawesome team. We're here to help you implement powerful voice recognition features in your Ionic applications.

July 17, 2026 

Back to top

```json
{
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Exploring the Capacitor Speech Recognition API",
      "description": "Practical guide to the Capacitor Speech Recognition API: integrate on-device voice transcription into Ionic and Capacitor apps.",
      "image": "https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png",
      "datePublished": "2025-07-16T00:00:00+00:00",
      "dateModified": "2026-07-17T00:00:00+00:00",
      "author": [
        {
          "@type": "Person",
          "name": "Robin Genz",
          "url": "https://github.com/robingenz"
        }
      ],
      "publisher": {
        "@type": "Organization",
        "name": "Capawesome",
        "url": "https://capawesome.io",
        "logo": {
          "@type": "ImageObject",
          "url": "https://capawesome.io/assets/images/logo.svg"
        }
      },
      "articleSection": "Capacitor",
      "keywords": ["Capacitor", "Guides", "SDKs"],
      "isPartOf": {
        "@type": "Blog",
        "@id": "https://capawesome.io/blog/#blog"
      },
      "mainEntityOfPage": "https://capawesome.io/blog/exploring-the-capacitor-speech-recognition-api/",
      "url": "https://capawesome.io/blog/exploring-the-capacitor-speech-recognition-api/"
    }
{
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://capawesome.io/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Blog",
          "item": "https://capawesome.io/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Exploring the Capacitor Speech Recognition API",
          "item": "https://capawesome.io/blog/exploring-the-capacitor-speech-recognition-api/"
        }
      ]
    }
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Does silenceThreshold work reliably on every platform, including a very high value for continuous listening?", "acceptedAnswer": {"@type": "Answer", "text": "Not fully reliably, and it's Android (SDK 33+) and iOS only — there's no web equivalent. Even on supported platforms, this option depends on the underlying OS speech recognition service, so behavior can vary by device, and setting an extremely high value to try to force continuous listening is documented not to work. Treat it as a hint to the platform, not a guaranteed timer."}}, {"@type": "Question", "name": "Can I force speech recognition to run entirely on-device, without sending audio to a server?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, on Android (SDK 33+) and iOS, using requireOnDeviceRecognition: true. If the on-device model isn't available on that device, the call fails with an error rather than silently falling back to server-based recognition — so you need to handle that failure case if privacy-sensitive, offline-capable transcription is a hard requirement for your feature."}}, {"@type": "Question", "name": "What's the difference between requireOnDeviceRecognition and useSpeechTranscriber?", "acceptedAnswer": {"@type": "Answer", "text": "useSpeechTranscriber is a separate, iOS 26+-only option that opts into Apple's newer SpeechTranscriber API. It implies on-device processing on its own — you don't need to also set requireOnDeviceRecognition — and its specific benefit is avoiding the \"Speech data will be sent to Apple\" permission dialog entirely, requiring only microphone permission instead."}}, {"@type": "Question", "name": "Does contextualStrings help recognition accuracy on every platform?", "acceptedAnswer": {"@type": "Answer", "text": "No — it's Android (SDK 33+) and iOS only, with no web support. On unsupported OS versions, passing domain-specific vocabulary this way simply has no effect, so don't rely on it as your only accuracy strategy if you need to support older Android devices."}}, {"@type": "Question", "name": "Will enableFormatting reliably add punctuation to my transcripts?", "acceptedAnswer": {"@type": "Answer", "text": "Only somewhat, and only on Android (SDK 33+) and iOS 16+. The plugin's own documentation is explicit that on Android, this option doesn't work reliably since behavior varies by device and TTS engine — so don't build a feature that assumes punctuation will always be present in Android transcripts."}}], "url": "https://capawesome.io/blog/exploring-the-capacitor-speech-recognition-api/"}
```
