Skip to content

Development

Daniel Du edited this page Jun 9, 2026 · 1 revision

Development

Prerequisites

  • Rust 1.86+ (MSRV)
  • Python 3.9+ and maturin — for the Python bindings
  • Go 1.21+ — for the Go client
  • JDK 8+ and Maven — for the Java client

Rust core

cargo build --release
cargo test --all-features
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --check
cargo deny check            # advisories, licenses, bans, sources

Python bindings

The Python extension is built from the same crate with the python feature (configured in pyproject.toml); there is no separate sub-crate.

maturin develop            # build + install into the current venv (dev)
maturin build --release    # build a release wheel

Go client

cd clients/go
go test ./...
go vet ./...
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ./...   # cross-compiles freely

Java client

cd clients/java
mvn verify                 # compiles and runs tests (JDK 8/11/17 in CI)

Continuous integration

  • ci.yml — Rust check, fmt, clippy (-D warnings), test, cargo-deny, docs, Python wheel build, and an MSRV (1.86) check.
  • clients.yml — the Java client on a JDK 8 / 11 / 17 matrix, and the Go client (test, vet, cross-compile). Both run the shared conformance vectors.

Releases

Versioning has a single source of truth: the [package] version in Cargo.toml. pyproject.toml reads it dynamically, and the Python __version__, the crate, and the wheels therefore always agree.

The release workflow is tag-driven and reproducible:

  1. Bump the version in Cargo.toml, commit.
  2. Create a GitHub Release with a matching tag vX.Y.Z.
  3. A check-version job fails the release unless the tag equals the Cargo.toml version; then the crate is published to crates.io and wheels to PyPI at that version.

Clone this wiki locally