Skip to content

ADR-0016: Build with hatchling, not uv_build

  • Status: accepted (amends ADR-0005)
  • Date: 2026-10-08
  • Deciders: maintainer

Context

ADR-0005 chose uv_build as the build backend. Homebrew installs Python formulas from source, including their build backends, and uv_build (and its maturin build dependency) are Rust: a Homebrew formula for ecsodus would need depends_on "rust" => :build, which pulls in the Rust and LLVM toolchains (several GB) for every user until the tap ships bottles (issue #9).

Decision

Build with hatchling (pure Python). [tool.hatch.build.targets.wheel] packages src/ecsodus; the sdist includes only src/ecsodus, README.md, LICENSE and pyproject.toml, as the uv_build sdist did. uv remains the development tool (uv sync, uv run, uv build, uv lock).

Consequences

The built wheel holds the same modules as 0.2.0, and the sdist the same files (plus .gitignore, which hatchling always adds). The Homebrew formula needs no Rust. The next release (0.2.1) carries the change; the tap points at it.