nautechsystems/nautilus_trader

▲ 3,560 stars today★ 28,954⑂ 3,788

Production-grade Rust-native trading engine with deterministic event-driven architecture

28,954Star
3,788Fork
0Watch
0Issue
RustLanguage
-License
Created · last push · repository size 0 KB · default branch -

README

https://github.com/nautechsystems/nautilus_trader/blob/HEAD/NautilusTrader

rustc crates.io codspeed pythons pypi-version Downloads Discord

| Branch | Version | Status | | :-------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | master | version | build | | nightly | version | build | | develop | version | build |

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

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.

![nautilus-trader](https://github.com/nautechsystems/nautilus_trader/raw/develop/assets/nautilus-trader.png "nautilus-trader")

Features

![nautilus](https://github.com/nautechsystems/nautilus_trader/raw/develop/assets/nautilus-art.png "nautilus")
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 | status | Guide | | Betfair | BETFAIR | Sports Betting Exchange | status | Guide | | Binance | BINANCE | Crypto Exchange (CEX) | status | Guide | | BitMEX | BITMEX | Crypto Exchange (CEX) | status | Guide | | Bybit | BYBIT | Crypto Exchange (CEX) | status | Guide | | Coinbase | COINBASE | Crypto Exchange (CEX) | status | Guide | | Databento | DATABENTO | Data Provider | status | Guide | | Deribit | DERIBIT | Crypto Exchange (CEX) | status | Guide | | Derive | DERIVE | Crypto Exchange (DEX) | status | Guide | | dYdX | DYDX | Crypto Exchange (DEX) | status | Guide | | Hyperliquid | HYPERLIQUID | Crypto Exchange (DEX) | status | Guide | | Interactive Brokers | INTERACTIVE_BROKERS | Brokerage (multi-venue) | status | Guide | | Kraken | KRAKEN | Crypto Exchange (CEX) | status | Guide | | Lighter | LIGHTER | Crypto Exchange (DEX) | status | Guide | | Lighter on Robinhood | LIGHTER_ROBINHOOD | Crypto Exchange (DEX) | status | Guide | | OKX | OKX | Crypto Exchange (CEX) | status | Guide | | Polymarket | POLYMARKET | Prediction Market (DEX) | status | Guide | | Tardis | TARDIS | Crypto Data Provider | status | Guide |

For Lighter on Robinhood, LIGHTER_ROBINHOOD is the venue and explicit client ID to register. The shared Lighter factory keeps LIGHTER as its compatibility default.

Status

See the Integrations documentation for further details.

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

OpenSSF Scorecard

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:

lock files; protected branches require signed commits and passing CI; release tags are immutable; and Rust dependencies are sourced only from crates.io. Python packages install from wheels only, new dependency and tooling versions observe a publication cooldown before adoption, cargo-vet audits Rust provenance, and cargo-deny checks Rust dependencies against an allow list of licenses compatible with NautilusTrader's LGPL-3.0-only license. CodeQL runs on PRs to 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. with egress allow-listing, Python artifacts carry SLSA build provenance, container images are Sigstore-signed with attested SPDX SBOMs, and PyPI and crates.io publishing uses OIDC Trusted Publishing gated to a protected release environment that never runs pull request or fork code. aws-lc-rs, the Rust binding for AWS-LC, with Ed25519 signing via ed25519-dalek.

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.

[!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.

[!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/u128 via 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-url instead of --index-url if 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:

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/.*

More Today's Trending projects

1

debpalash / VoiceStudio

Python★ 29,840⑂ 3,606▲ 2,776 stars
2

JustVugg / colibri

C★ 32,609⑂ 3,430▲ 2,173 stars
3

bilawalsidhu / gods-eye-view

JavaScript★ 33,945⑂ 6,772▲ 1,831 stars
4

alibaba / open-code-review

Go★ 26,516⑂ 1,906▲ 1,571 stars
5

ever-co / ever-gauzy

TypeScript★ 6,164⑂ 994▲ 1,130 stars
6

pacifio / atlas

Rust★ 4,440⑂ 274▲ 1,091 stars