Migrate the Hypothesis engine from Python to Rust
Author: Liam-DeVoeCreated May 25, 2026Updated Sep 15, 2026
Labelsinternals
This epic-style issue tracks our work towards migrating the core Hypothesis engine from Python to Rust. Only the internal engine will change; nothing user-facing will change.
We are doing this for two reasons:
- Primarily, for interoperability with PBT in other languages. Our goal is to make the core of Hypothesis a shared rust library with a defined interface that other PBT frameworks can link against. We imagine a world in which one can write a PBT library in language X by deciding what the user-facing interface should be, and otherwise letting the Hypothesis backend handle input generation, shrinking, and replaying from the database. Hegel is one example that would benefit from this.
- Secondarily, for performance.
We do not intend for this change to be user-visible in any way. We are treating this as a minor, not a major, version bump.
(Fun fact: we have long toyed with the idea of porting the Hypothesis engine to Rust. Things have gotten better since then; the Rust<->Python ecosystem (e.g.) has matured, and @DRMacIver and I started Hegel, which would be a great consumer of this interface.)
Ecosystem issues
- https://github.com/numpy/numpy/issues/32101
- https://github.com/HypothesisWorks/hypothesis/issues/4823
- https://github.com/PyO3/pyo3/pull/6411#issuecomment-5684056841
Roadmap
- Ship a version of Hypothesis with a trivial amount of Rust code.
- port
floats.py - port isolated utils (junkdrawer, labels, etc)
- port
choice.py - ??? (TBD)
Source: HypothesisWorks/hypothesis