nautechsystems/nautilus_trader
Production-grade Rust-native trading engine with deterministic event-driven architecture
README
| Branch | Version | Status |
| :-------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| master | |
|
|
nightly | |
|
|
develop | |
|
| Platform | Rust | Python |
| :----------------- | :----- | :-------- |
| Linux (x86_64) | 1.98.1 | 3.12-3.14 |
| Linux (ARM64) | 1.98.1 | 3.12-3.14 |
| macOS (ARM64) | 1.98.1 | 3.12-3.14 |
| Windows (x86_64) | 1.98.1 | 3.12-3.14 |
- Docs:
- Website:
- Support: [email protected]
Introduction
NautilusTrader is an open-source, production-grade, Rust-native engine for multi-asset, multi-venue trading systems.
The system spans research, deterministic simulation, and live execution within a single event-driven architecture, with Python serving as the control plane for strategy logic, configuration, and orchestration.
This separation provides the performance and safety of a compiled trading engine with the flexibility of Python for system composition and strategy development. Trading systems can also be written entirely in Rust for mission-critical workloads.
The same strategy and execution-algorithm code can run across backtest and live systems, reducing deployment divergence. Live execution still introduces venue, transport, timing, persistence, external-activity, and reconciliation behavior that a simulation may not reproduce. See Backtest and live differences.
NautilusTrader is asset-class-agnostic. Any venue with a REST API or WebSocket feed can be integrated through modular adapters. Current integrations span crypto exchanges (CEX and DEX), traditional markets (FX, equities, futures, options), and betting exchanges.

