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

@jameymcelveen/authup

v1.0.0

Published

Idempotent, config-driven auth runner for service CLIs — checks before it logs you in (npm, railway, vercel, stripe, gh, ...)

Downloads

127

Readme

authup

Validate, then log in to your service CLIs — in order, idempotently.

Every provider is checked first. If the check passes, nothing happens. Only a failing check triggers the login command, and the check is re-run afterwards to confirm it actually worked. Run it as often as you like; it only acts when something is actually logged out.

$ authup

authup · 6 providers · ~/.config/authup/config.json

  ✔ npm        jameymcelveen
  ✔ Railway    Logged in as Jamey McElveen ([email protected])
  ✔ Vercel     jameymcelveen
  ! Stripe     `stripe` is not installed
      install: brew install stripe/stripe-cli/stripe
  ✔ GitHub     github.com
  ✖ GoDaddy    not authenticated

4 already · 0 logged in · 2 needs attention

Install

npm install -g @jameymcelveen/authup
authup init          # optional: copy config to ~/.config/authup/config.json

Or from a clone:

cd authup && npm install -g .

init gives you a config you can edit without touching the repo. Skip it and the bundled config is used.

Usage

authup                     # check, then log in to whatever needs it
authup --check             # validate only, never launch a login
authup --force             # re-login even if already authenticated
authup --only vercel,gh    # just these
authup --skip godaddy      # all but these
authup --list              # show configured providers
authup --json              # machine-readable summary
authup --yes               # non-interactive; skips manual steps

Exit code is 0 when everything is authenticated, 1 otherwise — so it works in a shell profile or CI gate:

authup --check --yes || echo "run authup"

Config

Resolution order, first match wins:

  1. --config <path>
  2. $AUTHUP_CONFIG
  3. ./authup.config.json (project-local)
  4. ~/.config/authup/config.json
  5. the bundled default

Providers run in array order.

{
  "providers": [
    {
      "id": "vercel",              // required, unique
      "name": "Vercel",            // display name (defaults to id)
      "bin": "vercel",             // optional: reported as "not installed" if missing
      "check": "vercel whoami",    // required: exit 0 == logged in
      "expect": "regex",           // optional: stdout/stderr must also match
      "login": "vercel login",     // runs attached to your terminal
      "installHint": "npm i -g vercel@latest",
      "docs": "https://vercel.com/docs/cli",
      "enabled": true              // set false to keep but skip
    }
  ]
}

Instead of login, a provider can declare manual for things with no CLI login:

{
  "id": "godaddy",
  "check": "...",
  "manual": {
    "instructions": ["Create a key at…", "export GODADDY_API_KEY=…"],
    "url": "https://developer.godaddy.com/keys"
  }
}

Manual steps print instructions and wait for Enter, then re-check. Under --yes or a non-TTY they're skipped and reported.

Provider notes

| id | check | login | | --------- | --------------------- | -------------- | | npm | npm whoami | npm login | | railway | railway whoami | railway login | | vercel | vercel whoami | vercel login | | stripe | stripe config --list + key match | stripe login | | gh | gh auth status | gh auth login | | godaddy | GoDaddy API ping with $GODADDY_API_KEY / $GODADDY_API_SECRET | manual — no official CLI exists |

Checks run with a 30s timeout and are treated as "logged out" if they hang.