Changelog

v0.2.0 2026-09-26

Windtrap 0.2.0 is a complete rewrite of Windtrap. It keeps the shape of 0.1.0's API and rebuilds it on a stronger design: one runner for every kind of test, one seed for every generated value in a run, and failures kept as data that the report renders. It also fixes many correctness problems, listed below.

The main additions are stateful testing and mutation testing.

Windtrap now runs five kinds of test:

It measures a suite in two ways: coverage, as with Bisect_ppx, and mutation testing.

The core of a suite reads as before: test, group, equal and witnesses such as int and list keep their meaning, and so do let%expect_test and [%expect]. Around that core, 0.2.0 makes substantial changes, improvements and additions to the API. The API is flat, so lib/windtrap.mli documents all of it in one file.

See doc/manual/migrating-from-0.1.md for how to migrate from 0.1.0.

Changes that keep a 0.1 suite compiling

These changes compile without an error and change what a 0.1 suite does. Each one is also listed under its area below.

Declaring tests

Assertions

Property testing

Stateful testing

Baselines and expect tests

Resources and process state

Running tests

Coverage

Mutation testing

Packages and libraries

v0.1.0 2026-02-13

Windtrap is an all-in-one OCaml testing framework that unifies unit tests, property-based tests, snapshot tests, and expect tests under a single API. Instead of juggling multiple testing libraries, Windtrap gives you one cohesive package with a PPX for inline expect tests (ppx_windtrap).