Skip to main content

libuipc

PyPI version Downloads Documentation Issues License

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

teaser

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

Rigid Bodies, Joints & Coupling

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)

Table of built distributions (wheels) for pyuipc 0.0.28
File
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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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

Release history Release notifications | RSS feed

0.9.0

1 release file

This release

0.0.28 This release

10 release files

0.0.26

8 release files

0.0.25

8 release files

0.0.24

8 release files

0.0.23

8 release files

0.0.22

8 release files

0.0.21

8 release files

0.0.20

8 release files

0.0.19

8 release files

0.0.18

8 release files

0.0.17

8 release files

0.0.16

8 release files

0.0.15

8 release files

0.0.9

8 release files

0.0.8

8 release files

0.0.7

8 release files

0.0.6

8 release files

0.0.5

8 release files

0.0.4

8 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page