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

readme-lint-cli

v1.0.0

Published

Lint your README.md for common quality issues. Zero dependencies. CI/CD ready.

Readme

readme-lint-cli

npm version License: MIT Node.js

Lint your README.md for common quality issues. Zero dependencies. CI/CD ready.

Catches missing titles, empty sections, dead links, placeholder text, inconsistent headings, and more. Helps you ship better documentation every time.

Installation

npm install -g readme-lint-cli

Or use it locally in a project:

npm install --save-dev readme-lint-cli

Usage

# Lint README.md in current directory
readme-lint

# Lint a specific file
readme-lint docs/GUIDE.md

# JSON output for CI pipelines
readme-lint --json

# Strict mode (exit 1 on any warning)
readme-lint --strict

# Auto-fix trailing spaces and heading levels
readme-lint --fix

# Use a custom config file
readme-lint --config .readmelintrc.json

CLI Options

| Flag | Description | |------|-------------| | -h, --help | Show help message | | -v, --version | Show version number | | --json | Output results as JSON | | --strict | Exit with code 1 on any warnings or errors | | --no-color | Disable ANSI color output | | --config <file> | Path to config file (.readmelintrc.json) | | --fix | Auto-fix trailing spaces and heading levels |

Rules

All 13 built-in rules with their default severity levels:

| Rule | Default | Description | |------|---------|-------------| | has-title | error | README must start with an H1 heading | | has-description | error | Must have text after the first heading | | no-empty-sections | error | No headings followed by another heading with no content | | no-dead-links | error | Detects empty, placeholder, or malformed URLs | | has-install | warning | Should have an Installation/Install/Getting Started section | | has-usage | warning | Should have a Usage/How to Use/Examples section | | has-license | warning | Should mention a license somewhere | | no-todo-placeholders | warning | No leftover placeholder markers in the document | | consistent-headings | warning | Heading levels should not skip (H1 to H3 without H2) | | has-code-blocks | warning | Technical READMEs should have at least one code block | | no-duplicate-headings | warning | No two headings with the exact same text | | no-trailing-spaces | info | Lines should not have trailing whitespace | | max-line-length | info | Warn on lines longer than 120 characters (configurable) |

Configuration

Create a .readmelintrc.json file in your project root to customize rules:

{
  "rules": {
    "no-dead-links": "error",
    "has-title": "error",
    "max-line-length": ["warning", { "max": 100 }],
    "has-code-blocks": "off",
    "no-trailing-spaces": "off"
  }
}

Severity levels: "error", "warning", "info", "off"

Rules with options use the array format: ["severity", { ...options }]

Output

Terminal output:

README.md
  L1   error    has-title          Missing H1 title at the start of the document
  L15  warning  no-empty-sections  Empty section: "Contributing" has no content
  L42  info     no-trailing-spaces Trailing whitespace found

3 problems (1 error, 1 warning, 1 info)

JSON output (with --json):

{
  "file": "README.md",
  "issues": [
    { "line": 1, "severity": "error", "rule": "has-title", "message": "Missing H1 title..." }
  ],
  "summary": { "total": 1, "errors": 1, "warnings": 0, "info": 0 }
}

CI/CD Integration

Add to your GitHub Actions workflow:

name: Lint README
on: [push, pull_request]

jobs:
  readme-lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '18'
      - run: npx readme-lint-cli --strict

Or add to your package.json scripts:

{
  "scripts": {
    "lint:readme": "readme-lint --strict"
  }
}

Auto-Fix

The --fix flag automatically corrects:

  • Trailing whitespace on all lines
  • Skipped heading levels (e.g., H1 followed by H3 becomes H1 followed by H2)
readme-lint --fix

Exit Codes

| Code | Meaning | |------|---------| | 0 | No errors (warnings/info may be present) | | 1 | Errors found, or warnings found in --strict mode |

License

MIT