June 25, 2026

Release v3.1.3.249

Summary

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 addMeshPart calls, edge-driven mesh-component traversal, “fill only the required side of the cut”, and SweepLineQueue parameter unification combine into measurable speedups for boolean, uniteManyMeshes, and cut-by-spline.
  • Lock-free parallel UnionFind for face connected-components, replacing a serial pass.
  • PlanarTriangulation gains injectable sweep-line predicates and tbb::parallel_sort, decouples its sweep queue from Contours2f, and can now triangulate mesh hole loops directly in the input space — useful for boolean fill plans on tilted planes.
  • MeshTopology::deleteFaces / addPartByMask optimized.

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_screenshot and scene_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_addObject etc.) — 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.
  • OpenLink now 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.
  • addMeshParts over vacant elements — overload that fills given vacant face/edge slots, useful when re-using a pre-sized topology.
  • MRCuda::getRuntimeInfo()DeviceInfo — returns Expected<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 ignoreBdTgts parameter for finer control over boundary-target handling.

File-format improvements

  • STEP — colorless STEP imports are now auto-colorized; multi-body STEP loading in meshconv no 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 byteStride in vertColorMap exports.

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

  • findSignedDistance crash fixed when the upDistLimitSq sentinel is returned; an invalid proj result in MeshMesh::findSignedDistance is corrected.
  • HoleFillPlanner re-entry guard under nested ParallelFor.
  • Windows crash diagnosticsprintStacktraceOnCrash improvements 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.