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

scanrepo

v0.2.0

Published

Scan any GitHub or Bitbucket repo for malware, credential stealers, and crypto scams

Readme

scanrepo

Scan any GitHub or Bitbucket repo for malware, credential stealers and crypto scams — before you clone it.

npx scanrepo github.com/owner/repo

No install, no signup, no clone. One command, a verdict in seconds.

Why

A "recruiter" sends a take-home assignment. A trending repo promises a trading bot. Someone just needs you to run it locally real quick. Then npm install fires a postinstall that reads your browser profiles, SSH keys and wallet files — or a .vscode/tasks.json runs the moment you open the folder.

This is the check you run first, in the two seconds before you type git clone.

Usage

npx scanrepo github.com/owner/repo          # human-readable report
npx scanrepo bitbucket.org/ws/repo --json   # raw JSON on stdout
npx scanrepo <url> --token ghp_...          # GitHub PAT — full coverage on big repos
npx scanrepo <url> --no-publish             # don't save the result to scanrepo.dev
npx scanrepo <url> --no-color               # plain output for logs

Prefer it on your PATH: npm i -g scanrepo. Requires Node 18+.

Example

Risk Score: 100/100  MALICIOUS
────────────────────────────────────────────────
  ⚠  Created 3 days ago
  ℹ  Zero stars, forks, and issues. Common for throwaway scam repositories.

  Code Execution      █░░░░░░░░░░░░░░░  2/25
  File System Access  ███████████░░░░░  14/20
  Obfuscation         ████████████████  15/15
  Supply Chain        ██░░░░░░░░░░░░░░  2/15

Top findings:
  clipboard-read                src/dev/tauri-mock/clipboard-manager.ts
  drainer-secret-collection
  long-lines                    src/dev/tauri-mock/fs.ts
  high-entropy-strings          src/App.tsx

  github  owner/repo  ·  102/173 files scanned  ·  master

  ❌ DO NOT RUN

Exit codes

Script-friendly — the exit code fails your step for you, no parsing needed.

| Code | Meaning | | --- | --- | | 0 | safe / low — nothing matched | | 1 | suspicious, an inconclusive scan, or a scan error | | 2 | dangerous / malicious — do not run it |

An inconclusive result means too few of the repo's files could be read to stand behind a clean verdict. It prints INCONCLUSIVE with the coverage percentage and exits 1 rather than handing you a green light the scan never earned.

In CI:

- name: Scan before running third-party code
  run: npx scanrepo github.com/${{ github.repository }}

What it detects

A static rules engine scores the repo across six categories:

| Category | Examples | | --- | --- | | Code execution | eval, Function(), child_process, vm abuse | | Network exfiltration | fetch-then-eval, hardcoded IPs, suspicious domains | | Filesystem access | browser profile theft, wallet files, SSH credential reads | | Obfuscation | base64 payloads, hex blobs, string-decode chains, entropy | | Supply chain | postinstall scripts, known-malicious dependencies | | Web vulnerabilities | XSS sinks, open redirects |

On top of the rules: entropy analysis, an import/reachability graph, repo age and popularity signals, and a curated IoC list of known-malicious repos and accounts. Scores roll up to 0–100 and a verdict — safe · low · suspicious · dangerous · malicious.

Limitations

Read the score as evidence found, not as a safety guarantee.

  • Static analysis only. Heavily obfuscated malware can evade pattern matching. safe means no known pattern matched.
  • Public repos only. Private repos are not supported.
  • Rate limits shape coverage. Anonymous GitHub/Bitbucket API limits can cut a large scan short — pass --token (or set GITHUB_TOKEN) for full coverage.
  • Results are published to scanrepo.dev so others benefit from the scan. Opt out per run with --no-publish.

Related

MIT © Ruben Marcus