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

@brennanbrown/jekyll-audit

v0.3.1

Published

CLI to audit Jekyll sites for performance, accessibility, SEO, links, and HTML validation.

Readme

jekyll-audit

CLI to audit Jekyll sites for performance, accessibility, SEO, links, and HTML validation.

Quick start

Requirements: Node >= 18, Ruby with Jekyll for builds (bundle exec jekyll build).

# install deps
npm install

# build TypeScript
npm run build

# show CLI help
node bin/jekyll-audit --help

# run the full audit pipeline (build -> serve -> audits -> reports)
node bin/jekyll-audit audit

# target an already running Jekyll server
node bin/jekyll-audit --baseUrl http://127.0.0.1:4000 audit

Config

Create jekyll-audit.config.js (optional):

/** @type {import('./dist/config/schema.js').AuditConfig} */
export default {
  jekyll: { buildDir: '_site', buildCommand: 'bundle exec jekyll build' },
  crawl: { useSitemap: true, maxPages: 50, paths: ['/'] },
  thresholds: {
    lighthouse: { performance: 0.8, seo: 0.9, 'best-practices': 0.9 },
    accessibility: { maxIssues: 0 },
    links: { maxBroken: 0 },
    html: { maxErrors: 0 },
  },
  reports: { formats: ['json'], outDir: 'reports' },
};

What it does

  • Builds your Jekyll site (JEKYLL_ENV=production)
  • Serves the built directory locally
  • Detects _config.yml baseurl and appends it to the served URL
  • Discovers URLs from sitemap.xml or falls back to crawl.paths
  • Runs audits:
    • Lighthouse (perf/seo/best-practices) → reports/lighthouse.json
    • Pa11y (accessibility) → reports/pa11y.json
    • Linkinator (broken links) → reports/links.json
    • html-validator (HTML errors) → reports/html.json
  • Writes reports/summary.json and exits non-zero if thresholds fail

Reports

  • JSON files written to reports/ by default
  • summary.json contains consolidated results and passed boolean

CLI Flags

Common examples (full list and details in docs/flags.html):

# Default lean run (summary outputs)
npx @brennanbrown/jekyll-audit audit

# Full Lighthouse with details and screenshots (heavier)
npx @brennanbrown/jekyll-audit audit --output full --includeDetails --includeScreenshots

# Faster link checks (internal only, tuned)
npx @brennanbrown/jekyll-audit audit --linksInternalOnly --linksConcurrency 200 --linksTimeout 15000

# Limit pages + disable sitemap
npx @brennanbrown/jekyll-audit audit --maxPages 20 --noSitemap

See full flag reference: https://brennanbrown.github.io/jekyll-audit/docs/flags.html

CI usage (GitHub Actions)

Example workflow .github/workflows/jekyll-audit.yml:

name: Jekyll Audit
on: [push, pull_request]
jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Ruby (only if Gemfile exists)
        if: hashFiles('**/Gemfile') != ''
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.2'
          bundler-cache: true
      - name: Install Jekyll deps (only if Gemfile exists)
        if: hashFiles('**/Gemfile') != ''
        run: |
          bundle config set --local path 'vendor/bundle'
          bundle install
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      - run: npm ci
      - run: npm run build
      - name: Run jekyll-audit
        run: node bin/jekyll-audit audit
      - name: Upload reports
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: jekyll-audit-reports
          path: reports/

Docs

  • Landing page: https://brennanbrown.github.io/jekyll-audit/
  • Flags reference: https://brennanbrown.github.io/jekyll-audit/docs/flags.html

Changelog

  • See CHANGELOG.md for version history and details.

Notes

  • You can bypass build/serve using --baseUrl to point at a dev server.
  • Thresholds control CI failure. Adjust per your needs in config.
  • The workflow only installs Ruby gems if a Gemfile is present, and uses bundle config set --local path 'vendor/bundle' instead of the deprecated --path flag.