Skip to content
ReviewedA human has read this page end to end. It has not been verified line by line against the code.

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 CI matrix (.github/workflows/) runs ubuntu-latest only, so a native Windows build is unverified by this project.

Terminal window
rustc --version && cargo --version && uv --version && git --version
ToolFloorWhere it is declaredWhy
Ruststabledtolnay/rust-toolchain@stable in every CI workflowNo MSRV is declared anywhere in this repo — there is no rust-version key in any Cargo.toml and no rust-toolchain.toml. Both crates are edition = "2021", and pyo3 0.23 / polars 0.46 pull the real floor well above edition 2021’s own 1.56. Treat “current stable” as the only supported answer, because that is the only one CI proves.
Python3.9 minimum, 3.11 recommendedrequires-python = ">=3.9" in pyproject.toml3.9 is the floor the package metadata will enforce at install time. 3.11 is what .github/workflows/python-bindings.yml actually builds and tests against, so it is the version with evidence behind it. See the caveat below.
uvany recent releasenot pinnedEvery just py-* recipe shells out to uv, and CI installs it via astral-sh/setup-uv@v5. It is the project’s only supported way to create the Python environment.
Node20node-version: 20 in .github/workflows/docs-pages.ymlDocs site only. Astro 5 requires Node 18.17+; CI uses 20.
Bunlatestoven-sh/setup-bun@v2 in docs-pages.ymlDocs site only, and optional — see below.

The workspace vendors a patched pyo3-polars (vendor/pyo3-polars, wired up by a [patch.crates-io] entry in the root Cargo.toml). It is checked in, so cargo build resolves it with no extra setup — but it does mean Cargo.lock is authoritative and you should not delete it.