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.
Install
Section titled “Install”xcode-select --install # clang + linkercurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shcurl -LsSf https://astral.sh/uv/install.sh | shGit ships with the Command Line Tools installed by the first command.
Debian / Ubuntu
Section titled “Debian / Ubuntu”sudo apt-get update && sudo apt-get install -y build-essential git curlcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shcurl -LsSf https://astral.sh/uv/install.sh | shbuild-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.
Windows
Section titled “Windows”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.
Verify
Section titled “Verify”rustc --version && cargo --version && uv --version && git --versionVersion floors, and why
Section titled “Version floors, and why”| Tool | Floor | Where it is declared | Why |
|---|---|---|---|
| Rust | stable | dtolnay/rust-toolchain@stable in every CI workflow | No 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. |
| Python | 3.9 minimum, 3.11 recommended | requires-python = ">=3.9" in pyproject.toml | 3.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. |
uv | any recent release | not pinned | Every 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. |
| Node | 20 | node-version: 20 in .github/workflows/docs-pages.yml | Docs site only. Astro 5 requires Node 18.17+; CI uses 20. |
| Bun | latest | oven-sh/setup-bun@v2 in docs-pages.yml | Docs site only, and optional — see below. |
Rust dependencies that need no action
Section titled “Rust dependencies that need no action”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.
- Local Build Setup — build and test the Rust core
- Python Bindings Setup — build and import the Python package