CheckOps
StrykerJS
StrykerJS is the Apache-2.0 mutation testing framework for JavaScript and TypeScript, part of the Stryker Mutator family (with Stryker.NET and Stryker4s), supporting Jest, Vitest, Mocha, Karma and more.
Latest public signals
Not refreshed yet. Refresh reads the public site and, when the entry has a GitHub repository, the latest release.
Introduction
StrykerJS is a mutation testing framework for JavaScript and TypeScript. It is part of the Stryker Mutator family, which also includes Stryker.NET for C# and Stryker4s for Scala, sharing concepts, a common HTML report format and the Stryker Dashboard for publishing results. The JavaScript monorepo is licensed Apache-2.0; version 10.1.1 was released on 23 October 2026.
Mutation testing introduces small faults (mutants) into your code, such as replacing > with >=, changing && to ||, emptying a string, removing a block, or flipping a boolean, then runs your tests. If a test fails, the mutant is killed; if the tests still pass, the mutant survived, revealing a gap in your assertions. The percentage of killed mutants is the mutation score, a stronger signal of test quality than line coverage.
Stryker makes this practical for JavaScript through test runner plugins and performance features. It supports Jest, Vitest, Mocha, Karma, Jasmine, Cucumber and TAP-based runners through dedicated plugins, uses per-test coverage analysis so only relevant tests run for each mutant, can use mutant schemata (compiling all mutants into the code once and switching them at run time), and supports incremental mode, which reuses previous results and only tests changed code.
The README’s quickstart is npx stryker run for small projects, and npm init stryker (via the website quickstart) guides configuration for larger ones. Results appear in a clear HTML report showing each mutant in context, and can be uploaded to the Stryker Dashboard for badges and history.
How it compares: PIT is the equivalent for the JVM, mutmut and cosmic-ray for Python, Infection for PHP and cargo-mutants for Rust. Within JavaScript, Stryker is the established choice, with TypeScript support, checker plugins (for example a TypeScript checker that discards mutants that do not compile) and integrations for front-end frameworks.
In the quality loop, Stryker strengthens unit tests during development and can act as a release gate through break thresholds, typically on critical packages rather than an entire monorepo.
The source code is at stryker-mutator/stryker-js on GitHub under the Apache-2.0 licence, with about 3,400 stars; the most recent commit was on 30 October 2026.
For small projects the README suggests simply adding @stryker-mutator/core and running npx stryker run; by default it uses npm test as the test command and looks for files to mutate in the lib and src directories. All official StrykerJS packages, including runners and checkers, are maintained in a single monorepo.
Features
- Rich mutators: Arithmetic, equality, logical, conditional, string, array, regex, optional chaining and more.
- Test runner plugins: Jest, Vitest, Mocha, Karma, Jasmine, Cucumber and TAP-based runners.
- Per-test coverage: Runs only the tests that cover each mutant.
- Mutant schemata: Compiles mutants into the code once for speed.
- Incremental mode: Reuses previous results and re-tests only what changed.
- TypeScript checker: Discards mutants that cause type errors, saving time and noise.
- HTML report and dashboard: Interactive reports and optional publishing to the Stryker Dashboard.
- Thresholds:
high,lowandbreakthresholds to warn or fail builds.
Pros
- Makes test quality visible: Surviving mutants show exactly which lines lack meaningful assertions.
- Shared family: Similar experience across JavaScript, .NET and Scala.
- Free to use: Open source under the Apache-2.0 licence, so the core tool costs nothing to use.
- Actively maintained: The repository had commits as recent as 30 October 2026.
- Community: About 3,400 GitHub stars.
Cons
- Run time: Even with optimisations, large codebases take a long time; scope runs carefully.
- Equivalent mutants: Some survivors cannot be killed because they do not change behaviour.
- Configuration: Bundlers, monorepos and unusual test setups can need tuning.
- Score pressure: Chasing 100% can waste effort; focus on meaningful survivors.
Usage and Links (Example)
Initialise Stryker in an existing project (follow the prompts to pick your test runner):
npm init stryker
npx stryker run
A minimal stryker.config.json for Vitest:
{
"testRunner": "vitest",
"mutate": ["src/**/*.ts", "!src/**/*.test.ts"],
"reporters": ["html", "clear-text", "progress"],
"incremental": true,
"thresholds": { "high": 80, "low": 60, "break": 50 }
}
Open reports/mutation/mutation.html to inspect survivors. In CI, run incremental mode on pull requests and full runs nightly.
Practical tips:
- Start with one package or folder in
mutate, then expand. - Add the TypeScript checker for TypeScript projects.
- Treat each surviving mutant as a question: is there a missing test, or is the mutant equivalent?
Resources:
Pricing
StrykerJS is free and open source under the Apache-2.0 licence.
Recommended for?
- JavaScript and TypeScript teams who want to measure test effectiveness.
- Library maintainers with high coverage who suspect weak assertions.
- Teams protecting critical logic such as pricing, permissions or validation.
- Not a fit as a per-commit gate across a huge monorepo without scoping or incremental mode.
Conclusion
StrykerJS is the leading mutation testing tool for JavaScript and TypeScript, with broad runner support and serious performance optimisations.
Used thoughtfully, on the code that matters most, it turns ‘we have coverage’ into ‘our tests would catch this bug’.
Alternatives
Other tools on CheckOps that cover similar ground. Open a page, or compare one with StrykerJS side by side.
SStryker.NETStryker.NET is the Apache-2.0 mutation testing tool for C# and .NET from the Stryker Mutator project, run as the dotnet-stryker global tool with HTML reports, a dashboard and incremental runs.Compare with StrykerJS
PPIT (Pitest)PIT (Pitest) is an Apache-2.0 state-of-the-art mutation testing system for Java and the JVM that mutates bytecode to measure how well your tests detect faults, with Maven and Gradle plugins and HTML reports.Compare with StrykerJS
Mmutmutmutmut is a BSD-3-Clause mutation testing tool for Python that changes your code in small ways and reports which mutants your tests fail to kill, with a terminal UI for browsing results.Compare with StrykerJS
IInfectionInfection is a BSD-3-Clause AST-based mutation testing framework for PHP that measures test effectiveness with Mutation Score Indicator metrics, supporting PHPUnit, Pest, Codeception and phpspec.Compare with StrykerJS
Ccargo-mutantscargo-mutants is an MIT-licensed mutation testing tool for Rust that injects bugs into your code and reports which ones your tests miss, with nextest support, sharding and diff-based runs.Compare with StrykerJS
JJestJest is a free, open-source JavaScript test runner with zero-config defaults, mocks, and snapshot testing.Compare with StrykerJS