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:
- C++
- Go
- JavaScript/TypeScript
- Rust
- Solidity
- Sui Move
For details on how campaigns work under the hood, see
How it works. To add support for a new language, see
Adding a language. For mutation test suite
structure and shared test helper conventions, see
tests/README.md.
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/trailofbits/mewt/releases/latest/download/mewt-installer.sh | shPrebuilt installers are currently provided for macOS (aarch64) and Linux (x86_64). Windows is currently unsupported.
To build from source instead, see Building from source.
- 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 --comprehensiveMewt reads configuration from the nearest mewt.toml found by walking up from the current working directory. CLI flags override config file values.
You can also point to an explicit config file with --config path/to/mewt.toml.
See Configuration for the full reference and src/example.toml for a commented example.
This repo includes example files you can try:
- C++:
tests/cpp/example.cpp - Go:
tests/go/example.go - JavaScript/TypeScript/JSX/TSX:
tests/javascript/example.js(plusexample.ts,example.jsx,example.tsx) - Rust:
tests/rust/example.rs - Solidity:
tests/solidity/example.sol - Sui Move:
tests/sui_move/example.move
- Mixed-language projects are supported. When a directory is targeted, only files with supported extensions are considered.