---
description: Capacitor plugin to detect rooted and jailbroken devices, emulators, and developer mode on Android and iOS.
title: Capacitor Root Detection Plugin - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/root-detection.png
---

<!doctype html> 

[Skip to content ](#capacitor-root-detection-plugin) 

[📲 Introducing **Build Sharing** — get your builds onto testers' devices with a link & QR code. No account required. ](/blog/share-mobile-app-builds-with-testers/) 

* [ 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 [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ iOS ](#ios)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Security Considerations ](#security-considerations)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ 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/)
* Notifications
* 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)
* [ Security Considerations ](#security-considerations)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)

# Capacitor Root Detection Plugin[¶](#capacitor-root-detection-plugin "Permanent link")

Capacitor plugin for detecting rooted and jailbroken devices.

[ ![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")

* 🔒 **Root detection**: Detect rooted (Android) and jailbroken (iOS) devices.
* 🤖 **Emulator detection**: Detect whether the app is running on an emulator or simulator.
* 🛠️ **Developer mode**: Detect whether developer mode is enabled (Android).
* 🤝 **Compatibility**: Works alongside the [App Integrity](https://capawesome.io/docs/sdks/capacitor/app-integrity/) plugin for server-verifiable device attestation.
* 📦 **SPM**: Supports Swift Package Manager and CocoaPods for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.

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 Root Detection plugin is typically used in apps that handle sensitive data and need to assess the trustworthiness of the device, for example:

* **Banking and fintech apps**: Warn users or restrict access when the app runs on a rooted or jailbroken device.
* **Fraud prevention**: Detect emulators and simulators to make automated abuse of your app harder.
* **Compliance checks**: Detect whether developer mode is enabled on Android to satisfy internal security policies.
* **Conditional feature gating**: Disable particularly sensitive features on compromised devices while keeping the rest of the app usable.

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

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 0.x.x          | \>=8.x.x          | Active support |

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

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-0-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-root-detection` 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-2-1)npm install @capawesome/capacitor-root-detection
[](#%5F%5Fcodelineno-2-2)npx cap sync
`

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

#### Variables[¶](#variables "Permanent link")

This plugin will use the following project variables (defined in your app's `variables.gradle` file):

* `$rootbeerVersion` version of `com.scottyab:rootbeer-lib` (default: `0.1.2`)

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

#### Application Queries Schemes[¶](#application-queries-schemes "Permanent link")

The `isRooted()` method checks whether the `cydia://` URL scheme can be opened as part of its jailbreak heuristics. For this check to work, add the `cydia` scheme to the `LSApplicationQueriesSchemes` array in the `Info.plist` file of your app:

`[](#%5F%5Fcodelineno-3-1)<key>LSApplicationQueriesSchemes</key>
[](#%5F%5Fcodelineno-3-2)<array>
[](#%5F%5Fcodelineno-3-3)  <string>cydia</string>
[](#%5F%5Fcodelineno-3-4)</array>
`

This step is optional. If the scheme is not added, the `isRooted()` method still works but skips the URL scheme check.

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

No configuration required for this plugin.

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

The following examples show how to check whether the device is rooted or jailbroken, running on an emulator, or has developer mode enabled.

### Check whether the device is rooted or jailbroken[¶](#check-whether-the-device-is-rooted-or-jailbroken "Permanent link")

Check whether the device is rooted (Android) or jailbroken (iOS). Keep in mind that this is a best-effort, client-side check that can be bypassed by a determined attacker (see [Security Considerations](#security-considerations)):

`[](#%5F%5Fcodelineno-4-1)import { RootDetection } from '@capawesome/capacitor-root-detection';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const isRooted = async () => {
[](#%5F%5Fcodelineno-4-4)  const { rooted } = await RootDetection.isRooted();
[](#%5F%5Fcodelineno-4-5)  return rooted;
[](#%5F%5Fcodelineno-4-6)};
`

### Check whether the app runs on an emulator[¶](#check-whether-the-app-runs-on-an-emulator "Permanent link")

Check whether the app is running on an emulator (Android) or simulator (iOS):

`[](#%5F%5Fcodelineno-5-1)import { RootDetection } from '@capawesome/capacitor-root-detection';
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)const isEmulator = async () => {
[](#%5F%5Fcodelineno-5-4)  const { emulator } = await RootDetection.isEmulator();
[](#%5F%5Fcodelineno-5-5)  return emulator;
[](#%5F%5Fcodelineno-5-6)};
`

### Check whether developer mode is enabled[¶](#check-whether-developer-mode-is-enabled "Permanent link")

Check whether developer mode is enabled on the device. Only available on Android:

`[](#%5F%5Fcodelineno-6-1)import { RootDetection } from '@capawesome/capacitor-root-detection';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)const isDeveloperModeEnabled = async () => {
[](#%5F%5Fcodelineno-6-4)  const { enabled } = await RootDetection.isDeveloperModeEnabled();
[](#%5F%5Fcodelineno-6-5)  return enabled;
[](#%5F%5Fcodelineno-6-6)};
`

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

* [isDeveloperModeEnabled()](#isdevelopermodeenabled)
* [isEmulator()](#isemulator)
* [isRooted()](#isrooted)
* [Interfaces](#interfaces)

### isDeveloperModeEnabled()[¶](#isdevelopermodeenabled "Permanent link")

`[](#%5F%5Fcodelineno-7-1)isDeveloperModeEnabled() => Promise<IsDeveloperModeEnabledResult>
`

Check whether developer mode is enabled on the device.

Only available on Android.

**Returns:** `Promise<[IsDeveloperModeEnabledResult](#isdevelopermodeenabledresult)>`

**Since:** 0.1.0

---

### isEmulator()[¶](#isemulator "Permanent link")

`[](#%5F%5Fcodelineno-8-1)isEmulator() => Promise<IsEmulatorResult>
`

Check whether the app is running on an emulator (Android) or simulator (iOS).

**Returns:** `Promise<[IsEmulatorResult](#isemulatorresult)>`

**Since:** 0.1.0

---

### isRooted()[¶](#isrooted "Permanent link")

`[](#%5F%5Fcodelineno-9-1)isRooted() => Promise<IsRootedResult>
`

Check whether the device is rooted (Android) or jailbroken (iOS).

**Attention**: This is a best-effort, client-side check that can be bypassed by a determined attacker. Do not rely on it as the sole security measure. Use the App Integrity plugin when server-verifiable trust is required.

**Returns:** `Promise<[IsRootedResult](#isrootedresult)>`

**Since:** 0.1.0

---

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

#### IsDeveloperModeEnabledResult[¶](#isdevelopermodeenabledresult "Permanent link")

| Prop        | Type    | Description                                      | Since |
| ----------- | ------- | ------------------------------------------------ | ----- |
| **enabled** | boolean | Whether developer mode is enabled on the device. | 0.1.0 |

#### IsEmulatorResult[¶](#isemulatorresult "Permanent link")

| Prop         | Type    | Description                                                             | Since |
| ------------ | ------- | ----------------------------------------------------------------------- | ----- |
| **emulator** | boolean | Whether the app is running on an emulator (Android) or simulator (iOS). | 0.1.0 |

#### IsRootedResult[¶](#isrootedresult "Permanent link")

| Prop       | Type    | Description                                                 | Since |
| ---------- | ------- | ----------------------------------------------------------- | ----- |
| **rooted** | boolean | Whether the device is rooted (Android) or jailbroken (iOS). | 0.1.0 |

## Security Considerations[¶](#security-considerations "Permanent link")

The checks provided by this plugin are performed entirely on the device and are **best-effort**. A determined attacker with full control over a rooted or jailbroken device can bypass or spoof any client-side detection. Therefore, you should **never** rely on this plugin as the sole security measure for protecting sensitive functionality.

For **server-verifiable** device and app integrity, use the [App Integrity](https://capawesome.io/docs/sdks/capacitor/app-integrity/) plugin, which leverages the Play Integrity API (Android) and App Attest (iOS) to produce attestations that can be validated on your backend.

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

### How is this plugin different from other similar plugins?[¶](#how-is-this-plugin-different-from-other-similar-plugins "Permanent link")

It combines several device-trust signals in one fully typed API: root and jailbreak detection on Android and iOS, emulator and simulator detection, and a developer-mode check on Android. These are fast, client-side checks that are easy to drop into any app, and the plugin is designed to work alongside the App Integrity plugin when you also need server-verifiable attestation. If a lightweight client-side signal is all you need, this covers it well; when you need a full trust story, the two plugins fit together.

### Can root detection be bypassed?[¶](#can-root-detection-be-bypassed "Permanent link")

Yes. All checks provided by this plugin are performed entirely on the device and are best-effort. A determined attacker with full control over a rooted or jailbroken device can bypass or spoof any client-side detection. You should therefore never rely on this plugin as the sole security measure. See the [Security Considerations](#security-considerations) section for details.

### What is the difference between this plugin and the App Integrity plugin?[¶](#what-is-the-difference-between-this-plugin-and-the-app-integrity-plugin "Permanent link")

The Root Detection plugin performs client-side checks that run entirely on the device, which makes them fast and easy to use but also spoofable. The [App Integrity](https://capawesome.io/docs/sdks/capacitor/app-integrity/) plugin leverages the Play Integrity API (Android) and App Attest (iOS) to produce attestations that can be validated on your backend, providing server-verifiable trust. The two plugins are designed to work alongside each other.

### Which methods are available on which platforms?[¶](#which-methods-are-available-on-which-platforms "Permanent link")

The `isRooted()` and `isEmulator()` methods are available on Android and iOS. The `isDeveloperModeEnabled()` method is only available on Android. There is no Web implementation, since rooting and jailbreaking are concepts of mobile operating systems.

### Do I need any special configuration on iOS?[¶](#do-i-need-any-special-configuration-on-ios "Permanent link")

Optionally, you can add the `cydia` scheme to the `LSApplicationQueriesSchemes` array in your app's `Info.plist` file so that the `isRooted()` method can check whether the `cydia://` URL scheme can be opened as part of its jailbreak heuristics. If the scheme is not added, the method still works but skips the URL scheme check. See the [Installation](#installation) section for details.

### 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")

* [App Integrity](https://capawesome.io/docs/sdks/capacitor/app-integrity/): Verify app and device integrity using the Play Integrity API (Android) and App Attest (iOS).
* [Biometrics](https://capawesome.io/docs/sdks/capacitor/biometrics/): Request biometric authentication, such as face recognition or fingerprint recognition.
* [Privacy Screen](https://capawesome.io/docs/sdks/capacitor/privacy-screen/): Hide sensitive app content in the app switcher, block screenshots, and detect when a screenshot is taken.
* [Secure Preferences](https://capawesome.io/docs/sdks/capacitor/secure-preferences/): Securely store key/value pairs such as passwords, tokens or other sensitive information.

## 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/root-detection/CHANGELOG.md).

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

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

July 8, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/root-detection/#article", "headline": "Capacitor Root Detection Plugin", "name": "Capacitor Root Detection Plugin", "description": "Capacitor plugin to detect rooted and jailbroken devices, emulators, and developer mode on Android and iOS.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/root-detection/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/root-detection/", "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/root-detection/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/root-detection/#software", "name": "Capacitor Root Detection Plugin", "description": "Capacitor plugin to detect rooted and jailbroken devices, emulators, and developer mode on Android and iOS.", "url": "https://capawesome.io/docs/sdks/capacitor/root-detection/", "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": "How is this plugin different from other similar plugins?", "acceptedAnswer": {"@type": "Answer", "text": "It combines several device-trust signals in one fully typed API: root and jailbreak detection on Android and iOS, emulator and simulator detection, and a developer-mode check on Android. These are fast, client-side checks that are easy to drop into any app, and the plugin is designed to work alongside the App Integrity plugin when you also need server-verifiable attestation. If a lightweight client-side signal is all you need, this covers it well; when you need a full trust story, the two plugins fit together."}}, {"@type": "Question", "name": "Can root detection be bypassed?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. All checks provided by this plugin are performed entirely on the device and are best-effort. A determined attacker with full control over a rooted or jailbroken device can bypass or spoof any client-side detection. You should therefore never rely on this plugin as the sole security measure. See the Security Considerations section for details."}}, {"@type": "Question", "name": "What is the difference between this plugin and the App Integrity plugin?", "acceptedAnswer": {"@type": "Answer", "text": "The Root Detection plugin performs client-side checks that run entirely on the device, which makes them fast and easy to use but also spoofable. The App Integrity plugin leverages the Play Integrity API (Android) and App Attest (iOS) to produce attestations that can be validated on your backend, providing server-verifiable trust. The two plugins are designed to work alongside each other."}}, {"@type": "Question", "name": "Which methods are available on which platforms?", "acceptedAnswer": {"@type": "Answer", "text": "The isRooted() and isEmulator() methods are available on Android and iOS. The isDeveloperModeEnabled() method is only available on Android. There is no Web implementation, since rooting and jailbreaking are concepts of mobile operating systems."}}, {"@type": "Question", "name": "Do I need any special configuration on iOS?", "acceptedAnswer": {"@type": "Answer", "text": "Optionally, you can add the cydia scheme to the LSApplicationQueriesSchemes array in your app's Info.plist file so that the isRooted() method can check whether the cydia:// URL scheme can be opened as part of its jailbreak heuristics. If the scheme is not added, the method still works but skips the URL scheme check. See the Installation section for details."}}, {"@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/root-detection/"}
```
