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/) |
Embedded Source Dependencies
| Name | Location | Purpose |
|---|---|---|
| METIS 5.2.1 C++ implementation | src/geometry/metis/ |
Private mesh/graph partitioning target used by uipc_geometry |
| GKlib-derived support subset | src/geometry/metis/ |
Private support code compiled into the embedded METIS target |
The project no longer builds separate external/METIS or external/GKlib
targets. Upstream Apache-2.0 notices are stored with the embedded
implementation. The port omits unused glibc-derived getopt/regex/qsort
compatibility code and the optional third-party RNG. It uses an in-tree
deterministic C++ partition/insertion sort that preserves the former equal-key
ordering, plus the existing C-runtime random path.
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/.