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

snapdrift

v0.5.0

Published

SnapDrift captures, compares, and reports UI drift for Playwright-based app checks.

Readme

SnapDrift

SnapDrift

CI Node License: MIT

SnapDrift captures full-page application frames, compares them against a known baseline, and reports drift directly in GitHub Actions.

SnapDrift is ready to integrate from public GitHub releases. Workflow examples below use the latest public tag for readability; security-conscious consumers can pin the resolved commit SHA instead.

What SnapDrift handles

  • Baseline capture on main
  • Pull request drift detection against the latest successful baseline
  • Route scoping from changed files
  • PR report upserts (with optional Snap dashboard link)
  • Drift enforcement through diff.mode
  • Pluggable backends: local filesystem (default) or hosted Snap (provider: "snap")
  • One-shot baseline migration between backends
  • Codemod that translates an existing Snap github-action workflow to snapdrift.json

You keep ownership of checkout, build, startup, readiness, and teardown. SnapDrift takes over once the app is reachable.

Quickstart

1. Add .github/snapdrift.json to your repo:

{
  "baselineArtifactName": "my-app-snapdrift-baseline",
  "workingDirectory": ".",
  "baseUrl": "http://127.0.0.1:8080",
  "resultsFile": "qa-artifacts/snapdrift/baseline/current/results.json",
  "manifestFile": "qa-artifacts/snapdrift/baseline/current/manifest.json",
  "screenshotsRoot": "qa-artifacts/snapdrift/baseline/current",
  "routes": [
    { "id": "home-desktop", "path": "/", "viewport": "desktop" },
    { "id": "home-mobile", "path": "/", "viewport": "mobile" }
  ],
  "diff": { "threshold": 0.01, "mode": "report-only" }
}

2. Publish a baseline on push to main:

- name: SnapDrift Baseline
  uses: ranacseruet/snapdrift/actions/[email protected]
  with:
    repo-config-path: .github/snapdrift.json

3. Run SnapDrift on pull requests:

- name: SnapDrift Report
  uses: ranacseruet/snapdrift/actions/[email protected]
  with:
    github-token: ${{ secrets.GITHUB_TOKEN }}
    repo-config-path: .github/snapdrift.json

That is the full integration. See the Integration Guide for workflow examples, permissions, compatibility notes, advanced overrides, and the hosted Snap backend (provider: "snap").

Local CLI

SnapDrift ships a snapdrift CLI for running captures, diffs, migrations, and config initialization locally against a running app — no GitHub Actions required. Use it during development to validate UI changes before pushing.

# Capture a baseline
snapdrift capture

# Compare against it after making UI changes
snapdrift diff --open

# Migrate local baselines to the hosted Snap backend
snapdrift migrate-baselines --to snap

# Translate an existing Snap github-action workflow into snapdrift.json
snapdrift init --from-snap-action .github/workflows/snap.yml

See the Local CLI guide for installation, all flags, directory layout, and examples.

Drift modes

Start with report-only while baselines settle. Move to fail-on-changes or stricter modes once the signal is stable.

| Mode | Stops the run when | |------|--------------------| | report-only | Never | | fail-on-changes | Any capture exceeds threshold | | fail-on-incomplete | Captures are missing, dimensions shift, or comparison errors occur | | strict | Any drift signal or incomplete comparison appears |

Current constraints

  • Ubuntu runners only (local CLI works on any OS Node 22+ supports)
  • Full-page capture only
  • Viewport presets: desktop (1440×900) and mobile (390×844), or custom { "width": number, "height": number }
  • One global diff.threshold
  • Dimension shifts are reported separately from pixel drift
  • Local provider writes artifacts to the runner filesystem; for a hosted backend with a dashboard and a shared baseline store, configure provider: "snap" (see the Integration Guide)

Docs