Skip to content

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/.

Notes