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

whodiskit

v1.1.0

Published

Ask a domain who it is. It usually answers.

Readme

whodis

Ask a domain who it is. It usually answers.

$ whodis google.com

██╗    ██╗██╗  ██╗ ██████╗ ██████╗ ██╗███████╗
██║    ██║██║  ██║██╔═══██╗██╔══██╗██║██╔════╝
██║ █╗ ██║███████║██║   ██║██║  ██║██║███████╗
██║███╗██║██╔══██║██║   ██║██║  ██║██║╚════██║
╚███╔███╔╝██║  ██║╚██████╔╝██████╔╝██║███████║
 ╚══╝╚══╝ ╚═╝  ╚═╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝

  Domain    google.com
  Redirect  → www.google.com
  IP        142.251.20.100 (+5 more)
  Response  361ms
  SSL       Google Trust Services · 66 days left
  DNS       Google
  Platform  Google
  Network   Google LLC · Frankfurt am Main, DE
  A record  142.251.20.100

What it does

You give it a domain. It looks up the IP, finds out where the website actually answers, measures how long that takes, and guesses who hosts it. Then it prints all of that in color, because plain text is for people with no joy.

  • Tries https, https://www., http and http://www. until something answers
  • Shows where you end up if the site redirects you
  • Warns in red if the site only speaks plain HTTP or has a broken SSL certificate
  • Shows who issued the SSL certificate and how many days are left, green above 30, yellow at 30 or less, red at 7 or less
  • Shows who runs the DNS of the domain (Cloudflare, AWS Route 53, Hetzner, …) from its nameservers
  • Detects the platform from response headers (Vercel, Netlify, Cloudflare, …) or from the network behind the IP (Hetzner, AWS, Google, …)
  • Tells you if the site sits behind a CDN like Cloudflare, Fastly or CloudFront, marked as proxied or likely proxied. If the real host is known it stays the platform and the CDN is shown as (via Cloudflare)
  • Shows the A record of the root domain and marks it as likely origin if the site is proxied but the root domain is not

Proxy detection

Each signal gives points. 5 or more is proxied, 3 or 4 is likely proxied.

| Signal | Points | |---|---| | IP is in the published range of a CDN | 5 | | IP belongs to a CDN network | 3 | | CDN header like cf-ray or x-amz-cf-id | 3 | | IP answers as the CDN when asked directly (--detailed only) | 2 | | server header names the CDN | 1 |

The IP ranges are a snapshot in src/cdn-ranges.js, so whodis does not need to download anything at runtime.

With --detailed the reasons are listed below the platform when a site counts as proxied:

    Platform    Cloudflare (proxied or hosted)
                ✓ IP in Cloudflare range
                ✓ cf-ray header
                ✓ direct IP answers as Cloudflare

Detailed view

whodis <domain> --detailed shows everything whodis knows, grouped by section.

  google.com

  HOSTING ─────────────────────────────────────────

    IPv4        6 addresses
                142.251.20.100    142.251.20.101    142.251.20.102
                142.251.20.113    142.251.20.138    142.251.20.139

    IPv6        1 address
                2a00:1450:4001:82f::200e

    Location    Frankfurt am Main, DE

    Platform    Google

    Network     Google LLC · AS15169

  WEBSITE ─────────────────────────────────────────

    Redirect    → www.google.com

    Protocol    HTTPS

    Response    361ms · gws

    SSL         Google Trust Services · 71 days left

  DNS & MAIL ──────────────────────────────────────

    DNS         Google

    Mail        Google Workspace

  DOMAIN ──────────────────────────────────────────

    Registrar   MarkMonitor Inc.

    Since       1997 (29 years)
  • IPv4 / IPv6: every address the domain resolves to
  • Origin: the A record of the root domain, only shown when the site is proxied but the root domain is not
  • Response: response time and the server header
  • Mail: who handles email, from the MX records (Google Workspace, Microsoft 365, Proton Mail, IONOS, …)
  • Registrar / Since: from the registry of the domain via RDAP. Some registries, like DENIC for .de, do not publish this, so the section is left out

The list of RDAP servers is a snapshot of the IANA bootstrap file in src/rdap-servers.js. Only registries that support HTTPS are used.

Install

npm install -g whodiskit

The package is called whodiskit, the command is whodis.

Usage

whodis <domain> [options]

Paste whatever you have. google.com, https://www.google.com/search?q=cats and GOOGLE.COM all work.

| Option | | |---|---| | --help, -h | show help | | --version, -v | show the version | | --detailed, -d | show everything, grouped by section |

Requirements

Node.js 18 or newer. No dependencies, no build step.

Privacy

Network and location info comes from ipinfo.io. The first IP of the domain you look up is sent there. Nothing else leaves your machine except the DNS lookups and the request to the site itself. With --detailed, one extra plain HTTP request goes to that IP directly, without the domain, and the domain is looked up at its own registry over RDAP to read the registrar and registration date. No third party lookup service is used.

Why

Because dig, curl -I and openssl s_client are three commands too many.

License

MIT. Do whatever you want with it. See LICENSE.