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

@rasaboun/dispo

v0.1.11

Published

CLI to check domain availability without a paid API. RDAP first, WHOIS fallback.

Readme

dispo

skills.sh

CLI to check domain availability without a paid API. RDAP first, WHOIS fallback when RDAP is unavailable for the TLD.

Install

One-shot (no install)

npx @rasaboun/dispo google.com openai.io
bunx @rasaboun/dispo google.com openai.io

Global CLI

npm install -g @rasaboun/dispo
bun install -g @rasaboun/dispo

Then run from anywhere:

dispo wishspot.app google.com

Standalone binary (no Bun required at runtime)

bun run build          # dist/dispo for current platform
bun run build:all      # all platforms → dist/

Cross-compile targets: build:mac-arm64, build:mac-x64, build:linux-arm64, build:linux-x64.

Move the binary anywhere in your $PATH:

mv dist/dispo /usr/local/bin/dispo

Run from source

bun install
bun run bin/dispo.ts google.com

Optional global symlink (requires Bun):

bun link

Usage

dispo google.com openai.io anthropic.fr
echo "foo.com\nbar.io" | dispo
dispo --file domains.txt
dispo --json google.com openai.io
dispo --concurrency 3 --timeout 8000 google.com openai.io anthropic.fr
dispo --delay 1000 --tlds com,io,dev,app wishspot placepin
dispo --tlds com,app,co,io wishspot placepin
dispo -T dev,xyz,app foo bar

Output

Table by default:

DOMAIN                STATUS      SOURCE  CREATED     EXPIRES     TIME
--------------------  ----------  ------  ----------  ----------  ----
google.com            registered  rdap    15-09-1997  14-09-2028  83ms
openai.io             registered  whois   08-04-2015  -           893ms
zzz-nope-xyz.io       available   whois   -           -           890ms

CREATED / EXPIRES show DD-MM-YYYY by default (- when the registry doesn't supply them). Use --detail / -d for full ISO timestamps. --json always returns the raw registry timestamps as an array of { domain, status, source, httpStatus?, whoisServer?, createdDate?, expirationDate?, error?, durationMs }.

Status values

  • registered - domain exists
  • available - domain not registered
  • unknown - neither RDAP nor WHOIS could classify confidently

Exit codes

  • 0 - every domain resolved (registered or available)
  • 1 - argument / file error
  • 2 - at least one unknown

How it works

  1. RDAP bootstrap: Fetch the IANA RDAP DNS bootstrap file (https://data.iana.org/rdap/dns.json) once per process and map each TLD to its registry RDAP endpoint. If the IANA bootstrap fetch fails, rdap.org is used as a last-resort fallback.
  2. Registry RDAP: Query the registry endpoint directly. The HTTP code is authoritative (200=registered, 404=available).
  3. WHOIS fallback: When the TLD has no RDAP service or RDAP errors out, the CLI opens a TCP socket to whois.iana.org:43, follows the refer: referral to the TLD's WHOIS server, and classifies the response by matching common "no match" / "Domain Name:" patterns. WHOIS queries are serialized per server and retried once when a response is unclassifiable, which helps with registries that return empty responses under concurrent load.

Lookups are paced by default with a 500ms delay between starts to avoid registry bursts. Use --delay 0 for maximum speed, or a higher value such as --delay 1000 for conservative bulk checks.

Per-TLD overrides for non-default RDAP semantics live in src/tld-overrides.ts (empty today - current major registries follow the default rule).

AI agent skill

Install via skills.sh so any compatible AI agent automatically uses dispo when checking domain availability:

bunx skills add Rasaboun/dispo

Tests

bun test
bunx tsc --noEmit

Network calls are mocked; tests run offline.