mewt 3.0.1

Mutation testing framework with multi-language support
Documentation

Mewt

Mewt is a mutation testing tool. Mutation testing works by making small changes (mutations) to your source code — like replacing + with - or swapping true for false — and then running your test suite against each change. If your tests still pass after a mutation, that's a gap: the mutant "survived," meaning your tests didn't catch the change.

This tells you something code coverage alone can't: not just whether your tests execute a line, but whether they'd actually fail if that line were wrong.

Supported languages:

  • Go
  • JavaScript/TypeScript
  • Rust
  • Solidity

For details on how campaigns work under the hood, see How it works. To add support for a new language, see Adding a language.

Installation

Prebuilt binaries (recommended)

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/trailofbits/mewt/releases/latest/download/mewt-installer.sh | sh

To build from source instead, see Building from source.

Quick start

  • Mutate a single file (auto-detected language):
mewt run path/to/contract.rs
  • Mutate all supported files in a directory (recursive):
mewt run path/to/project
  • List available mutation slugs for a language:
mewt print mutations --language rust
  • Print all mutants for a target path:
mewt print mutants --target path/to/contract.rs
  • Show mutation test results (optionally filtered by target):
mewt results --target path/to/contract.rs
  • Test all mutants even if more severe ones were uncaught (disable skip optimization):
mewt run path/to/contract.rs --comprehensive

Configuration

Mewt reads configuration from the nearest mewt.toml found by walking up from the current working directory. CLI flags override config file values.

See Configuration for the full reference and src/example.toml for a commented example.

Examples

This repo includes example files you can try:

  • Go: tests/go/examples/hello-world.go
  • JavaScript/TypeScript: tests/javascript/examples/simple.js
  • Rust: tests/rust/examples/hello-world.rs
  • Solidity: tests/solidity/examples/hello-world.sol

Notes

  • Mixed-language projects are supported. When a directory is targeted, only files with supported extensions are considered.