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

shadscan-vue

v0.3.3

Published

Audit shadcn-vue and shadcn-nuxt apps for missing UI fundamentals. Deterministic checks. Evidence. Agent-ready fixes. Vue port of shadscan.

Readme

shadscan-vue

Find the UI fundamentals your shadcn-vue app forgot.

Deterministic checks. Evidence. Agent-ready fixes. Static audit — no AI required.

shadscan-vue.geoql.in — rule catalog, docs, and changelog.

shadscan-vue audits shadcn-vue (Vue 3 + Vite) and shadcn-nuxt (Nuxt 4) applications for the fundamentals that are easy to skip and expensive to miss: theme wiring, command menus, route and error states, accessible controls, form feedback, metadata, and mobile behavior.

npx shadscan-vue

It never starts your app, never edits files, never calls a model, and never uploads your source. Every finding cites a file and a line.

What you get

shadscan-vue v0.1.0
my-app · nuxt · pnpm

Score 66/100 · Grade D

Foundation             ████████████████░░░░ 84
Interaction            ██████████░░░░░░░░░░ 52
States                 ████████████████░░░░ 84
Accessibility          ████████████░░░░░░░░ 61
Forms and Data Entry   ███░░░░░░░░░░░░░░░░░ 18
Production Polish      ████████████████░░░░ 78

Findings

  FAIL images-have-alt (accessibility, error)
    <img> is missing alternative text.
      app/pages/index.vue:23
      fix: Add an alt attribute describing the image, or bind :alt to dynamic content.

Scoring

62 rules across six weighted categories:

| Category | Weight | | -------------------- | -----: | | Foundation | 20 | | Interaction | 20 | | States | 20 | | Accessibility | 20 | | Forms and Data Entry | 10 | | Production Polish | 10 |

Findings fall into four buckets. Fixes are provable failures that cost points. Advisories are lower-confidence observations that never subtract points. Passes are verified. Not applicable rules leave the score untouched — a project without forms is not penalised for form rules.

Grades: A ≥ 90, B ≥ 80, C ≥ 70, D ≥ 60, otherwise F.

Usage

shadscan-vue [path]                      # audit a project (defaults to .)
shadscan-vue --json                      # machine-readable report
shadscan-vue --prompt                    # paste-ready prompt for an AI agent
shadscan-vue --category accessibility    # run one category
shadscan-vue --fail-under 70             # exit 1 below a threshold
shadscan-vue rules                       # print the rule catalog
shadscan-vue setup --pre-commit          # install a git pre-commit hook

Exit codes are 0 (completed) and 1 (threshold not met, or an error).

Continuous integration

- run: npx shadscan-vue --fail-under 70 --no-interactive

--fail-under also fails when the score is unassessed or when source coverage was partial, so a silently-skipped scan cannot pass a gate.

Illustrative code is skipped, because a deliberately minimal example documents an API rather than shipping a surface: demo/, demos/, example/, examples/, __registry__/, and underscore-prefixed directories, alongside tests, fixtures, stories, and generated files. Matching is on directory names, so a component named DemoBanner.vue is still audited.

There is also a composite action, which writes the score and every failing rule to the job summary:

- uses: vinayakkulkarni/shadscan-vue@v0
  with:
    fail-under: 70

It takes path, version, fail-under, category, and summary, and exposes score, grade, and findings-count as outputs. See the repository readme.

Agent handoff

--prompt emits a remediation brief with the machine-readable report embedded in a delimited block, marked as untrusted data rather than instructions.

Supported projects

| Adapter | Detected by | | ------------- | ----------------------------- | | nuxt | a nuxt dependency | | vite-vue | vue and vite dependencies | | generic-vue | a vue dependency |

shadcn components are recognised through components.json aliases, through the components/ui convention, and through shadcn-nuxt auto-imports.

Credits

shadscan-vue is a Vue and Nuxt port of shadscan by TheOrcDev, built with the original author's permission. The rule taxonomy, scoring model, and product concept originate there. See THIRD_PARTY_NOTICES.md.

License

MIT © Vinayak Kulkarni. Portions derived from shadscan, MIT © 2026 TheOrcDev.