QuickIK is a fast inverse kinematics library written in Rust, with Python and C++ bindings.
A series of Python tools are used for development (Python bindings build tools, linting, benchmark plotting, unit testing, etc.). These are provided in a uv-managed environment under devtools-pyenv/. This environment is unrelated to the QuickIK Python bindings, which lives under python/. The rest of the section assumes you have activated this environment:
cd devtools-pyenv && uv sync && source .venv/bin/activate- Rust core:
cargo build(add--workspaceto also build thepython/cppbindings crates and thebenchmark/crates). - Python bindings:
cd python && maturin develop --release– seedocs/getting-started/installation.mdfor prerequisites. - C++ bindings: CMake, from
cpp/– seedocs/getting-started/installation.md.
- Rust:
cargo fmt --check(format) andcargo clippy --workspace --all-targets(lint). - Python: with
devtools-pyenvactive, from that directory:ruff check ..(lint) andruff format ..(format). Config isruff.tomlat the repo root, auto-discovered – covers every.pyfile (python/tests/,benchmark/,devtools-pyenv/itself), but not the Python code blocks embedded in the docs site's Markdown pages.
- Rust:
cargo test --workspace(this also builds, but doesn't test, thepython/cppcrates, since neither has its own#[test]s). - C++:
./cpp/build/quickik_cpp_tests, built as part of the C++ bindings step above. - Python: with
devtools-pyenvactive and the bindings built (above),pytest python/tests/.
See .github/workflows/ci.yml for the exact commands CI runs.
See benchmark/README.md for running QuickIK's own (Rust/Python/C++) and the external libraries' (KDL, Pinocchio, RBDL) benchmarks, and aggregating results into the comparison charts shown on the docs site.
docs/build.sh serve # http://localhost:8000Rebuilds the Rust/Python/C++ API references and benchmark charts from your local checkout, then serves the site locally.