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

payload-security

v0.1.0

Published

Audit any Payload CMS instance for collections readable without auth, GraphQL introspection, user/login enumeration and field-level leaks (apiKey, email, hash) — and PROVE each leak live with an anonymous probe. No admin token needed for the keyless scan.

Readme

payload-security

Audit any Payload CMS instance for the misconfigurations that actually leak data — collections readable without auth, field-level leaks (apiKey / email / hash), user/login enumeration, open first-user registration, and GraphQL introspection — and prove each one live with an anonymous probe. Other checklists tell you what might be wrong; this fetches the bytes and shows you what is.

Run it in one line, no admin token, no install:

npx payload-security --url https://your-payload.example.com

🤝 Want it done for you? Fixed-scope audit — $99 / 24h: I verify each finding live and send a written report with the exact access-control fixes.

npm downloads license node deps

$ npx payload-security --url https://cms.example.com
1 critical, 1 high, 1 medium — 3 CONFIRMED via anonymous probe
  CRITICAL  /api/posts   readable without auth — 128 docs reachable
  CRITICAL  /api/users   leaks apiKey, email to anonymous reads
  MEDIUM    /api/graphql GraphQL introspection enabled in production

Why this exists

Payload is one of the fastest-growing TypeScript-native headless CMSs (now part of Vercel) — and it is not secure-by-default. Every collection's access.read must be set explicitly; the REST API at /api/{slug} and GraphQL at /api/graphql are exposed automatically. Payload's own docs warn that local-API operations override access control and that custom endpoints are not authenticated by default. The widely-shared 2026 write-up Payload CMS Security Best Practices: Top 10 Threats & Mitigation Strategies (u11d) puts it bluntly: "attackers scan APIs first, not your frontend" — and a huge share of Payload projects ship without proper read access on their collections.

The endpoint shape is predictable (/api/{kebab-slug}, /api/graphql), so proving a leak anonymously is trivial. payload-security runs those checks and confirms the real ones by issuing the exact unauthenticated request an attacker would — so you triage facts, not maybes.

What it checks

| Check | Severity | How it's confirmed | |---|---|---| | Collection readable without auth | critical | anonymous GET /api/{slug} returns docs | | Sensitive field leak (apiKey/email/hash/salt) | critical | a returned doc contains the field with a value | | /api/users auth-collection enumeration | high | anonymous GET /api/users returns user docs | | Open first-user registration | high | /api/users reachable and reports totalDocs:0 | | GraphQL introspection in prod | medium | __schema query answered at /api/graphql | | GraphQL playground in prod | medium | /api/graphql-playground served live |

Usage

# Probe a live instance (guesses common collection slugs)
npx payload-security --url https://cms.example.com

# Learn your exact collection slugs from your local repo, then probe
npx payload-security --url https://cms.example.com --discover ./my-payload-app

# Probe specific collections
npx payload-security --url https://cms.example.com --collections posts,media

# Write a shareable HTML report
npx payload-security --url https://cms.example.com --html report.html

# Static only (no requests sent)
npx payload-security --url https://cms.example.com --no-probe

Output is JSON on stdout (pipe it into CI) and a one-line summary on stderr. Exit is non-zero only on usage errors — gate your pipeline on the JSON summary.

Install (optional)

npm i -g payload-security
payload-security --url https://cms.example.com

Zero dependencies. Your data and credentials never leave your machine — every request goes straight from the tool to your Payload instance.

Sister tools

Same active-probe philosophy for the rest of the backend stack, all MIT:

strapi-security · directus-security · supabase-security · pocketbase-security · firebase-security · appwrite-security · nhost-security · convex-security

License

MIT © Renzo Madueno