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

@runespoorstack/scrub

v1.0.1

Published

The automated janitor for your codebase. Stop the rot, clean the debt, and migrate with confidence.

Readme

Overview

In modern development, adding a strict linting rule or a new static analysis tool to an existing project is a recipe for thousands of errors and developer burnout.

@runespoorstack/scrub (invoked via the scrub command) is a tool-agnostic CLI designed to manage "ignore" and "disable" comments. It enables a Continuous Fixing Methodology, allowing you to adopt strict standards (ESLint, TypeScript, Prettier, Stylelint, etc.) incrementally without breaking your CI or ruining your Git history.

Core Workflow

The tool operates on the "Stop the Bleed, Then Heal" principle:

  1. Freeze (scrub disable): Inject disabling comments into every existing file that violates your new rules. This allows your CI to pass immediately.
  2. Gate (scrub check-staged): Use a pre-commit hook to ensure that no new disabling comments enter the codebase.
  3. Clean (Incremental): As developers touch files for regular features or bugs, they are tasked with "scrubbing" the file—removing the disable comment and fixing the errors.

The Right Way vs Wrong Way

❌ The "Big Bang" Fix (Wrong Way)

You run an auto-fix on 500 files.

  • Result: Massive merge conflicts for everyone. You are now the "owner" of 10,000 lines of code in git blame. GitHub suggests you as a reviewer for every file in the project.

✅ The "Scrub" Migration (Correct Way)

You baseline the project with disabling comments.

  • Result: CI is green. No git blame pollution. Files are fixed naturally one by one by the people actually working on them. Progress is steady and zero-risk.

Command Reference

1. scrub disable

The "Baseline" Phase. Adds a disabling comment line to the top of all files in the project that match the provided regex pattern.

| Option | Description | Default | | --- | --- | --- | | -d, --disablingComment <comment> | The comment to add (e.g. /* eslint-disable */). | Required | | -r, --rootDir <path> | Path to the directory to add comments in. | ./ | | -p, --pattern <regex...> | Regex patterns to match files against. | \.[cm]?[jt]sx?$ |

Example:

scrub disable -d "/* eslint-disable */" -r "./src" -p "\\.[cm]?[jt]sx?$"

2. scrub check

The "Audit" Phase. Checks all files in the project for disabling comments and returns an error code if found.

| Option | Description | Default | | --- | --- | --- | | -d, --disablingComment <comment> | The comment string to search for. | Required | | -r, --rootDir <path> | Path to the directory to check. | ./ | | -p, --pattern <regex...> | Regex patterns to match files against. | \.[cm]?[jt]sx?$ |

Example:

scrub check -d "// @ts-nocheck"

3. scrub check-staged

The "Gatekeeper" Phase. Checks only staged files for disabling comments. Ideal for pre-commit hooks.

| Option | Description | Default | | --- | --- | --- | | -d, --disablingComment <comment> | The comment string to search for. | Required | | -r, --rootDir <path> | Path to the directory to check. | ./ | | -p, --pattern <regex...> | Regex patterns to match files against. | \.[cm]?[jt]sx?$ |

Example:

scrub check-staged -d "// @ts-nocheck"

Installation & Setup

Install

pnpm add --save-dev @runespoorstack/scrub

Configure Scripts

Add your baseline targets to package.json:

{
  "scripts": {
    "scrub:disable:eslint": "scrub disable --disablingComment '/* eslint-disable */'",
    "scrub:disable:ts": "scrub disable --disablingComment '// @ts-nocheck' --pattern '\\.ts$'",
    "scrub:check:eslint": "scrub check --disablingComment '/* eslint-disable */'",
    "scrub:check:ts": "scrub check --disablingComment '// @ts-nocheck'",
    "scrub:check-staged:eslint": "scrub check-staged --disablingComment '/* eslint-disable */'",
    "scrub:check-staged:ts": "scrub check-staged --disablingComment '// @ts-nocheck'",
  }
}

Integration with Git Hooks

Integrate scrub into your workflow using Husky to ensure long-term code quality.

Support & Contributing

We welcome contributions! Please see our CONTRIBUTING.md.

If this tool helps you clean your codebase without the headache: 📖 Buy Boris a book

Special Thanks

I want to say thank you to the best woman in the world, my wife Diana for her love, daily support, motivation and inspiration.