Release v3.1.3.249
Updates
This release introduces a new .NET WebAssembly distribution, deeper MCP integration for AI agents (image content blocks, cleaner tool IDs), faster Boolean and PlanarTriangulation, new geometry APIs (projectSpline, classified detectTunnelFaces), and a round of MRViewer UX polish — native macOS drag-and-drop, configurable screenshots, and broader i18n coverage.
.NET WebAssembly distribution
MeshLib now ships a .NET-WASM distribution alongside the existing native and Emscripten targets. .NET applications can embed MeshLib and run inside the browser through WebAssembly with no native runtime dependency, opening the same API surface to Blazor and other .NET-on-Wasm hosts.
Faster geometry: Boolean & PlanarTriangulation ⚡
A focused performance pass across the constructive-geometry stack:
- Boolean operations are now up to 2x faster. Reduced
addMeshPartcalls, edge-driven mesh-component traversal, “fill only the required side of the cut”, and SweepLineQueue parameter unification combine into measurable speedups forboolean,uniteManyMeshes, and cut-by-spline. - Lock-free parallel UnionFind for face connected-components, replacing a serial pass.
PlanarTriangulationgains injectable sweep-line predicates andtbb::parallel_sort, decouples its sweep queue fromContours2f, and can now triangulate mesh hole loops directly in the input space — useful for boolean fill plans on tilted planes.MeshTopology::deleteFaces/addPartByMaskoptimized.
MCP for AI agents matures
Building on the MCP server introduced in v3.1.2, this release sharpens the AI-agent surface:
- Image / resource content blocks for
viewer_screenshotandscene_getObjectInfo— screenshots and object data now flow back to the agent as proper MCP content blocks (with/api/*parity), so Claude Code / Cursor / Codex can see what the viewer sees instead of just text. - Tool IDs renamed to underscore-namespacing (
scene_addObjectetc.) — a one-time breaking rename that matches the wider MCP ecosystem convention and is friendlier to agent autocompletion. Existing MCP integrations need to update tool names.
MRViewer UX polish
- Native macOS drag-and-drop — the viewer now highlights its drop zone when a file is dragged over the window on macOS, matching the existing Windows/Linux behaviour.
OpenLinknow quotes URLs so query strings survive the shell on every platform.- i18n continues to expand: cross-domain translation support, translated undo/redo and complex history action names, brush undo/redo labels, controller cube labels.
Algorithms & new API
projectSpline— project a spline onto a mesh surface; includes self-intersection handling and a cut-by-spline path.detectTunnelFaces— improvements plus a classification result distinguishing tunnel kinds, enabling downstream tools to react per-type instead of treating all tunnels uniformly.addMeshPartsover vacant elements — overload that fills given vacant face/edge slots, useful when re-using a pre-sized topology.MRCuda::getRuntimeInfo()→DeviceInfo— returnsExpected<DeviceInfo>with GPU name and total memory;isCudaAvailable()is now deprecated. Apps can present the actual device to the user instead of a yes/no flag.debugSaveMesh_diagnostic helper for in-pipeline mesh dumps.- IPC
ignoreBdTgtsparameter for finer control over boundary-target handling.
File-format improvements
- STEP — colorless STEP imports are now auto-colorized; multi-body STEP loading in
meshconvno longer crashes on multi-object scene files. - 3MF — slice decimation max error is now configurable, letting integrators tune the speed/quality trade-off per use case.
- glTF — fixed zero
byteStrideinvertColorMapexports.
WebAssembly
- WebAssembly SIMD (
-msimd128) is enabled by default in the Emscripten builds — broad Wasm SIMD support across browsers makes this safe today and gives measurable speedups in the hot inner loops. - mimalloc is now linked by default in Emscripten builds, with an opt-out toggle.
- Webrequest module for correct error-code processing and file-operation support in single-thread WASM.
Stability & diagnostics
findSignedDistancecrash fixed when theupDistLimitSqsentinel is returned; an invalidprojresult inMeshMesh::findSignedDistanceis corrected.- HoleFillPlanner re-entry guard under nested
ParallelFor. - Windows crash diagnostics —
printStacktraceOnCrashimprovements give actionable stack traces from production crashes. - mimalloc on Windows — linked with an EXE-level redirect into MeshViewer and MRTest for consistent allocator behaviour.
Downloads
Binaries for Windows x64 (Visual Studio 2019, 2022, and new: 2026), Ubuntu 22 / 24 LTS (x64 + arm64), Linux vcpkg (glibc 2.28, x64 + arm64), macOS Intel and Apple Silicon, and Emscripten (single-thread, multi-thread, multi-thread Wasm64). A new .NET-WASM distribution joins the lineup for browser-hosted .NET applications.
Full changelog: GitHub release v3.1.3.249.