Features
- Fast: Rust core with the mimalloc allocator and asynchronous networking using tokio.
- Reliable: Type- and thread-safety backed by Rust, with optional Redis-backed state persistence.
- Portable: Runs on Linux, macOS, and Windows. Deploy using Docker.
- Flexible: Modular adapters integrate any REST API or WebSocket feed.
- Advanced: Time in force
IOC,FOK,GTC,GTD,DAY,AT_THE_OPEN,AT_THE_CLOSE, advanced order types and conditional triggers. Execution instructionspost-only,reduce-only, and icebergs. Contingency orders includingOCO,OUO,OTO. - Customizable: User-defined components, or assemble entire systems from scratch using the cache and message bus.
- Backtesting: Multiple venues, instruments, and strategies simultaneously using historical quote tick, trade tick, bar, order book, and custom data with nanosecond resolution.
- Live: Identical strategy implementations between research and live deployment.
- Multi-venue: Run market-making and cross-venue strategies across multiple venues simultaneously.
- AI Training: Engine fast enough to train AI trading agents (RL/ES).
nautilus - from ancient Greek 'sailor' and naus 'ship'.
> *The nautilus shell consists of modular chambers with a growth factor which approximates a logarithmic spiral.
The idea is that this can be translated to the aesthetics of design and architecture.*
Why NautilusTrader?
Trading strategy research is often conducted in Python using vectorized approaches, while production trading systems are implemented separately using event-driven architectures in compiled languages.
NautilusTrader removes this separation.
A Rust-native core provides a deterministic event-driven runtime for both research and live execution, while Python serves as the control plane. The same architecture, execution semantics, and time model operate across both environments, allowing strategies to move from research to production without reimplementation.
Python bindings are provided via PyO3 for the Rust-native v2 runtime.
During the v2 transition, v1 receives only critical security backports on the develop_v1 branch.
See the v2 migration guide for migration steps and compatibility details.
No Rust toolchain is required to install prebuilt wheels.
This project makes the Soundness Pledge:
"The intent of this project is to be free of soundness bugs.
The developers will do their best to avoid them, and welcome help in analyzing and fixing them."
[!NOTE]
> MSRV: NautilusTrader relies heavily on improvements in the Rust language and compiler.
As a result, the Minimum Supported Rust Version (MSRV) is generally equal to the latest stable release of Rust.
Integrations
NautilusTrader is modularly designed to work with adapters, enabling connectivity to trading venues and data providers by translating their raw APIs into a unified interface and normalized domain model.
The following integrations are currently supported; see docs/integrations/ for details:
| Name | ID | Type | Status | Docs |
| :--------------------------------------------------------- | :-------------------- | :---------------------- | :--------------------------------------------------- | :------------------------------------------------ |
| AX Exchange | AX | Perpetuals Exchange | | Guide |
| Betfair |
BETFAIR | Sports Betting Exchange | | Guide |
| Binance |
BINANCE | Crypto Exchange (CEX) | | Guide |
| BitMEX |
BITMEX | Crypto Exchange (CEX) | | Guide |
| Bybit |
BYBIT | Crypto Exchange (CEX) | | Guide |
| Coinbase |
COINBASE | Crypto Exchange (CEX) | | Guide |
| Databento |
DATABENTO | Data Provider | | Guide |
| Deribit |
DERIBIT | Crypto Exchange (CEX) | | Guide |
| Derive |
DERIVE | Crypto Exchange (DEX) | | Guide |
| dYdX |
DYDX | Crypto Exchange (DEX) | | Guide |
| Hyperliquid |
HYPERLIQUID | Crypto Exchange (DEX) | | Guide |
| Interactive Brokers |
INTERACTIVE_BROKERS | Brokerage (multi-venue) | | Guide |
| Kraken |
KRAKEN | Crypto Exchange (CEX) | | Guide |
| Lighter |
LIGHTER | Crypto Exchange (DEX) | | Guide |
| Lighter on Robinhood |
LIGHTER_ROBINHOOD | Crypto Exchange (DEX) | | Guide |
| OKX |
OKX | Crypto Exchange (CEX) | | Guide |
| Polymarket |
POLYMARKET | Prediction Market (DEX) | | Guide |
| Tardis |
TARDIS | Crypto Data Provider | | Guide |
- ID: The default client ID for the integrations adapter clients.
- Type: The type of integration (often the venue type).
LIGHTER_ROBINHOOD is the venue and explicit client ID to register. The
shared Lighter factory keeps LIGHTER as its compatibility default.
Status
planned: Planned for future development.building: Under construction and likely not in a usable state.beta: Completed to a minimally working state and in a beta testing phase.stable: Stabilized feature set and API, the integration has been tested by both developers and users to a reasonable level (some bugs may still remain).
Roadmap
The Roadmap outlines NautilusTrader's strategic direction. Current priorities include stabilizing the Rust-native core, improving documentation, and enhancing code ergonomics.
The open-source project focuses on single-node backtesting and live trading for individual and small-team quantitative traders. UI dashboards, distributed orchestration, and built-in AI/ML tooling are out of scope to maintain focus on the core engine and ecosystem sustainability.
New integration proposals should start with an RFC issue to discuss suitability before submitting a PR. See Community-contributed integrations for guidelines.
Security
Security is a priority for the NautilusTrader project, and we value the work of those who help identify and resolve vulnerabilities. We apply layered controls across the development and release lifecycle, with signed releases, continuous vulnerability management, and transparent development practices:
- Source and review controls: CODEOWNERS gate critical infrastructure, dependency manifests, and
- Dependency intake: lock files pin every dependency with cryptographic checksums, third-party
LGPL-3.0-only
license.
- Scanning and fuzzing: Gitleaks secret screening and Zizmor Actions auditing run pre-commit;
master and pushes to nightly; cargo-audit, cargo-deny, cargo-vet,
OSV Scanner, and pip-audit run on audit-relevant PRs and daily schedules; cargo-fuzz targets cover
selected adapter and signing surfaces.
- Build and release integrity: GitHub Actions are pinned to commit SHAs, CI runners are hardened
release environment that never runs pull request or fork code.
- Runtime cryptography: TLS and most runtime cryptography use
The OpenSSF Scorecard badge above is one automated repository-health signal; it complements manual review, CI hardening, and security audits rather than replacing them.
Reporting a vulnerability
Report privately through GitHub Security Advisories, or email (PGP key available on request). We acknowledge reports within 48 hours and patch critical vulnerabilities within 30 days.
A careful vulnerability report takes real time and effort. We appreciate that, and unless you prefer to remain anonymous, we credit reporters in the relevant security advisory and release notes.
The Security Policy details scope, coordinated disclosure, and step-by-step release verification. The Security Architecture describes the release supply chain end-to-end. For the full policies, see the Responsible Disclosure and Supply Chain Security policies; CI/CD security is documented in .github/OVERVIEW.md.
Versioning and releases
[!WARNING]
> NautilusTrader is still under active development. Some features may be incomplete, and while
the API is becoming more stable, breaking changes can occur between releases.
We strive to document these changes in the release notes on a best-effort basis.
We aim to follow a bi-weekly release schedule, though experimental or larger features may cause delays.
Branches
We aim to maintain a stable, passing build across all branches.
master: Reflects the source code for the latest released version; recommended for production use.nightly: Daily snapshots of thedevelopbranch for early testing; merged at 14:00 UTC and as required.develop: Active development branch for contributors and feature work.
[!NOTE]
> The v2 release-candidate line is the transition toward a stable API for version 2.x.
Once this milestone is reached, we plan to implement a formal deprecation process for any API changes.
This approach allows us to maintain a rapid development pace for now.
Precision mode
NautilusTrader supports two precision modes for its core value types (Price, Quantity, Money),
which differ in their internal bit-width and maximum decimal precision.
- High-precision: 128-bit integers with up to 16 decimals of precision, and a larger value range.
- Standard-precision: 64-bit integers with up to 9 decimals of precision, and a smaller value range.
[!NOTE]
> By default, the official Python wheels ship in high-precision (128-bit) mode on all supported platforms.
> For pure Rust crates, high-precision works on all platforms (including Windows) since Rust handles
i128/u128via software emulation. The default is standard-precision unless you explicitly enable
the high-precision feature flag.
See the Installation Guide for further details.
Rust feature flag: To enable high-precision mode in Rust, add the high-precision feature to your Cargo.toml:
[dependencies]
nautilus_model = { version = "*", features = ["high-precision"] }
Installation
We recommend using the latest supported version of Python and installing nautilus_trader inside a virtual environment to isolate dependencies.
There are two supported ways to install:
1. Pre-built binary wheel from PyPI or the Nautech Systems package index. 2. Build from source.
[!TIP]
> We highly recommend installing using the uv package manager with a "vanilla" CPython.
> Conda and other Python distributions may work but aren't officially supported.
From PyPI
This repository and the documentation cover v2. To install the v2 release-candidate wheels from PyPI using Python's pip package manager:
pip install -U nautilus_trader --pre
The v2 release-candidate wheels use 2.0.0rcN versions and are intended for community testing
before the final 2.0.0 release. We do not recommend using release candidates in production
environments, such as live trading controlling real capital.
The --pre flag is required until 2.0.0 is released. Without it, pip installs the latest stable
v1 wheel, whose Python API differs from the v2 documentation:
# Installs the latest stable v1 wheel, which cannot run the v2 documentation
pip install -U nautilus_trader
Install optional dependencies for interactive tearsheets and charts with the visualization extra:
pip install -U "nautilus_trader[visualization]" --pre
See the Installation Guide for details.
From the Nautech Systems package index
The Nautech Systems package index (packages.nautechsystems.io) complies with PEP-503 and hosts both stable and development binary wheels for nautilus_trader.
This enables users to install either the latest stable release or pre-release versions for testing.
Stable wheels
Stable wheels correspond to official releases of nautilus_trader on PyPI, and use standard versioning.
To install the latest stable release:
pip install -U nautilus_trader --index-url=https://packages.nautechsystems.io/simple
[!TIP]
> Use--extra-index-urlinstead of--index-urlif you want pip to fall back to PyPI automatically.
Development wheels
The main package index publishes v2 development wheels from both the nightly and develop
branches, allowing users to test features and fixes ahead of stable releases.
This process also helps preserve compute resources and provides easy access to the exact binaries tested in CI pipelines, while adhering to PEP-440 versioning standards:
developwheels use the version suffix.devYYYYMMDD+run.nightlywheels use.devYYYYMMDDwhen the base version is already a pre-release, and
aYYYYMMDD otherwise.
| Platform | Develop | Nightly |
| :----------------- | :------ | :------ |
| Linux (x86_64) | ✓ | ✓ |
| Linux (ARM64) | - | ✓ |
| macOS (ARM64) | - | ✓ |
| Windows (x86_64) | - | ✓ |
[!WARNING]
> We do not recommend using development wheels in production environments, such as live trading controlling real capital.
Installation commands
By default, pip will install the latest stable release. Adding the --pre flag ensures that pre-release versions, including development wheels, are considered.
To install the latest available pre-release (including development wheels):
pip install -U nautilus_trader --pre --index-url=https://packages.nautechsystems.io/simple
Available versions
You can view all available versions of nautilus_trader on the package index.
To programmatically fetch and list available versions:
```bash curl -s https://packages.nautechsystems.io/simple/nautilus-trader/index.html | sed -n 's/.*
