NautilusTrader is officially supported for Python 3.12-3.14 on the following 64-bit platforms:
| Operating System | Supported Versions | CPU Architecture |
|---|---|---|
| Linux (Ubuntu) | 22.04 and later | x86_64 |
| Linux (Ubuntu) | 22.04 and later | ARM64 |
| macOS | 15.0 and later | ARM64 |
| Windows Server | 2022 and later | x86_64 |
:::note NautilusTrader may work on other platforms, but only those listed above are regularly used by developers and tested in CI. :::
Continuous CI coverage comes from the GitHub Actions runners we build on:
Linux (Ubuntu)builds currently pin toubuntu-22.04to keep glibc 2.35 compatibility even asubuntu-latestmoves ahead.macOS (ARM64)builds run onmacos-latest, so support tracks that runner image as it moves ahead.Windows (x86_64)builds currently pin towindows-2022to keep the toolchain stable.
On Linux, confirm your glibc version with ldd --version and ensure it reports 2.35 or newer before proceeding.
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:
- Pre-built binary wheel from PyPI or the Nautech Systems package index.
- 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. :::
To install the latest nautilus_trader binary wheel (or sdist package) from PyPI:
uv pip install nautilus_traderPython v2 is the Rust + PyO3 package under python/. Release-candidate wheels publish to PyPI
using 2.0.0rcN versions while final v2 validation is in progress.
uv pip install --pre nautilus_traderThe --pre flag is required because these wheels are pre-release builds. The installed import name
is still nautilus_trader.
Run this command outside a NautilusTrader source checkout. The repository root uses an
exclude-newer uv policy for reproducible development, which can filter out newly published v2
wheels. Inside a source checkout, use Build Python v2 from source
instead.
Current v2 wheels target Python 3.12-3.14. Build from source when you need local Rust changes, a debug build, or a platform wheel that is not available.
Install optional dependencies as 'extras' for specific integrations:
betfair: Betfair adapter (integration) dependencies.docker: Needed for Docker when using the IB gateway (with the Interactive Brokers adapter).ib: Interactive Brokers adapter (integration) dependencies.polymarket: Polymarket adapter (integration) dependencies.visualization: Plotly-based interactive tearsheets and charts.
To install with specific extras:
uv pip install "nautilus_trader[docker,ib]"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 correspond to official releases of nautilus_trader on PyPI, and use standard versioning.
To install the latest stable release:
uv pip install nautilus_trader --index-url=https://packages.nautechsystems.io/simple:::tip
Use --extra-index-url instead of --index-url if you want uv to fall back to PyPI automatically.
:::
Development wheels are published 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 formatdev{date}+{build_number}(e.g.,1.208.0.dev20241212+7001).nightlywheels use the version formata{date}(alpha) (e.g.,1.208.0a20241212).
| Platform | Nightly | Develop |
|---|---|---|
Linux (x86_64) |
✓ | ✓ |
Linux (ARM64) |
✓ | - |
macOS (ARM64) |
✓ | - |
Windows (x86_64) |
✓ | - |
Note: Development wheels from the develop branch publish for Linux x86_64 only.
Windows, macOS, and Linux ARM64 builds run on the nightly schedule to keep CI feedback fast.
:::warning We do not recommend using development wheels in production environments, such as live trading controlling real capital. :::
By default, uv 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):
uv pip install nautilus_trader --pre --index-url=https://packages.nautechsystems.io/simpleTo install a specific development wheel (e.g., 1.221.0a20250912 for September 12, 2025):
uv pip install nautilus_trader==1.221.0a20250912 --index-url=https://packages.nautechsystems.io/simpleBranch development wheels for the v2 Rust + PyO3 package publish to a separate v2 index from
develop and nightly:
uv pip install --pre --index-url=https://packages.nautechsystems.io/v2/simple/ nautilus-traderThe installed import name is still nautilus_trader. Run this command outside a NautilusTrader
source checkout so the repository's exclude-newer uv policy does not filter out newly published
v2 wheels. Build from source when you need local Rust changes, a debug build, or a platform wheel
that is not available.
You can view all available versions of nautilus_trader on the package index.
To programmatically request and list available versions:
curl -s https://packages.nautechsystems.io/simple/nautilus-trader/index.html | grep -oP '(?<=<a href=")[^"]+(?=")' | awk -F'#' '{print $1}' | sortdevelopbranch wheels (.dev): Build and publish continuously with every merged commit.nightlybranch wheels (a): Build and publish daily when we automatically merge thedevelopbranch at 14:00 UTC (if there are changes).
developbranch wheels (.dev): We retain only the most recent wheel build.nightlybranch wheels (a): We retain only the 30 most recent wheel builds.
All release artifacts published by the project carry cryptographic attestations generated by the CI/CD pipeline:
- Python wheels and source distribution (PyPI, GitHub Releases, Nautech Systems package index): SLSA build provenance.
- Docker images (
ghcr.io/nautechsystems/nautilus_trader,ghcr.io/nautechsystems/jupyterlab): keyless cosign signatures plus SPDX SBOM attestations.
Both are issued via Sigstore and bound to a specific commit SHA, so verification ensures the artifact was produced by the official NautilusTrader GitHub Actions workflow and has not been tampered with since.
For step-by-step verification commands, see Verifying releases in SECURITY.md.
:::note
Verification requires the GitHub CLI (gh) for Python artifacts
and cosign for Docker images.
Development wheels from develop and nightly branches are also attested.
:::
It's possible to install from source using pip if you first install the build dependencies as specified in the pyproject.toml.
Install rustup (the Rust toolchain installer):
curl https://sh.rustup.rs -sSf | sh# Download and install rustup-init.exe from https://win.rustup.rs/x86_64
# Also install "Desktop development with C++" via Build Tools for Visual Studio 2022Verify: rustc --version
Enable cargo in the current shell:
source $HOME/.cargo/env# Start a new PowerShell sessionInstall clang (a C language frontend for LLVM). On Linux this also installs lld, which is configured as the Rust linker for faster builds:
sudo apt-get install clang lld# 1. Add Clang via Visual Studio Installer:
# Modify > C++ Clang tools for Windows (latest) > Modify
# 2. Add to PATH:
[System.Environment]::SetEnvironmentVariable('path', "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\x64\bin\;" + $env:Path,"User")Verify: clang --version
Install uv:
curl -LsSf https://astral.sh/uv/install.sh | shirm https://astral.sh/uv/install.ps1 | iexClone the source with git, and install from the project's root directory:
git clone --branch develop --depth 1 https://github.com/nautechsystems/nautilus_trader
cd nautilus_trader
uv sync --all-extrasFor development hosts and CI runner images, see the single source of truth for versions before installing pinned tools.
:::note
The --depth 1 flag fetches just the latest commit for a faster, lightweight clone.
:::
Install Cap'n Proto if you plan to enable the capnp Rust feature,
regenerate serialization schemas, or work on serialization code. Use the repository script on
Linux or macOS to install the pinned version from tools.toml:
./scripts/install-capnp.shVerify: capnp --version
:::note Cap'n Proto is a development dependency. It is not required when installing pre-built wheels. :::
Set environment variables for PyO3 compilation (Linux and macOS only). Run these commands from
the repository root after uv sync:
# Set the Python executable path for PyO3
export PYO3_PYTHON="$PWD/.venv/bin/python"
# Linux only: Set the library path for the uv-managed Python runtime
PYTHON_LIB_DIR="$("$PYO3_PYTHON" -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR"))')"
export LD_LIBRARY_PATH="$PYTHON_LIB_DIR${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
# Required for Rust tests when using uv-installed Python
export PYTHONHOME="$("$PYO3_PYTHON" -c 'import sys; print(sys.base_prefix)')":::note
The LD_LIBRARY_PATH export is Linux-specific and not needed on macOS.
The PYTHONHOME variable is required when running make cargo-test with a uv-installed Python.
Without it, tests that depend on PyO3 may fail to locate the Python runtime.
:::
This path builds the PyO3 package from the python/ directory and installs it into python/.venv.
Use it from a NautilusTrader source checkout, when a v2 development wheel is not available for your
platform, or when you need local Rust changes.
From the repository root:
make build-debug-v2This target syncs python/.venv, builds the Rust extension with maturin, and regenerates Python
type stubs. It uses target-v2/ for Cargo artifacts so it does not conflict with the legacy Python
build in target/.
Run a Python v2 example with the v2 environment:
cd python
.venv/bin/python examples/lighter/data_tester.py --lighter-environment testnetFor direct commands and test targets, see the Python v2 README.
To install a binary wheel from GitHub, first navigate to the latest release.
Download the appropriate .whl for your operating system and Python version, then run:
uv pip install <file-name>.whlNautilusTrader 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.
Use NautilusTrader only if you are prepared to adapt to these changes.
Using Redis with NautilusTrader is optional and only required if configured as the backend for a cache database or message bus.
:::info The minimum supported Redis version is 6.2 (required for streams functionality). :::
For a quick setup, we recommend using a Redis Docker container. You can find an example setup in the .docker directory,
or run the following command to start a container:
docker run -d --name redis -p 6379:6379 redis:latestThis command will:
- Pull the latest version of Redis from Docker Hub if it's not already downloaded.
- Run the container in detached mode (
-d). - Name the container
redisfor easy reference. - Expose Redis on the default port 6379, making it accessible to NautilusTrader on your machine.
To manage the Redis container:
- Start it with
docker start redis - Stop it with
docker stop redis
:::tip We recommend using Redis Insight as a GUI to visualize and debug Redis data efficiently. :::
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 Linux and macOS.
On Windows, only standard-precision (64-bit) Python wheels are available because MSVC's C/C++ frontend
does not support __int128, preventing the Cython/FFI layer from handling 128-bit integers.
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.
:::
The performance tradeoff is that standard-precision is ~3–5% faster in typical backtests, but has lower decimal precision and a smaller representable value range.
:::note Performance benchmarks comparing the modes are pending. :::
The precision mode is determined by:
- Setting the
HIGH_PRECISIONenvironment variable during compilation, and/or - Enabling the
high-precisionRust feature flag explicitly.
export HIGH_PRECISION=true
make install-debugexport HIGH_PRECISION=false
make install-debugTo enable high-precision (128-bit) mode in Rust, add the high-precision feature to your Cargo.toml:
[dependencies]
nautilus_core = { version = "*", features = ["high-precision"] }:::info See the Value Types specifications for more details. :::