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

@hillerstorm/wcl

v1.1.0

Published

Warcraft Logs CLI — fetch report data, search public logs, and verify sim damage calculations against real combat logs. PKCE auth, disk caching, rate-limit awareness, WoWSims db.json enrichment.

Readme

wcl — Warcraft Logs CLI

A command-line client for the Warcraft Logs GraphQL API with OAuth PKCE auth, disk caching, rate-limit awareness, and optional WoWSims database enrichment. Built for verifying sim damage calculations against real combat logs — but useful for any scripted WCL data access.

Also ships as an agent skill so coding agents (Claude Code, Cursor, etc.) can drive it.

Install

npm install -g @hillerstorm/wcl

Or from source:

git clone https://github.com/hillerstorm/wcl
cd wcl
npm install
npm run build
npm link   # puts `wcl` on your $PATH

Requires Node 22+.

Getting started

1. Register an API client at https://www.warcraftlogs.com/api/clients/:

  • Name: anything you like
  • Redirect URL: http://localhost:31337/callback
  • Tick Public Client (the CLI uses PKCE — no client secret involved)

2. Configure:

wcl init

Interactive prompt for your client ID and, optionally, per-expansion WoWSims repo paths (used to enrich responses with item/spell data from the sim's db.json — hit Enter to skip any you don't have). Re-run any time; type - at a prompt to clear a value.

3. Authenticate:

wcl auth

Opens your browser for the OAuth flow and stores tokens locally (0600). Re-run with --reset to start over.

4. Try it:

wcl quota                                          # rate-limit usage
wcl search --encounter "Gruul the Dragonkiller" --class hunter --spec beastmastery
wcl fights <reportCode> --boss                     # fight list for a report
wcl actors <reportCode> --class hunter             # resolve actor IDs
wcl events <reportCode> <fightId> --source "Playername" --summary
wcl player <reportCode> <fightId> "Playername"     # full player snapshot
wcl character "Playername" <server-slug> <region>  # zone rankings

All output is JSON (add --pretty for human-readable). Errors go to stderr as JSON with stable code values and exit codes.

Commands

| Command | Purpose | |---|---| | wcl auth [--reset] | OAuth PKCE flow | | wcl quota | Current rate-limit usage | | wcl query --file q.graphql [--var k=v] [--var k:=json]… | Raw GraphQL escape hatch | | wcl report <code> | Report metadata, fights, masterData | | wcl fights <code> | Compact fight table | | wcl actors <code> | Actor table with resolved pet owners | | wcl events <code> <fightId> | Filtered event stream, auto-paginated | | wcl fight <code> <fightId> | Fight metadata + damage-done table | | wcl player <code> <fightId> <name> | Player snapshot, casts, damage, buffs | | wcl cast-snapshot <code> <fightId> <name> | Full state snapshot around a single cast | | wcl gear <code> <fightId> <name> | Gear/enchants/gems/temp-enchants for a player (boss fights only) | | wcl search | Public-log discovery via rankings | | wcl character <name> <server> <region> | Character zone rankings | | wcl cache stats / wcl cache clear | Cache management |

Run any command with --help for full flags. Global flags: --instance / --expansion select the WCL host (retail, fresh, classic, vanilla, sod) and sim enrichment; --no-cache, --force, --pretty.

Data locations

| | Repo checkout | npm install | |---|---|---| | config.json, credentials.json | repo root (gitignored) | ~/.config/wcl/ | | response cache | <repo>/.cache/ | ~/.cache/wcl/ |

Override with $WCL_CONFIG_DIR, $WCL_CACHE_DIR, $WCL_CLIENT_ID, $WCL_WOWSIMS_ROOT.

Rate limits & caching

WCL grants a points-per-hour quota. Every response carries a rateLimit footer; the CLI refuses new requests above 95% usage unless --force is passed. Report-shaped data is cached on disk for 7 days, searches for 1 hour.

Using as an agent skill

The skill definition lives in skills/wcl/SKILL.md:

npx skills add hillerstorm/wcl

or symlink skills/wcl into your agent's skills directory (e.g. ~/.claude/skills/wcl). The skill expects the wcl binary on $PATH — install it via npm or from source as above.

Development

npm run dev -- quota   # run from TypeScript source (tsx)
npm test               # vitest
npm run typecheck      # tsc --noEmit
npm run build          # esbuild bundle → dist/cli.js

Attribution & terms

Data comes from Warcraft Logs, fetched through the official v2 GraphQL API. This is an unofficial tool — not affiliated with, sponsored, or endorsed by RPGLogs / Archon.

Your use of the API is subject to the RPGLogs API Terms of Service. In particular: every user registers their own API client (wcl init — no developer credentials ship with this project, and yours should stay out of any fork you publish), and commercial use of API data requires prior approval from RPGLogs.

License

MIT