Files
jackwener__opencli/docs/adapters/browser/npm.md
jakevin 55088bbb28 feat: 13 read adapters across 5 new sites + 4 extensions (round 3) (#1346)
New sites (8 commands):
- npm    : search / package / downloads (registry.npmjs.org + api.npmjs.org)
- pypi   : package / downloads (pypi.org + pypistats.org)
- crates : search / crate (crates.io)
- mdn    : search (developer.mozilla.org)
- nvd    : cve (services.nvd.nist.gov)

Extensions (5 commands; +1 dblp/author surfaced in index):
- hf            : spaces (Hugging Face Spaces by likes / created_at / last_modified)
- dblp          : venue (search dblp's venue registry by acronym/topic)
- coingecko     : derivatives (perpetual / futures markets, 24h volume)
- stackoverflow : related (related questions for a given question id)

All commands hit public unauthenticated endpoints (Strategy.PUBLIC, browser:false),
typed-fail-fast on bad inputs (no silent fallback / clamp), and round-trip listing
ids into their detail commands where applicable.

Audits (all green vs baseline):
- typed-error-lint        : 196 = 196 baseline, no new
- silent-column-drop      : 103 = 103 baseline, no new
- listing-id-pairing      : 13 advisory (was 12; +1 = dblp/venue with no
                            corresponding venue-detail command)

Doc coverage : 120/120 adapter dirs documented (+5 new doc pages, +4 updated)
Manifest     : 722 entries (was 709; +13 commands)

Live verified:
- npm search react / npm package react / npm downloads react --period last-week
- npm downloads react --period 2025-01-01:2025-01-05
- pypi package requests / pypi downloads requests --period recent / overall
- crates search tokio / crates crate serde
- mdn search fetch
- nvd cve CVE-2021-44228
- hf spaces --limit 3
- dblp venue ICLR
- coingecko derivatives --limit 3
- stackoverflow related 79935770 --limit 3
- typed-error sanity: invalid CVE id, bad npm name, bad --period
2026-05-06 13:14:41 +08:00

3.1 KiB
Raw Permalink Blame History

npm

Mode: 🌐 Public · Domain: registry.npmjs.org (+ api.npmjs.org for download stats)

Search and inspect packages on the public npm registry without auth or browser. Three commands cover discovery, single-package metadata, and download stats.

Commands

Command Description
opencli npm search <query> Search the public npm registry by keyword
opencli npm package <name> Single-package registry metadata (latest version, license, repo, maintainers)
opencli npm downloads <name> Download stats for one package over a fixed period or YYYY-MM-DD:YYYY-MM-DD range

Usage Examples

# Search the registry
opencli npm search react --limit 10
opencli npm search "graphql client" --limit 20

# Inspect a single package (use `name` from search rows)
opencli npm package react
opencli npm package @vercel/og

# Download stats for a fixed period
opencli npm downloads react --period last-week
opencli npm downloads react --period last-month
opencli npm downloads react --period last-year

# Custom date range (max 365 days, npm API limit)
opencli npm downloads react --period 2025-01-01:2025-01-31

# JSON output
opencli npm package react -f json

Output Columns

Command Columns
search rank, name, version, description, weeklyDownloads, dependents, license, publisher, updated, url
package name, latestVersion, description, license, homepage, repository, bugs, maintainers, keywords, created, modified, url
downloads rank, package, day, downloads (range) or rank, package, day, downloads for fixed periods (single row, day = last-week:start..end)

The name column from search round-trips into package and downloads.

Options

Option Description
query (positional) Free-text query (matches name / description / keywords / readme)
--limit Max results (1–250, default: 20)

package

Option Description
name (positional) npm package name (e.g. react, @vercel/og). Validates 1–214 chars and the npm naming rule.

downloads

Option Description
name (positional) npm package name
--period One of last-day, last-week, last-month, last-year, or a YYYY-MM-DD:YYYY-MM-DD range (default: last-week)

Caveats

  • The --period argument is validated upfront — anything that's neither one of the four named periods nor a valid YYYY-MM-DD:YYYY-MM-DD range raises ArgumentError (no silent fallback).
  • npm rate-limits the search and download APIs; HTTP 429 surfaces as a typed CommandExecutionError with a retry hint.
  • Download stats are intentionally a separate command from package. If the stats endpoint fails, the registry-metadata response from package is unaffected.
  • The package-name regex matches ^(?:@scope\/)?name$ (lowercase letters / digits / ._-), capped at 214 chars per npm's spec.

Prerequisites

  • No browser required — uses public registry endpoints.