One event model spans simulation and live execution
NautilusTrader is built around an event-driven trading engine rather than a notebook that later hands logic to another production system. Strategies can be written in Python, with Rust handling core data types, time, orders, risk, execution, portfolio state, and simulation. The same architecture is intended to run in research and live environments. Adapters cover several crypto exchanges, Interactive Brokers, Betfair, market-data providers, and other venues, with each integration carrying its own documented status.
The scope is enormous. Our commit 51f641d checkout contained 4,660 files, about 1,870,087 source lines, and occupied 113.2 MB. The repository has 14 CI workflow files, no Dockerfile, and no top-level tests directory according to our scan. Inline Rust tests and other layouts can exist without that directory, but the signal still matters for navigation. This is an engine and adapter ecosystem, not a compact strategy library.
Prebuilt wheels are the sensible evaluation path
The README recommends a supported Python version in a virtual environment and provides binary wheels, so users can try the engine without installing Rust. Source builders need a recent toolchain because the project's minimum Rust version generally follows current stable Rust. Linux wheel users must also check the documented glibc floor. Conda may work, but it is not officially supported. Optional visualization packages, Redis state, databases, and venue adapters add separate dependencies.
Our dependency install completed in 33 seconds and reported 863 packages. Compilation was a different story: the build did not finish within 900 seconds on 3 CPUs and 12 GB of RAM. That makes the wheel path more than a convenience for a first evaluation. Teams planning source patches, custom Rust components, or audited reproducible builds should reserve more compute and cache compiled dependencies in CI.
What happened when we ran it
We ran commit 51f641d in an unprivileged Debian container with 3 CPUs, 12 GB of RAM, the lab Rust image, and no secrets. Installation succeeded in 33 seconds. The build timed out at the 900-second cap. No compiler error appeared in the supplied result, so "timed out" is the finding; calling the build failed would overstate what the log shows.
The test command also reached 900 seconds without completing. Its final lines were still compiling project crates such as serialization, analysis, execution, and portfolio alongside DataFusion components. There was no pass count, failure count, or test assertion in the log tail. Our run therefore does not establish whether the suite passes at this commit. It establishes that a complete source verification did not fit within 15 minutes per step on the stated box.
The v2 cutover changes stored data and behavior
Release v1.231.0 is labeled beta and describes itself as the intended final 1.x release before the Rust and PyO3 v2 cutover, subject to final validation. The paired v2 wheels are release candidates. Migration notes cover changed identifiers, callbacks, collections, and order behavior. Some old catalog records cannot be read under new schemas without regeneration or migration. Both generations import under the same Python package name, so the release notes advise using separate environments.
That migration deserves more attention than our 33-second dependency install suggests. Copy production catalogs, caches, and order streams before testing. Replay known sessions and compare positions, balances, fees, reports, and generated orders. The README explicitly warns against prerelease and development wheels for live trading with real capital. Stable v1 remains the safer evaluation base until the workflows you use are confirmed on v2.
Live adapters need venue-specific safety drills
Open issue 4736 reports a Binance warm restart where reconciliation inserted an opposite synthetic fill, leaving the cache flat while the venue position remained open. Issue 4796 reports an Interactive Brokers v2 release-candidate connection attempt that left the tested Gateway API unresponsive until restart. These reports apply to named versions and configurations. They do not prove every adapter or restart is unsafe. They do show why a general backtest cannot validate live reconciliation.
GitHub recorded a push on August 26, 2026, with 27,866 stars and 119 combined issues and pull requests. Current activity includes adapter fixes, reconciliation work, and runtime changes. The 14 CI workflows and detailed security documentation show serious engineering investment. Still, our two 900-second timeouts leave source verification incomplete. Start with stable wheels, a paper account, recorded venue state, and forced restart and disconnect drills before allowing any automated system to control capital. Keep the venue's account and trade records as the source of truth during those drills, since cache agreement is what reconciliation must prove.

