Runtime mobile security checks for React Native apps: root, jailbreak, debugger, emulator, hooking, app integrity, secure hardware, biometrics, network posture and screen capture — on Android and iOS, through a TurboModule, with zero dependencies.
Part of the React Native Security Toolkit.
Pre-1.0, and not yet validated on physical devices. The checks are implemented, unit-tested and documented, but have not been exercised against real rooted or jailbroken hardware. See validation status.
npm install react-native-security-toolkit
cd ios && pod installReact Native 0.79+ with the New Architecture, Android minSdk 24, iOS 15.1+. A native dependency
needs a rebuild — reloading Metro is not enough.
import { SecurityToolkit } from 'react-native-security-toolkit';
const report = await SecurityToolkit.checkAll();
report.risk.level; // 'minimal' | 'low' | 'medium' | 'high' | 'critical'
report.risk.contributors; // every signal that moved the score, and by how much
report.checks.root?.status; // 'secure' | 'detected' | 'unknown' | 'unavailable' | 'error'Individual checks return the evidence behind the verdict:
import { RootDetection } from 'react-native-security-toolkit';
const root = await RootDetection.getStatus();
root.confidence; // raised only by corroborating signals
root.signals; // each signal, its identifier, and whether it firedThe toolkit reports; your app decides. Nothing here blocks a user, terminates the process or shows UI:
const decision = await SecurityToolkit.evaluate({
blockOnRoot: true,
blockOnHooking: true,
minimumRiskLevel: 'high',
minimumConfidence: 'high', // ignore weak, uncorroborated detections
});The example app on the iOS Simulator: the risk score and its contributors, every check and its verdict, and a policy decision.
- No check here is bypass-proof. These are defence-in-depth signals, not guarantees. An attacker who controls the device can defeat individual checks, and often several at once.
unknownis neversecure. A probe that could not run says so, rather than reporting a clean device.- Real trust decisions belong on your server, informed by hardware-backed attestation — Play Integrity on Android, App Attest on iOS.
Every check is documented with its signals, confidence, false positives and negatives, platform limitations, and what your app should do about a result: docs/runtime.
No telemetry, no analytics, no device identifiers, no hidden network requests. This package declares no dependencies.
MIT © Muhammad Ahmad


