libuipc
A Cross-Platform Modern C++20 Library of Unified Incremental Potential Contact — both C++ and Python APIs.
Website ➡️ spirimirror.github.io/libuipc-web ・ Samples ➡️ github.com/spiriMirror/libuipc-samples
Libuipc is a GPU-accelerated simulation library built around a unified Incremental Potential Contact framework. It couples rigid bodies (affine body dynamics), soft bodies (FEM), cloth, and threads in one scene with accurate, penetration-free frictional contact, and is designed to be naturally differentiable for ML, inverse dynamics, and robotics workflows. The whole pipeline — collision detection, contact assembly, and a fused-PCG linear solver with CUDA-graph replay and an optional MAS preconditioner — runs on the GPU.
We are actively developing Libuipc. Feedback and contributions are welcome!
Table of Contents
What is libuipc?
libuipc is organized in three layers: a friendly scene API on top, a reusable simulation core in the middle, and a fully-parallel CUDA backend underneath.
- Simulation Interface — Python and C++ APIs for building scenes: geometry IO (OBJ/MSH/URDF/glTF), constitutions (SNK elasticity, Baraff-Witkin cloth, shell bending, ABD affine bodies, joint systems), contact tabulars, animation scripting, and a Polyscope-based GUI.
- Simulation Core — scene/world/engine abstractions with the incremental-potential Newton solver: implicit time integration, line search with continuous collision detection, frictional contact with scene-adaptive tolerances, and a scene-adaptive kappa corridor.
- CUDA Backend — GPU PCG linear solver with StiffGIPC MAS (Multi-Level Additive Schwarz) preconditioner, stackless-BVH collision detection, and per-constitution GPU kernels — all running without CPU round-trips in the solver loop.
Why libuipc
- Easy & Powerful: an intuitive, unified way to create and drive vivid simulation scenes; objects and constraints compose freely.
- Fast & Robust: fully GPU-parallel, with Stiff-GIPC-grade numerics and a contact model that stays penetration-free under stiff, frictional, coupled scenarios.
- High Flexibility: Python and C++ APIs, Linux and Windows, PyPI wheels and source builds.
- Fully Differentiable: differentiable simulation APIs for backward optimization (Diff-Sim, coming soon).
Catalogue
Runnable examples live in libuipc-samples/examples/ — each is a self-contained main.py with a GUI (run/stop) and most support --headless [N] benchmarking. Highlights:
Stiff-GIPC Benchmark Suite (88–93)
The reproducible headless cross-domain registry and current machine-specific reference are documented in Testing and Benchmarks.
Robotics
FEM & Cloth
- 3: periodically pressed tetrahedron
- 11: bunny + cloth
- 23: Kirchhoff rod bending
- 24: sewing pattern
- 34: cloth stack
- 36: vertex stitch family
Rigid Bodies, Joints & Coupling
- 2: walking cube
- 6: wrecking balls
- 10: ramp sliding
- 12: soft transform constraint
- 17: revolute joint
- 18: pendulum joint
Installation
Python (PyPI)
pip install pyuipc
The release pipeline builds Windows / Linux, Python 3.10–3.14 wheels with CUDA 12.8. Wheels built from the current source carry the CUDA runtime code they use and require a compatible NVIDIA driver, not a locally installed CUDA Toolkit. For GPUs served by a packaged SASS image, the driver floor is 525.60.13 on Linux and 528.33 on Windows; newer CUDA 13 drivers remain backward compatible under NVIDIA's CUDA compatibility model. Those are the CUDA 12.x minor-compatibility floors when the GPU selects a packaged SASS image. A GPU that must JIT the packaged CUDA 12.8 PTX requires at least driver 570.124.06 on Linux or 572.61 on Windows.
The immutable 0.0.27 wheel still dynamically loads cublas64_12.dll. Install
CUDA 12.8 side-by-side when using that release on a CUDA 13-only machine, or use
a source build until the next wheel release removes the dependency.
New wheels contain native code for compute capabilities 7.5, 8.0, 8.6, 8.9, and 12.0, plus compute-8.9 PTX for forward JIT on other newer GPUs. The doctor distinguishes a selected native SASS image from the PTX path and applies the matching driver floor. Diagnose an installation before running a scene:
python -m uipc doctor
python -m uipc doctor --probe-cuda
From Source
Prerequisites: CMake ≥ 3.26, Python ≥ 3.11, CUDA ≥ 12.4, and vcpkg (XMake ≥ 3.0.5 if you prefer that build path).
# 1) vcpkg (once): clone + bootstrap, then point CMake at the toolchain
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg && ./bootstrap-vcpkg.bat # Linux: ./bootstrap-vcpkg.sh
# set CMAKE_TOOLCHAIN_FILE=<vcpkg>/scripts/buildsystems/vcpkg.cmake
# 2) clone (samples come along as a submodule)
git clone https://github.com/spiriMirror/libuipc.git --recurse-submodules
cd libuipc && mkdir build && cd build
# 3) configure + build (NVCC is slow — use all cores)
cmake -S .. -DUIPC_BUILD_PYBIND=1
cmake --build . --config Release -j8 # Linux: add -DCMAKE_BUILD_TYPE=Release
With UIPC_BUILD_PYBIND=ON, the Python binding is built and installed into the active Python environment. If the install step fails, finish it manually with cd build/python && pip install .; to target a specific venv, pass -DUIPC_PYTHON_EXECUTABLE_PATH=<python.exe>.
On Linux, a conda environment is recommended: conda env create -f conda/env.yaml && conda activate uipc_env, then conda env config vars set CMAKE_TOOLCHAIN_FILE=<vcpkg>/scripts/buildsystems/vcpkg.cmake before the build commands above.
XMake alternative: xmake f -c && xmake build -j8 (Python binding: xmake f --pybind=true --python_system=true --python_version=3.11.x -c).
Check the install: cd python && python uipc_info.py.
Full guide (incl. Docker and CUDA/driver compatibility notes): Build & Install. For the samples' uv-based workflow, see the libuipc-samples README.
Quick Start (Python)
from uipc.core import Engine, World, Scene
from uipc.geometry import SimplicialComplexIO, ground, label_surface, label_triangle_orient, flip_inward_triangles
from uipc.constitution import StableNeoHookean, ElasticModuli
engine = Engine("cuda", "output")
world = World(engine)
scene = Scene(Scene.default_config())
scene.contact_tabular().default_model(0.2, 1e8)
mesh = SimplicialComplexIO().read("bunny.msh")
label_surface(mesh)
label_triangle_orient(mesh)
mesh = flip_inward_triangles(mesh)
StableNeoHookean().apply_to(mesh, ElasticModuli.youngs_poisson(1e6, 0.49), mass_density=1e3)
scene.objects().create("bunny").geometries().create(mesh)
scene.objects().create("ground").geometries().create(ground(-1.0))
world.init(scene)
for _ in range(100):
world.advance()
world.retrieve()
Optional: enable the MAS preconditioner for stiff FEM scenes with one config line — config["linear_system"]["fem_preconditioner"] = "mas".
Inspect the validated configuration contract (defaults, units, ranges,
selectors, lifecycle, and backend consumers) with python -m uipc config-schema, or read the Scene Configuration
Reference.
Contributing & Support
- Bugs & features: file an Issue; questions and ideas go to Discussions.
- Pull requests are welcome — CI runs the full simulation suite, please keep it green.
- For maintainers:
.cursor/holds AI-assisted build/test/commit/PR commands and style rules;agent_docs/documents the architecture.
News
2026-8-24: We preliminarily optimized the CUDA backend, improving the framework's simulation performance across the board — and Libuipc v1.0 will be ready soon!
2026-3-29: Thanks Genesis AI for contributing AL-IPC (Augmented Lagrangian IPC) integration, a Minimal Coordinate Articulated Joint System (ExternalArticulationConstraint) for affine bodies, and the CIBuildWheel cross-platform PyPI packaging pipeline.
2026-2-13: Cursor AI-assisted development support — see .cursor/ for built-in commands and rules.
2026-2-7: pip install pyuipc on PyPI (Win/Linux, Python 3.10–3.13, CUDA 12.8).
2025-11-01: The prototype implementation of Libuipc was open-sourced (Stiff-GIPC) as our performance benchmark reference.
2025-5-23: StiffGIPC presented at SIGGRAPH 2025.
2024-11-25: Libuipc v0.9.0 (Alpha) published — feedback welcome via Issues and PRs!
License & Acknowledgments
libuipc is released under the Apache License 2.0 (see LICENSE).
This project is led by Kemeng Huang and Professor Taku Komura (The University of Hong Kong), in collaboration with Professor Minchen Li (Carnegie Mellon University), with comprehensive support from TransGP. It builds upon the GPU IPC project, originally developed and continuously optimized by Kemeng Huang. We also thank the many open-source contributors, with special thanks to Xinyu Lu, who initially worked with us at TransGP and helped a lot in this project.
Citation
If you use Libuipc in your project, please cite our works:
@article{stiffgipc2025,
author = {Huang, Kemeng and Lu, Xinyu and Lin, Huancheng and Komura, Taku and Li, Minchen},
title = {StiffGIPC: Advancing GPU IPC for Stiff Affine-Deformable Simulation},
year = {2025},
publisher = {Association for Computing Machinery},
volume = {44},
number = {3},
issn = {0730-0301},
doi = {10.1145/3735126},
journal = {ACM Trans. Graph.},
month = may,
articleno = {31},
numpages = {20}
}
@article{gipc2024,
author = {Huang, Kemeng and Chitalu, Floyd M. and Lin, Huancheng and Komura, Taku},
title = {GIPC: Fast and Stable Gauss-Newton Optimization of IPC Barrier Energy},
year = {2024},
publisher = {Association for Computing Machinery},
volume = {43},
number = {2},
issn = {0730-0301},
doi = {10.1145/3643028},
journal = {ACM Trans. Graph.},
month = {mar},
articleno = {23},
numpages = {18}
}
Metadata
Release files for pyuipc 0.0.28
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| pyuipc-0.0.28-cp314-cp314-win_amd64.whl | CPython 3.14 | CPython 3.14 | Windows x86-64 | Details |
| pyuipc-0.0.28-cp314-cp314-manylinux_2_34_x86_64.whl | CPython 3.14 | CPython 3.14 | Linux glibc 2.34+ x86-64 | Details |
| pyuipc-0.0.28-cp313-cp313-win_amd64.whl | CPython 3.13 | CPython 3.13 | Windows x86-64 | Details |
| pyuipc-0.0.28-cp313-cp313-manylinux_2_34_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.34+ x86-64 | Details |
| pyuipc-0.0.28-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| pyuipc-0.0.28-cp312-cp312-manylinux_2_34_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.34+ x86-64 | Details |
| pyuipc-0.0.28-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| pyuipc-0.0.28-cp311-cp311-manylinux_2_34_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.34+ x86-64 | Details |
| pyuipc-0.0.28-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| pyuipc-0.0.28-cp310-cp310-manylinux_2_34_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.34+ x86-64 | Details |
Total release size: 578.7 MB
Release files / pyuipc-0.0.28-cp314-cp314-win_amd64.whl
| Download URL | pyuipc-0.0.28-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 58.2 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
aa4cb59777970f0a31e5a54561528abd91076a727a34c9fee147b2fda09f688f
|
|
BLAKE2b-256 checksum How to use checksums |
f159e651a18cc58a65cb5aca32bc0dd27dd2d6d8aea646f0376023c89539fd00
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp314-cp314-manylinux_2_34_x86_64.whl
| Download URL | pyuipc-0.0.28-cp314-cp314-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 58.0 MB |
| Tags | CPython 3.14 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
4b0dee337861096731ac2720629e7dc87b13fa035509218829c881c96a842f4d
|
|
BLAKE2b-256 checksum How to use checksums |
eb7ac53f4a9713b131bba871345e0787c00f9f2c284987044dcf70dd75867394
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp313-cp313-win_amd64.whl
| Download URL | pyuipc-0.0.28-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 57.7 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9aac1276c735092c4b75f8b953013b6989b1a7097623c2a04843e2819c909954
|
|
BLAKE2b-256 checksum How to use checksums |
8f9e995aa8ef161973b1da468e1b7f08b1273da2b815be7915fdd16a6219dfd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp313-cp313-manylinux_2_34_x86_64.whl
| Download URL | pyuipc-0.0.28-cp313-cp313-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 58.0 MB |
| Tags | CPython 3.13 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
b473eb5fdc3638b5d23ea608cd79b7646c38f28442e8630b4d95788e3611c2fe
|
|
BLAKE2b-256 checksum How to use checksums |
1a357f8f76b288178e12d767278d6cb7bcd301d15f185a587cce77b8be38c07b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp312-cp312-win_amd64.whl
| Download URL | pyuipc-0.0.28-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 57.7 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ff05aae737c959758c4a1686497e02ea555169eb1ef2685e977019649d1bd262
|
|
BLAKE2b-256 checksum How to use checksums |
1701112628f52f2364256078a626cbfc8de4f1a0aea141bf8f49c4e4907d1b3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp312-cp312-manylinux_2_34_x86_64.whl
| Download URL | pyuipc-0.0.28-cp312-cp312-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 58.0 MB |
| Tags | CPython 3.12 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
7fce671a9d8ac7b77c61956436205c395a42f11f404b932313b25ad5b71a4f95
|
|
BLAKE2b-256 checksum How to use checksums |
c1f80d5f4f0b824e215ecd1d75c7c770267bb69d7e08418e19d11cf8773e79db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp311-cp311-win_amd64.whl
| Download URL | pyuipc-0.0.28-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 57.6 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1f3eff92c80024f17d10705fe4a13440ba3807b1d94b74f6773bd56a979210ce
|
|
BLAKE2b-256 checksum How to use checksums |
08d68afb0e54e3b47da9429bde01dfd7df716f25b4b4bccbdfb4f7062ab93691
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp311-cp311-manylinux_2_34_x86_64.whl
| Download URL | pyuipc-0.0.28-cp311-cp311-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 58.0 MB |
| Tags | CPython 3.11 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
992cb66a65620ed0ad03ebd04d4997950add3bb4a7d0bc8013dd1b981ee150af
|
|
BLAKE2b-256 checksum How to use checksums |
57ee48d3de9225fa77c9e8f17ae2f6f2e8d42f920f378f8d5752be4884415fc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp310-cp310-win_amd64.whl
| Download URL | pyuipc-0.0.28-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 57.7 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
05ffe6f8130dc2f9200d524672779372ecb622add5a0f98a551811a1d9b29731
|
|
BLAKE2b-256 checksum How to use checksums |
4a1d148db91892c1d8515af7c242af4e175223efcca7a3944c6de003ef9ebbdb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency logRelease files / pyuipc-0.0.28-cp310-cp310-manylinux_2_34_x86_64.whl
| Download URL | pyuipc-0.0.28-cp310-cp310-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 58.0 MB |
| Tags | CPython 3.10 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
c4b729a3502c6cbac83d32bdad76cb03105afebcbf318ffc1c50d829c94b59e5
|
|
BLAKE2b-256 checksum How to use checksums |
420e4a5a3f63e5e05ea1c52b521848388baa938c473d0a6b9f4f2a3256f9a697
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.
Transparency log