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 realism

Every 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 seconds

When 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 replay

Manifests 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 friction

Signal 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.

Stack

The engine is structured as a Rust workspace exposed to Python via PyO3. Key dependencies are chosen for correctness and performance, not novelty.

Engine
RustApache ArrowRayonPyO3
Python interface
maturinNumPyPolarsPlotly
Data providers
BinanceBybitHyperliquiddYdXBitstampDeribitYahoo FinanceDukascopyPolymarketLondon Strategic EdgeDatabentoMassive

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:

You can
  • 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.
You can't
  • 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.