Third-Party Libraries
This page lists the third-party libraries used by libuipc, their versions and purposes.
The vcpkg manifest is generated by scripts/gen_vcpkg_json.py at configure time
(vcpkg tag 2025.7.25).
vcpkg Dependencies (always)
| Name | Version | Purpose |
|---|---|---|
| eigen3 | >= 3.4.0 | Dense linear algebra (Vector3, Matrix3x3, transforms) |
| catch2 | >= 3.5.3 | C++ test framework (apps/tests/) |
| libigl | >= 2.6.0 | Geometry processing algorithms (src/geometry/) |
| spdlog | = 1.12.0 (pinned) | Logging backend for uipc::Logger |
| fmt | = 10.2.1 (pinned) | String formatting; pinned to stay compatible with the pinned spdlog |
| cppitertools | >= 2.1#3 | enumerate and other iteration utilities |
| dylib | >= 2.2.1 | Runtime loading of backend modules (uipc_backend_*) |
| nlohmann-json | >= 3.11.2 | uipc::Json, scene/engine configuration |
| magic-enum | >= 0.9.3 | Enum reflection (config parsing, diagnostics) |
| tinygltf | >= 2.8.22 | glTF IO (src/io/gltf_io.cpp) |
| tbb | >= 2022.0.0 | CPU parallelism in geometry processing |
| urdfdom | >= 3.1.1 | URDF robot model parsing (UrdfIO) |
| cpptrace | >= 0.8.3 | Stack traces on exceptions/asserts |
| octree | >= 2025.10.7 | Spatial indexing for geometry queries (private registry, see below) |
Version Overrides
fmt and spdlog are pinned via vcpkg overrides in scripts/gen_vcpkg_json.py.
spdlog bundles a specific fmt API; upgrading fmt without upgrading spdlog breaks the
build, so both are pinned together. If you bump them, bump both and rebuild.
Private Registry
octree and ftetwild come from the private registry
spiriMirror/vcpkg (see vcpkg-configuration.json
generated by scripts/gen_vcpkg_json.py).
vcpkg Dependencies (conditional)
| Name | Condition | Purpose |
|---|---|---|
| openvdb (+nanovdb feature) | UIPC_WITH_VDB_SUPPORT=ON |
Sparse volumetric data (src/vdb/) |
In-Tree Dependencies (external/)
| Name | Purpose |
|---|---|
| METIS | Mesh/graph partitioning (CPU) |
| GKlib | METIS support library |
The CUDA backend's kernel/buffer/linear-algebra wrappers live in the in-tree cuda_tool shim (ported from muda); muda is no longer a dependency.
Python-Side Dependencies
See pyproject.toml / python/pyproject.toml: pybind11 (bindings), polyscope
(optional GUI, uipc.gui), numpy, etc. Optional integrations (torch, warp, usd)
are loaded lazily via scripts/optional_import/.