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

@redproof/stryker

v0.12.0

Published

Redproof adapter for Stryker mutation testing.

Readme

@redproof/stryker

Redproof adapter for Stryker mutation testing. It turns mutation score and undetected mutants into Redproof Rules, so you can prove your tests really catch broken code.

Part of Redproof. Redproof does not just run your guardrails. It proves they can fail.

Install

npm install --save-dev @redproof/stryker redproof @stryker-mutator/core

Use

// gates/test-strength.ts
import { stryker } from '@redproof/stryker';
import { defineGate } from 'redproof';

const adapter = stryker({
  // Optional: run Stryker from a package inside the Gate root.
  cwd: 'packages/parser',
  configFile: 'stryker.config.mjs',
  rules: {
    mutantsDetected: true,
    mutationScore: { minimum: 100 },
  },
});

export default defineGate({ id: 'test-strength', adapter });

cwd is relative to the Gate root and cannot resolve outside it, including through a symbolic link. configFile, acceptedMutantsFile, and Stryker's own relative paths are resolved from that working directory. A cwd that does not exist is reported as stryker-unavailable.

If a mature project intentionally carries surviving or uncovered mutants, use an accepted-mutant baseline instead of weakening the score until unrelated regressions fit under it. Select noNewUndetectedMutants in place of mutantsDetected. With both selected, every accepted mutant still breaches mutantsDetected.

const adapter = stryker({
  configFile: 'stryker.config.mjs',
  rules: {
    noNewUndetectedMutants: {
      acceptedMutantsFile: 'accepted-mutants.json',
    },
  },
});
[
  {
    "fileName": "src/parser.ts",
    "mutatorName": "EqualityOperator",
    "replacement": ">",
    "location": {
      "start": { "line": 4, "column": 10 },
      "end": { "line": 4, "column": 12 }
    },
    "reason": "Equivalent for the supported input domain."
  }
]

The baseline is a JSON array. Redproof resolves the file from the working directory and refuses a path that leaves the Gate root. Each fileName is relative to the working directory. The identity of a mutant is its file, its full start and end location, its mutator, and its replacement. This is the key Stryker uses in stryker-incremental.json, so you can copy an entry from that report or from the JSON reporter output. A different undetected mutant breaches the Rule even when the survivor count is unchanged. The optional reason is documentation and does not take part in matching.

Three cases REFUSE. A malformed, duplicate, or escaping entry refuses before Stryker runs. An accepted mutant that the tests now detect refuses, because the baseline would pass that mutant if it survived again. Remove the entry. An undetected mutant without a stable identity refuses, and no other Rule is evaluated in that run. The replacement text comes from Stryker's code generator, so a Stryker upgrade can change it and make entries stale.

The Adapter disables Stryker's reporters and logs while it runs. This keeps Redproof's text, JSON, and SARIF output as the only reporting stream. A Stryker failure is returned as REFUSE detail; rerun Stryker directly when you need its native debug log or mutation report. Mutant and baseline locations are reported relative to the Gate root, even when Stryker runs from a nested cwd.

Then run:

npx redproof check   # do the rules hold right now?
npx redproof prove   # can each rule actually fail?

Documentation

See the Redproof documentation.

License

Apache-2.0