Built for researchers who ship
Manifold-BT started from a simple frustration: existing backtesting tools force you to choose between speed and correctness. That's a false trade-off, so we wrote the engine in Rust and wrapped it in Python.
Why this exists
Most backtesting frameworks were designed when a year of daily bars was a "large" dataset. They work fine for prototyping, until you need realistic execution modeling, sub-minute resolution, or parameter sweeps across thousands of combinations.
At that point, Python-native frameworks hit a wall. You start cutting corners: skip the walk-forward, assume zero slippage, test fewer parameters. Research quality suffers.
Manifold-BT takes a different approach. The core engine is Rust, operating on Apache Arrow columnar arrays with zero-copy semantics. Indicators, simulation, and metrics run with sub-second single-shot backtests and 512K-combo sweeps in seconds.
But speed alone isn't the point. The real value is what speed enables: running a full walk-forward on every idea, testing execution assumptions properly, and never skipping the robustness checks because they "take too long."
Design principles
Correctness first
execution realismEvery fill, every fee, every funding payment is modeled explicitly. We'd rather surface an uncomfortable result than hide it behind optimistic assumptions.
Speed enables rigor
512K combos in secondsWhen a full walk-forward takes seconds instead of hours, you actually run it. Performance isn't a feature, it's what makes good research habits practical.
Reproducibility by default
deterministic replayManifests pin data versions, parameters, and the engine version. Replayed on that version, a result comes back identical, bit for bit.
Python where it matters
zero frictionSignal logic, analysis, and visualization stay in Python. The heavy lifting happens in Rust, invisible to the researcher. No context-switching required.
Check a result yourself
You do not have to take a backtest on trust. Each check below runs on your own machine, against the package you installed from PyPI. Replay any run from the manifest it carries, reproduce the recorded golden result, read the fill rules and the unfavourable choice each one makes, compare fills with vectorbt, test a strategy for look-ahead by corrupting the future and checking that the past does not move, and run the test suite and the benchmark yourself.
- Replay a run from its manifest: replay()
- Reproduce a recorded result: Golden test
- Read the fill rules: Execution semantics
- Compare fills with vectorbt: Parity test
- Test for look-ahead: Look-ahead example
- Run the suite and the benchmark: Benchmark harness
Stack
The engine is structured as a Rust workspace exposed to Python via PyO3. Key dependencies are chosen for correctness and performance, not novelty.
Project record
Every line below links to a public source, so you can check it instead of taking our word for it.
- Who builds it
- Manifold-BT is built and maintained by Jimmy Mouchlach (@Jimmy7892 on GitHub), the author of every human commit in the public repository. Questions reach the maintainer directly on the Discord. LinkedIn
- Public since
- v0.1.0 shipped on March 17, 2026. 62 releases since, the latest v0.35.0 on November 12, 2026, each with release notes. GitHub releases
- Release history
- The full history, from v0.1.0 onward, is tagged on GitHub with what changed in each version. Release notes
- Tested on every push
- CI installs the published wheel from PyPI, exactly what pip install manifoldbt gives you, and runs the public test suite on Python 3.9 to 3.13. GitHub Actions
- Benchmarked in public
- vectorbt, RaptorBT and NautilusTrader are installed from PyPI in a public CI run, and their results are checked against ours before anything is timed. Benchmark results
- Adoption
- 4,677 downloads in the last 30 days, mirrors excluded. pypistats
- Support
- Bugs go to the public issue tracker, questions to the Discord. GitHub issues
What is open, what is compiled, and how to check it
The Python package, its tests, the examples and the benchmark harness are public on GitHub, open source under Apache 2.0. The Rust engine ships compiled inside the wheel. You don't have to take its numbers on trust: three checks below run on the wheel anyone installs from PyPI.
Parity in public CI
Before anything is timed, the benchmark run checks that vectorbt and Manifold-BT produce the same final equity, round trips and fees on the same strategy, and the same drawdown where the workload reports one. The run and its logs are public.
Documented fill rules
Ambiguous cases are written down, not left to the engine: when a bar touches both the stop and the target, the stop fills first. You can test every rule against your own expectations.
Bit-for-bit replay
Every result carries a manifest with the data hash, the parameters and the engine build. Rerun it and you get the same numbers, which makes a result something you can hand to someone else to check.
The licence, in plain words
Free to use, including commercially. The Python package, examples, tests and benchmarks are open source under Apache 2.0. The compiled engine inside the wheels is covered by the free Manifold-BT Engine License: no resale and no paid hosted service; its source is not published. What it means in practice:
- Use it at work, inside a fund or a company, for research that makes money.
- Modify the Python package and run it on your own machines and servers.
- Publish strategies, notebooks and results built with it.
- Sell the compiled engine, or a repackaged copy of it.
- Sell a hosted backtesting service whose value comes substantially from it.
- Reverse engineer the compiled engine.
Free core
Free to use, including commercially, with no account and no licence key. The Python package, examples, tests and benchmarks are open source on GitHub under Apache 2.0; the compiled engine inside the wheels is covered by the free Manifold-BT Engine License. Pro features add convenience, the core research capability is free.