Skip to content
AuthoredWritten by hand against the code; every example on it is executed by the docs checks. No human has reviewed this page yet.

Prerequisites

You need four things: a Rust toolchain, a C linker, uv, and Git. Node is needed only if you are working on the documentation site.

Terminal window
xcode-select --install # clang + linker
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
curl -LsSf https://astral.sh/uv/install.sh | sh

Git ships with the Command Line Tools installed by the first command.

Terminal window
sudo apt-get update && sudo apt-get install -y build-essential git curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
curl -LsSf https://astral.sh/uv/install.sh | sh

build-essential is not optional: it supplies cc, which rustc invokes as its linker. Without it every Rust build fails at the link step with linker 'cc' not found.

Use WSL2 and follow the Debian/Ubuntu instructions. The nightly workflow runs the core crate’s tests on windows-latest and macos-latest, but the Python extension is built and tested on ubuntu-latest only, so a native Windows build of the bindings is unverified by this project.

Terminal window
rustc --version && cargo --version && uv --version && git --version
ToolFloorWhere it is declaredWhy
Rustthe pinned toolchainrust-toolchain.toml (channel = "1.98.1")rustup reads rust-toolchain.toml in the repository root, so local builds and every CI job use the same compiler and the same clippy lints. No rust-version (MSRV) key is declared in any Cargo.toml; the pinned version is the only one CI proves.
Python3.11 minimum, 3.13 recommendedrequires-python = ">=3.11" in pyproject.toml3.11 is the floor the package metadata enforces at install time. The python jobs in .github/workflows/ci.yml build and test the extension on both 3.11 and 3.13 on every PR; 3.13 is what the justfile develops on. 3.12 is not tested.
uvany recent releasenot pinnedEvery just py-* recipe shells out to uv, and CI installs it via astral-sh/setup-uv@v7. It is the project’s only supported way to create the Python environment.
Node22.12not pinned (CI builds the site with Bun via oven-sh/setup-bun@v2)Docs site only. Astro 7 requires Node 22.12 or later; Bun works too.
Bunlatestoven-sh/setup-bun@v2 in docs-pages.ymlDocs site only, and optional — see below.

The Python extension crate (pyopenquant) passes polars DataFrames through pyo3-polars 0.28, which is built for one polars release (0.55) and one PyO3 release (0.29). The three are upgraded together, and openquant uses the same polars. The extension takes a frame from Python polars through Series._export, so it needs Python polars 1.28.1 or later (the pyproject.toml lower bound). Everything comes from crates.io; nothing is vendored.