{"id":42102122,"url":"https://github.com/Cap-go/capacitor-is-root","last_synced_at":"2026-02-05T13:00:54.162Z","repository":{"id":316152032,"uuid":"1062180039","full_name":"Cap-go/capacitor-is-root","owner":"Cap-go","description":"Capacitor plugin to detect Jailbreak/Root","archived":false,"fork":false,"pushed_at":"2026-01-28T17:43:39.000Z","size":612,"stargazers_count":6,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-29T08:33:25.650Z","etag":null,"topics":["capacitor","plugin"],"latest_commit_sha":null,"homepage":"https://capgo.app","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Cap-go.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Cap-go","patreon":null,"open_collective":"capgo","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2025-09-22T23:16:47.000Z","updated_at":"2026-01-28T17:44:27.000Z","dependencies_parsed_at":"2025-09-23T02:39:41.746Z","dependency_job_id":null,"html_url":"https://github.com/Cap-go/capacitor-is-root","commit_stats":null,"previous_names":["cap-go/capacitor-is-root"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/Cap-go/capacitor-is-root","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-is-root","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-is-root/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-is-root/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-is-root/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Cap-go","download_url":"https://codeload.github.com/Cap-go/capacitor-is-root/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-is-root/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29122350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T10:47:47.471Z","status":"ssl_error","status_checked_at":"2026-02-05T10:45:08.119Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["capacitor","plugin"],"created_at":"2026-01-26T13:00:21.333Z","updated_at":"2026-02-05T13:00:54.139Z","avatar_url":"https://github.com/Cap-go.png","language":"Java","funding_links":["https://github.com/sponsors/Cap-go","https://opencollective.com/capgo"],"categories":["Capgo Capacitor Plugins","[Capgo plugins](https://capgo.app/)"],"sub_categories":["Authentication \u0026 Security"],"readme":"# @capgo/capacitor-is-root\n \u003ca href=\"https://capgo.app/\"\u003e\u003cimg src='https://raw.githubusercontent.com/Cap-go/capgo/main/assets/capgo_banner.png' alt='Capgo - Instant updates for capacitor'/\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch2\u003e\u003ca href=\"https://capgo.app/?ref=plugin_is_root\"\u003e ➡️ Get Instant updates for your App with Capgo\u003c/a\u003e\u003c/h2\u003e\n  \u003ch2\u003e\u003ca href=\"https://capgo.app/consulting/?ref=plugin_is_root\"\u003e Missing a feature? We’ll build the plugin for you 💪\u003c/a\u003e\u003c/h2\u003e\n\u003c/div\u003e\n\nJailbreak/Root Detection Plugin for Capacitor\n\n## Documentation\n\nThe most complete doc is available here: https://capgo.app/docs/plugins/is-root/\n\n## Compatibility\n\n| Plugin version | Capacitor compatibility | Maintained |\n| -------------- | ----------------------- | ---------- |\n| v8.\\*.\\*       | v8.\\*.\\*                | ✅          |\n| v7.\\*.\\*       | v7.\\*.\\*                | On demand   |\n| v6.\\*.\\*       | v6.\\*.\\*                | ❌          |\n| v5.\\*.\\*       | v5.\\*.\\*                | ❌          |\n\n\u003e **Note:** The major version of this plugin follows the major version of Capacitor. Use the version that matches your Capacitor installation (e.g., plugin v8 for Capacitor 8). Only the latest major version is actively maintained.\n\n## Install\n\n```bash\nnpm install @capgo/capacitor-is-root\nnpx cap sync\n```\n\n## API\n\n\u003cdocgen-index\u003e\n\n* [`isRooted()`](#isrooted)\n* [`isRootedWithBusyBox()`](#isrootedwithbusybox)\n* [`detectRootManagementApps()`](#detectrootmanagementapps)\n* [`detectPotentiallyDangerousApps()`](#detectpotentiallydangerousapps)\n* [`detectTestKeys()`](#detecttestkeys)\n* [`checkForBusyBoxBinary()`](#checkforbusyboxbinary)\n* [`checkForSuBinary()`](#checkforsubinary)\n* [`checkSuExists()`](#checksuexists)\n* [`checkForRWPaths()`](#checkforrwpaths)\n* [`checkForDangerousProps()`](#checkfordangerousprops)\n* [`checkForRootNative()`](#checkforrootnative)\n* [`detectRootCloakingApps()`](#detectrootcloakingapps)\n* [`isSelinuxFlagInEnabled()`](#isselinuxflaginenabled)\n* [`isExistBuildTags()`](#isexistbuildtags)\n* [`doesSuperuserApkExist()`](#doessuperuserapkexist)\n* [`isExistSUPath()`](#isexistsupath)\n* [`checkDirPermissions()`](#checkdirpermissions)\n* [`checkExecutingCommands()`](#checkexecutingcommands)\n* [`checkInstalledPackages()`](#checkinstalledpackages)\n* [`checkforOverTheAirCertificates()`](#checkforovertheaircertificates)\n* [`isRunningOnEmulator()`](#isrunningonemulator)\n* [`simpleCheckEmulator()`](#simplecheckemulator)\n* [`simpleCheckSDKBF86()`](#simplechecksdkbf86)\n* [`simpleCheckQRREFPH()`](#simplecheckqrrefph)\n* [`simpleCheckBuild()`](#simplecheckbuild)\n* [`checkGenymotion()`](#checkgenymotion)\n* [`checkGeneric()`](#checkgeneric)\n* [`checkGoogleSDK()`](#checkgooglesdk)\n* [`togetDeviceInfo()`](#togetdeviceinfo)\n* [`isRootedWithEmulator()`](#isrootedwithemulator)\n* [`isRootedWithBusyBoxWithEmulator()`](#isrootedwithbusyboxwithemulator)\n* [`getPluginVersion()`](#getpluginversion)\n* [Interfaces](#interfaces)\n\n\u003c/docgen-index\u003e\n\n\u003cdocgen-api\u003e\n\u003c!--Update the source file JSDoc comments and rerun docgen to update the docs below--\u003e\n\nCapacitor Is Root Plugin for detecting rooted (Android) or jailbroken (iOS) devices.\n\nThis plugin provides comprehensive detection methods to identify if a device has been\nrooted or jailbroken, which can be important for security-sensitive applications.\n\nMost methods are Android-only and use various heuristics to detect root access.\nThe basic `isRooted()` method works on both Android and iOS.\n\n### isRooted()\n\n```typescript\nisRooted() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nPerforms the default root/jailbreak detection checks.\n\nThis is the recommended method for basic root/jailbreak detection.\nIt runs a combination of the most reliable detection heuristics for the platform.\nWorks on both Android and iOS.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n**Since:** 1.0.0\n\n--------------------\n\n\n### isRootedWithBusyBox()\n\n```typescript\nisRootedWithBusyBox() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nExtends the default detection with BusyBox specific checks (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### detectRootManagementApps()\n\n```typescript\ndetectRootManagementApps() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects if known root management applications are present (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### detectPotentiallyDangerousApps()\n\n```typescript\ndetectPotentiallyDangerousApps() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects potentially dangerous applications commonly found on rooted devices (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### detectTestKeys()\n\n```typescript\ndetectTestKeys() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects debug/test build tags (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkForBusyBoxBinary()\n\n```typescript\ncheckForBusyBoxBinary() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nChecks whether a BusyBox binary exists on the device (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkForSuBinary()\n\n```typescript\ncheckForSuBinary() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nChecks whether a `su` binary is present (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkSuExists()\n\n```typescript\ncheckSuExists() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects if the `su` binary can be executed (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkForRWPaths()\n\n```typescript\ncheckForRWPaths() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects world writable system paths (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkForDangerousProps()\n\n```typescript\ncheckForDangerousProps() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects dangerous system properties (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkForRootNative()\n\n```typescript\ncheckForRootNative() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nExecutes RootBeer native checks (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### detectRootCloakingApps()\n\n```typescript\ndetectRootCloakingApps() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects applications that can hide root (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### isSelinuxFlagInEnabled()\n\n```typescript\nisSelinuxFlagInEnabled() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nChecks the SELinux enforcement state (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### isExistBuildTags()\n\n```typescript\nisExistBuildTags() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects test build tags on the OS image (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### doesSuperuserApkExist()\n\n```typescript\ndoesSuperuserApkExist() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects if superuser APKs are installed (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### isExistSUPath()\n\n```typescript\nisExistSUPath() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nChecks for known `su` binary locations (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkDirPermissions()\n\n```typescript\ncheckDirPermissions() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects writable directories that should be protected (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkExecutingCommands()\n\n```typescript\ncheckExecutingCommands() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nExecutes `which su` style commands to detect root (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkInstalledPackages()\n\n```typescript\ncheckInstalledPackages() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects suspicious installed packages (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkforOverTheAirCertificates()\n\n```typescript\ncheckforOverTheAirCertificates() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects tampered OTA certificates (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### isRunningOnEmulator()\n\n```typescript\nisRunningOnEmulator() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects common emulator fingerprints (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### simpleCheckEmulator()\n\n```typescript\nsimpleCheckEmulator() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nPerforms a lightweight emulator check (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### simpleCheckSDKBF86()\n\n```typescript\nsimpleCheckSDKBF86() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects x86 emulator fingerprints (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### simpleCheckQRREFPH()\n\n```typescript\nsimpleCheckQRREFPH() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects QC reference phone builds (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### simpleCheckBuild()\n\n```typescript\nsimpleCheckBuild() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects build host anomalies (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkGenymotion()\n\n```typescript\ncheckGenymotion() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects Genymotion emulator fingerprints (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkGeneric()\n\n```typescript\ncheckGeneric() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects generic emulator fingerprints (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### checkGoogleSDK()\n\n```typescript\ncheckGoogleSDK() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nDetects Google SDK emulator fingerprints (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### togetDeviceInfo()\n\n```typescript\ntogetDeviceInfo() =\u003e Promise\u003cDeviceInfo\u003e\n```\n\nReturns device information collected during detection.\n\nProvides additional context and metadata about the device that was\ngathered during the root detection process. Useful for debugging\nand logging purposes.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#deviceinfo\"\u003eDeviceInfo\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n**Since:** 1.0.0\n\n--------------------\n\n\n### isRootedWithEmulator()\n\n```typescript\nisRootedWithEmulator() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nExtends the default detection with emulator heuristics (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### isRootedWithBusyBoxWithEmulator()\n\n```typescript\nisRootedWithBusyBoxWithEmulator() =\u003e Promise\u003cDetectionResult\u003e\n```\n\nExtends the BusyBox detection with emulator heuristics (Android only).\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#detectionresult\"\u003eDetectionResult\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n--------------------\n\n\n### getPluginVersion()\n\n```typescript\ngetPluginVersion() =\u003e Promise\u003c{ version: string; }\u003e\n```\n\nGet the native Capacitor plugin version.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ version: string; }\u0026gt;\u003c/code\u003e\n\n**Since:** 1.0.0\n\n--------------------\n\n\n### Interfaces\n\n\n#### DetectionResult\n\nResult returned by root/jailbreak detection methods.\n\n| Prop         | Type                 | Description                                                                                                                 | Since |\n| ------------ | -------------------- | --------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **`result`** | \u003ccode\u003eboolean\u003c/code\u003e | `true` when the associated heuristic detects root/jailbreak artifacts. `false` when no root/jailbreak indicators are found. | 1.0.0 |\n\n\n#### DeviceInfo\n\nDevice information collected during detection.\n\n\u003c/docgen-api\u003e\n\n### Credits \n\nThis plugin was inspired by the work in https://github.com/WuglyakBolgoink/cordova-plugin-iroot\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCap-go%2Fcapacitor-is-root","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCap-go%2Fcapacitor-is-root","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCap-go%2Fcapacitor-is-root/lists"}