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

jev-marshal

v0.1.0

Published

Semantic PR policy checks powered by Jev.

Readme

Jev Marshal

Jev Marshal checks pull requests against your repository rules.

Write each rule as a plain question. Jev Marshal reads the Git change and reports if the change complies.

Try it

You need Node.js 20 or later. The npm package is not published yet.

git clone https://github.com/LightningK0ala/jev-marshal.git
cd jev-marshal
npm ci
npm run build
node dist/cli.js init

The init command creates jev-marshal.yml.

Add your API key

For CI, set TYPESAFE_API_KEY in your secret store.

For local use, run:

node dist/cli.js auth set

Jev Marshal stores the key in your user configuration folder. It does not put the key in your repository.

Define rules

Edit jev-marshal.yml:

version: 1
model: jev-latest
base: origin/main
threshold: 0.7

rules:
  - id: adr-required
    question: Does this change include an ADR when it makes an important architectural decision?
    level: error
    message: Add an ADR for the architectural decision.

  - id: storybook-required
    question: Does this change update Storybook when it adds, removes, or materially changes a UI component, page, or screen?
    level: error
    message: Add or update the related Storybook stories.

Use error to block the check. Use warning to report a result without a block.

Run checks

Check the current branch against the configured base:

node dist/cli.js

Check staged changes:

node dist/cli.js --staged

Check another base:

node dist/cli.js --base origin/develop

View the exact request without an API call:

node dist/cli.js --dry-run

Use JSON output:

node dist/cli.js --format json

Use GitHub Actions

name: Jev Marshal

on:
  pull_request:

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: 22

      - run: npm ci
      - run: npm run build
      - run: node dist/cli.js
        env:
          TYPESAFE_API_KEY: ${{ secrets.TYPESAFE_API_KEY }}

Jev Marshal uses the pull request title, description, changed file list, and patch. It does not send the full repository.

Results

Interactive terminals use color and clear status markers to make findings easy to scan:

Jev Marshal
2 changed files · origin/main...HEAD

Results
✓ PASS    tests-required  96%
✗ FAIL    [error] docs-required  88%
  ↳ Update the documentation.

✗ Check failed
  1 passed · 1 violation
  1 blocking error

Each rule has one result:

  • compliant
  • non_compliant
  • not_applicable
  • unknown

An unknown result blocks an error rule. This prevents an incomplete patch from passing without review.

Color is disabled automatically when output is redirected or --format json is used. Set NO_COLOR=1 to disable color explicitly, or FORCE_COLOR=1 to enable it when the terminal is not detected automatically.

Exit code 0 means that no error rule failed. Exit code 1 means that an error rule failed. Exit code 2 means that the command could not complete.

License

MIT