docs/getting_started/installation.md
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 to ubuntu-22.04 to keep glibc 2.35 compatibility even as ubuntu-latest moves ahead.macOS (ARM64) builds run on macos-latest, so support tracks that runner image as it moves ahead.Windows (x86_64) builds currently pin to windows-2022 to 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:
:::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_trader
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:
develop wheels use the version format dev{date}+{build_number} (e.g., 1.208.0.dev20241212+7001).nightly wheels use the version format a{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/simple
To 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/simple
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}' | sort
develop branch wheels (.dev): Build and publish continuously with every merged commit.nightly branch wheels (a): Build and publish daily when we automatically merge the develop branch at 14:00 UTC (if there are changes).develop branch wheels (.dev): We retain only the most recent wheel build.nightly branch wheels (a): We retain only the 30 most recent wheel builds.All release artifacts (wheels and source distributions) published to PyPI, GitHub Releases, and the Nautech Systems package index include cryptographic attestations that prove their authenticity and build provenance.
These attestations are generated automatically during the CI/CD pipeline using SLSA build provenance, and can be verified to confirm:
To verify a wheel file using the GitHub CLI:
gh attestation verify nautilus_trader-1.220.0-*.whl --owner nautechsystems
This provides supply chain security by allowing you to cryptographically verify that the installed package came from the official NautilusTrader build process.
:::note
Attestation verification requires the GitHub CLI (gh) to be installed.
Development wheels from develop and nightly branches are also attested and can be verified the same way.
:::
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 2022
Verify: rustc --version
Enable cargo in the current shell:
source $HOME/.cargo/env
# Start a new PowerShell session
Install 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 | sh
irm https://astral.sh/uv/install.ps1 | iex
Clone 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-extras
:::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.sh
Verify: 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.
:::
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>.whl
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.
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:latest
This command will:
-d).redis for easy reference.To manage the Redis container:
docker start redisdocker 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.
:::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:
HIGH_PRECISION environment variable during compilation, and/orhigh-precision Rust feature flag explicitly.export HIGH_PRECISION=true
make install-debug
export HIGH_PRECISION=false
make install-debug
To 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. :::