
Security News
PyPI Expands Trusted Publishing to GitLab Self-Managed as Adoption Passes 25 Percent
PyPI adds Trusted Publishing support for GitLab Self-Managed as adoption reaches 25% of uploads
react-native-lupin
Advanced tools
Fast, beautiful CLI security scanner for React Native and Expo bundles. Detects API keys, secrets, and 60+ mobile security vulnerabilities.
Static security analysis for React Native and Expo applications.
Automated detection of security vulnerabilities in compiled JavaScript bundles, including API keys, secrets, insecure code patterns, and mobile-specific security issues.
# Install globally
npm install -g react-native-lupin
# Or run without installing
npx react-native-lupin
# Install globally
yarn global add react-native-lupin
# Or run without installing
yarn dlx react-native-lupin
Important: Lupin scans compiled JavaScript bundles, not source code. You must generate a bundle before scanning.
# Generate bundle for iOS
npx expo export --platform ios
# Generate bundle for Android
npx expo export --platform android
# Generate for both platforms
npx expo export
# Android
cd android && ./gradlew bundleRelease
# iOS
npx react-native bundle \
--platform ios \
--dev false \
--entry-file index.js \
--bundle-output ios/main.jsbundle
lupin
Auto-detects your project type and locates compiled bundles.
Note: JSON reports are generated automatically by default with filename lupin-report-{timestamp}.json.
lupin --bundle path/to/bundle.js
# Show only critical issues
lupin --show-level critical
# Show high and above
lupin --show-level high
lupin --no-json
lupin --json my-security-report.json
# Non-interactive, fail on high severity
lupin --scan-all --fail-level high
| Option | Description | Default |
|---|---|---|
-b, --bundle <path> | Path to specific bundle file | Auto-detect |
-t, --type <type> | Project type: expo or rn-cli | Auto-detect |
--json [file] | Generate JSON report (enabled by default) | lupin-report-{timestamp}.json |
--no-json | Disable automatic JSON generation | - |
--show-level <level> | Display threshold: info|low|medium|high|critical | medium |
--fail-level <level> | Exit code threshold | medium |
--scan-all | Scan all bundles without prompting | false |
--max-findings <n> | Limit number of findings | 5000 |
--no-color | Disable colored output | false |
-h, --help | Display help information | - |
API Keys & Credentials:
Code Execution & Storage:
eval() function usagenew Function() constructorConfiguration & Logging:
Development & Best Practices:
name: Security Scan
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Generate bundle (Expo)
run: npx expo export --platform ios
- name: Run security scan
run: npx react-native-lupin --scan-all --fail-level high
- name: Upload report
if: always()
uses: actions/upload-artifact@v3
with:
name: security-report
path: lupin-report-*.json
security-scan:
stage: test
image: node:18
script:
- npm install
- npx expo export --platform ios
- npx react-native-lupin --scan-all --fail-level high
artifacts:
when: always
paths:
- lupin-report-*.json
expire_in: 30 days
Add to eas.json:
{
"build": {
"production": {
"postExport": [
{
"command": "npx react-native-lupin --scan-all --fail-level high"
}
]
}
}
}
Add to package.json:
{
"scripts": {
"security": "lupin --show-level high",
"security:full": "lupin --show-level info",
"security:ci": "lupin --scan-all --fail-level high",
"prebuild": "npm run security:ci"
}
}
JSON reports are automatically generated by default with timestamped filenames. Each report contains detailed security findings:
{
"meta": {
"file": "dist/_expo/static/js/ios/entry-abc123.js",
"sizeBytes": 3051520,
"scannedAt": "2025-10-26T14:30:45.000Z",
"runtimeHint": "React Native (Hermes)",
"hasSourceMapURL": true
},
"findings": [
{
"id": "KEY-OPENAI",
"title": "OpenAI API Key",
"severity": "critical",
"message": "OpenAI API key detected. Remove immediately.",
"position": 12345,
"snippet": "...surrounding code...",
"match": "sk-proj-..."
}
],
"summary": {
"total": 184,
"severityBreakdown": {
"critical": 1,
"high": 8,
"medium": 175,
"low": 0,
"info": 0
},
"displayedOnScreen": 9,
"showLevel": "high"
}
}
For Development:
lupin --show-level high
Focus on critical and high severity issues during active development.
For Production:
lupin --scan-all --fail-level medium --json production-scan.json
Comprehensive scan with medium threshold for production deployments.
For Pre-commit:
lupin --fail-level critical
Block commits only for critical issues to maintain developer velocity.
SecureStore (Expo) or react-native-keychain for tokensencryptionKey, SQLCipher)console.log statements in production buildseval() or new Function() for dynamic code executionBased on analysis of production React Native applications:
| Issue | Frequency | Severity |
|---|---|---|
| AsyncStorage misuse (sensitive data) | 85% | High |
| Debug code in production | 70% | Medium |
| Console logging of credentials | 60% | Medium |
| HTTP URLs instead of HTTPS | 40% | Medium |
| Hardcoded API endpoints | 30% | Low |
| Exposed API keys | 15% | Critical |
| eval() usage | 10% | High |
| Unencrypted databases | 5% | High |
Contributions are welcome. To add security rules or report issues:
git checkout -b feature/new-rule)git commit -am 'Add new security rule')git push origin feature/new-rule)MIT © adnxy
For bug reports and feature requests, please use the issue tracker.
Star the repository if you find this tool useful for securing your React Native applications.
FAQs
Fast, beautiful CLI security scanner for React Native and Expo bundles. Detects API keys, secrets, and 60+ mobile security vulnerabilities.
The npm package react-native-lupin receives a total of 6 weekly downloads. As such, react-native-lupin popularity was classified as not popular.
We found that react-native-lupin demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
PyPI adds Trusted Publishing support for GitLab Self-Managed as adoption reaches 25% of uploads

Research
/Security News
A malicious Chrome extension posing as an Ethereum wallet steals seed phrases by encoding them into Sui transactions, enabling full wallet takeover.

Security News
Socket is heading to London! Stop by our booth or schedule a meeting to see what we've been working on.