npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, πŸ‘‹, I’m Ryan HefnerΒ  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you πŸ™

Β© 2026 – Pkg Stats / Ryan Hefner

oopsec

v0.1.0

Published

😬 Your app got caught. Security auditor for React Native apps β€” finds secrets, leaks & vulnerabilities before hackers do.

Readme


"Turns out your React Native app has been walking around with its secrets exposed this whole time."

oopsec finds API keys, tokens, passwords, and security vulnerabilities in your React Native app β€” before hackers do. It even cracks open your APK to show you exactly what the outside world can see.

The Problem

When React Native builds your app, everything β€” including all your .env variables β€” gets bundled into a single unencrypted file inside the APK called index.android.bundle.

An APK is just a ZIP file wearing a disguise. Rename it. Unzip it. Walk right in.

oopsec does exactly that β€” so you can find the leaks before someone else does.

Quick Start

# Scan your project
npx oopsec

# The killer feature β€” scan your actual APK
npx oopsec --apk ./android/app/build/outputs/apk/release/app-release.apk

What It Finds

πŸ” Secrets & API Keys (30+ patterns)

  • Firebase, AWS, Stripe, Google, GitHub, Slack, Twilio, SendGrid, PubNub, Supabase, Sentry, Algolia
  • Hardcoded passwords, JWT tokens, Bearer tokens, private keys
  • Generic API key and secret assignments

πŸ“± React Native Specific Issues

  • AsyncStorage storing sensitive data (tokens, passwords) unencrypted
  • Cleartext HTTP URLs (non-localhost)
  • Unvalidated deep link handlers
  • console.log leaking sensitive data
  • WebView with JavaScript injection enabled
  • Sensitive data copied to clipboard
  • Unencrypted Realm/SQLite databases
  • Disabled SSL pinning

πŸ—οΈ Build Configuration

  • android:allowBackup="true" β€” lets anyone extract app data via USB
  • android:debuggable="true" β€” lets anyone attach a debugger
  • Cleartext traffic allowed in Android/iOS
  • Missing code obfuscation (ProGuard/R8)
  • Hardcoded keystore passwords
  • .env files not in .gitignore
  • iOS NSAllowsArbitraryLoads disabling ATS

πŸ“¦ Dependencies

  • Known CVEs via npm audit
  • Risky packages in production (debugger tools, dotenv bundlers)
  • Outdated React Native versions with known vulnerabilities
  • Missing lockfiles

πŸ’£ APK Deep Scan (The Killer Feature)

  • Extracts JS bundle from APK β€” shows what hackers actually see
  • Detects source maps shipped in production (exposes entire codebase)
  • Cross-references: if a secret is in your source AND in the APK bundle, it's confirmed exposed
  • Scans all .js, .json, .env, .pem, .key files inside the APK

Usage

# Basic scan of current directory
npx oopsec

# Scan a specific directory
npx oopsec --dir /path/to/your/rn-project

# Scan an APK file
npx oopsec --apk ./app-release.apk

# JSON output (for CI/CD pipelines)
npx oopsec --json

# Fail CI if critical or high issues found
npx oopsec --fail-on high

# Run specific scanners only
npx oopsec --scanners source,config

# Verbose output
npx oopsec --verbose

Example Output

  oopsec v0.1.0
  Your app got caught.

  ❌ CRITICAL  Firebase API Key
               src/config.js:12
               Google Firebase API key β€” can access Firebase services

  ❌ CRITICAL  Firebase API Key [CONFIRMED IN APK]
               Found in APK JS bundle β€” 100% exposed to the world

  ❌ HIGH      Sensitive Data in AsyncStorage
               src/auth/login.js:45
               AsyncStorage is unencrypted. Use react-native-keychain instead.

  ⚠️  MEDIUM   Android Backup Enabled
               android/app/src/main/AndroidManifest.xml
               allowBackup="true" allows USB data extraction

  βœ… PASSED    Dependencies
  βœ… PASSED    Log statements

  Score: 35/100

  2 Critical  1 High  1 Medium

  Your app has critical security issues that must be fixed before shipping.

Use in CI/CD

GitHub Actions

- name: Security Audit
  run: npx oopsec --fail-on high --json > security-report.json

As a pre-commit hook

{
  "husky": {
    "hooks": {
      "pre-commit": "npx oopsec --fail-on critical"
    }
  }
}

Programmatic API

const { audit } = require('oopsec');

const report = await audit({
  projectDir: './my-rn-app',
  apkPath: './app-release.apk',
});

console.log(`Score: ${report.score}/100`);
console.log(`Critical issues: ${report.stats.critical}`);

Why oopsec?

"Oops" + "OpSec" (Operational Security).

Because shipping your API keys to the world was probably an oops. 😬

Every mobile app is a published book β€” once it's out there, anyone can open it and read every page. oopsec makes sure there's nothing worth reading.

Contributing

See CONTRIBUTING.md for details on adding new scanners and patterns.

License

MIT