[{"data":1,"prerenderedAt":270},["ShallowReactive",2],{"algo-browser-mesh-boolean-libraries-2026":3},{"id":4,"title":5,"author":6,"body":7,"date":239,"description":240,"extension":241,"keywords":242,"meta":254,"navigation":255,"path":256,"published":255,"seo":257,"stem":260,"tags":261,"__hash__":269},"algorithms\u002Falgorithms\u002Fbrowser-mesh-boolean-libraries-2026.md","Comparison and Benchmarks of Browser Mesh Boolean Libraries at Industry Scale — 2026","Žiga Sajovic",{"type":8,"value":9,"toc":231},"minimark",[10,28,31,34,41,47,69,73,78,124,127,131,134,140,158,164,168,171,178,184,187,191,197,205,227],[11,12,13],"note",{},[14,15,16,17,22,23,27],"p",{},"Part of a series on the same Thingi10K corpus, also measured for ",[18,19,21],"a",{"href":20},"\u002Falgorithms\u002Fbenchmarking-mesh-boolean-libraries-2026","native C++ and eight libraries"," and ",[18,24,26],{"href":25},"\u002Falgorithms\u002Fpython-mesh-boolean-libraries-2026","in Python",".",[14,29,30],{},"Constructive solid geometry in the browser has meant small scenes: gluing a few primitives for a configurator, a parametric toy, a quick three.js demo. Anything real, a scanned medical mesh, an engineering part, a watertight solid you can 3D-print or simulate, went to a server or a desktop. At industry scale, 200K to 1.5M polygons per operand, that assumption no longer holds.",[14,32,33],{},"This is a comparison of the mesh boolean libraries that run client-side on the Thingi10K corpus: trueform, Manifold, and three-bvh-csg. Each in its as-shipped WebAssembly or JavaScript build, timed in the browser, arrays in to arrays out, the cost a web app actually pays.",[35,36],"corpus-grid",{":columns":37,":images":38,"detail":39,"title":40},"5","[\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0184.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0096.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0998.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0715.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0404.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0464.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0846.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0060.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0444.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0506.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0573.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0049.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0226.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0963.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0879.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0307.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0931.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0381.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0061.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0548.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0246.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0074.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0596.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0950.png\",\"\u002Fimg\u002Falgorithms\u002Fcorpus\u002Fthumb_0370.png\"]","25 of 1,000 Thingi10K pairs · 200K–1.5M polygons · two operands overlaid","The corpus",[14,42,43],{},[44,45,46],"strong",{},"Exact, watertight mesh booleans at industry scale now run in the browser, at interactive speed.",[48,49,50,57,63],"ul",{},[51,52,53,56],"li",{},[44,54,55],{},"21.9 ms median"," in WebAssembly, fastest on every one of the 1000 pairs, and faster in the browser than the other engines run natively.",[51,58,59,62],{},[44,60,61],{},"Closed and manifold on all 1000 pairs."," Manifold delivers the same watertight guarantee; three-bvh-csg returns a valid solid on 22.",[51,64,65,68],{},[44,66,67],{},"No server, no install."," The same exact kernel that ships in C++ and Python, compiled to WebAssembly and running in the tab.",[70,71],"article-cta",{":buttons":72},"[{\"label\":\"Try it live\",\"to\":\"https:\u002F\u002Ftrueform.polydera.com\u002Flive-examples\u002Fboolean\",\"icon\":\"i-lucide-play\",\"variant\":\"soft\",\"color\":\"neutral\"},{\"label\":\"Lunar\",\"to\":\"\u002Flunar\",\"icon\":\"i-lucide-moon\",\"variant\":\"soft\",\"color\":\"neutral\"},{\"label\":\"trueform\",\"to\":\"\u002Ftrueform\",\"icon\":\"i-lucide-cpu\",\"variant\":\"soft\",\"color\":\"neutral\"},{\"label\":\"GitHub\",\"to\":\"https:\u002F\u002Fgithub.com\u002Fpolydera\u002Ftrueform\",\"icon\":\"i-simple-icons-github\",\"variant\":\"soft\",\"color\":\"neutral\"}]",[74,75,77],"h2",{"id":76},"the-libraries","The libraries",[48,79,80,95,110],{},[51,81,82,89,90,94],{},[44,83,84,88],{},[18,85,87],{"href":86},"\u002Ftrueform","trueform"," 0.9.8"," — ",[91,92,93],"code",{},"npm install @polydera\u002Ftrueform",". Exact arrangements over a bounded integer kernel, compiled to WebAssembly. Closed, manifold output, the same engine as the native and Python builds.",[51,96,97,89,106,109],{},[44,98,99,105],{},[18,100,104],{"href":101,"rel":102},"https:\u002F\u002Fgithub.com\u002Felalish\u002Fmanifold",[103],"nofollow","Manifold"," 3.5",[91,107,108],{},"npm install manifold-3d",". A topological kernel for manifold meshes, with an official WebAssembly build. Produces exact, watertight solids in the browser, the genuine peer here.",[51,111,112,89,120,123],{},[44,113,114,119],{},[18,115,118],{"href":116,"rel":117},"https:\u002F\u002Fgithub.com\u002Fgkjohnson\u002Fthree-bvh-csg",[103],"three-bvh-csg"," 0.0.17",[91,121,122],{},"npm install three-bvh-csg",". A BVH-accelerated CSG evaluator for three.js, the popular choice for client-side booleans. Fast on small dynamic scenes, but it struggles with correctness at scale: on this corpus it returns a watertight solid on only 22 of 1000 pairs.",[14,125,126],{},"The wider JavaScript CSG lineage (csg.js and its descendants three-csg-ts and THREE-CSGMesh, and JSCAD) is BSP-based. It splits geometry recursively against partitioning planes, which is robust enough for a handful of primitives but does not scale to meshes of this size. CGAL and OpenCascade, the desktop heavyweights, do not run reliably in a browser: CGAL relies on floating-point rounding modes WebAssembly does not provide, and OpenCascade operates on BREP solids rather than triangle meshes.",[74,128,130],{"id":129},"protocol","Protocol",[14,132,133],{},"Each library is timed from input arrays (vertices, triangles) to output arrays of the same shape. Parsing the geometry into the library's own representation, the boolean, and reading the result back, all inside the timer. No amortisation: every structure is rebuilt on every operation.",[14,135,136,139],{},[44,137,138],{},"Result agreement."," trueform and Manifold returned a closed, manifold mesh on all 1000 pairs, with signed volumes that agree within floating-point tolerance. three-bvh-csg returned a watertight solid on 22; on the rest it produced an open mesh, so it is solving the same boolean less robustly. The comparison is wall-clock only.",[14,141,142,145,146,22,149,152,153,27],{},[44,143,144],{},"Corpus."," Random sets of solid, manifold, non-self-intersecting Thingi10K meshes, 200K to 1.5M polygons per operand. Each operand is normalised to unit extent, randomly rotated, and translated so the bounding boxes overlap; each pair takes the union. The same 1000-pair corpus as the ",[18,147,148],{"href":20},"native",[18,150,151],{"href":25},"Python"," benchmarks; Thingi10K IDs and per-operand counts are ",[18,154,157],{"href":155,"rel":156},"https:\u002F\u002Fgithub.com\u002Fpolydera\u002Ftrueform\u002Fblob\u002Fmain\u002Fresearch\u002Funcertainty-aware-mesh-csg\u002Fdata\u002Fpairwise-corpus-ids.json",[103],"published",[14,159,160,163],{},[44,161,162],{},"Environment."," Chrome 148 on an Apple M4 Max, macOS. trueform and Manifold run as WebAssembly; three-bvh-csg runs as JavaScript on top of three-mesh-bvh, as shipped.",[74,165,167],{"id":166},"pairwise-booleans","Pairwise booleans",[14,169,170],{},"One union per pair across the 1000-pair corpus. trueform is fastest on every one of them.",[14,172,173],{},[174,175],"img",{"alt":176,"src":177},"Browser pairwise mesh boolean benchmark","\u002Fimg\u002Falgorithms\u002Fbenchmark-browser-2026.png",[179,180],"data-table",{":headers":181,":highlight":182,":rows":183},"[\"library\",\"median (ms)\",\"geomean × vs trueform\",\"valid \u002F 1000\"]","0","[[\"trueform 0.9.8\",\"21.9\",\"1.0×\",\"1000\"],[\"Manifold 3.5\",\"303.4\",\"12.6×\",\"1000\"],[\"three-bvh-csg 0.0.17\",\"978.0\",\"41.2×\",\"22\"]]",[14,185,186],{},"trueform and Manifold both clear the watertight bar in the browser; the difference between them is wall-clock. three-bvh-csg is the fastest of the JavaScript-native CSG tools, but at this scale it is the slowest of the three and returns a closed solid on only 22 of the 1000 pairs.",[74,188,190],{"id":189},"the-webassembly-cost","The WebAssembly cost",[14,192,193,194,27],{},"WebAssembly costs trueform roughly 1.4× over native: the C++ driver runs the same corpus at a 15.7 ms median, the WebAssembly build at 21.9 ms. The full eight-library native comparison, with N-ary scaling to N=64, is in ",[18,195,196],{"href":20},"the industry-scale benchmark",[14,198,199,200,204],{},"At 21.9 ms median, trueform in the browser is still faster than every library in that comparison runs natively. The exact kernel does not have to leave the tab, which is what lets an interface, or an AI agent through ",[18,201,203],{"href":202},"\u002Flunar","Lunar",", operate real geometry client-side.",[14,206,207,209,210,209,215,209,217,209,222],{},[18,208,87],{"href":86}," · ",[18,211,214],{"href":212,"rel":213},"https:\u002F\u002Ftrueform.polydera.com\u002Flive-examples\u002Fboolean",[103],"Try it live",[18,216,203],{"href":202},[18,218,221],{"href":219,"rel":220},"https:\u002F\u002Fgithub.com\u002Fpolydera\u002Ftrueform",[103],"GitHub",[18,223,226],{"href":224,"rel":225},"https:\u002F\u002Ftrueform.polydera.com",[103],"Documentation",[228,229],"cite-as",{"author":230,"title":5},"Sajovic, {\\v{Z}}iga",{"title":232,"searchDepth":233,"depth":233,"links":234},"",2,[235,236,237,238],{"id":76,"depth":233,"text":77},{"id":129,"depth":233,"text":130},{"id":166,"depth":233,"text":167},{"id":189,"depth":233,"text":190},"2026-06-29","Three client-side mesh boolean libraries on the Thingi10K corpus at 200K–1.5M polygons per operand: trueform, Manifold, three-bvh-csg. trueform is the fastest tested in the browser at 21.9 ms median, 12.6× faster than Manifold WASM and 41.2× faster than three-bvh-csg (geometric mean), closed and manifold on all 1000 pairs.","md",[243,244,245,246,247,248,249,250,251,252,253],"browser mesh boolean","webassembly mesh boolean","fastest browser mesh boolean library","three.js boolean","three-bvh-csg alternative","manifold wasm","client-side CSG","in-browser CSG","wasm CSG library","javascript mesh boolean","web CAD",{},true,"\u002Falgorithms\u002Fbrowser-mesh-boolean-libraries-2026",{"title":258,"description":259},"Browser Mesh Boolean Library Comparison and Benchmarks — 2026","Three client-side mesh boolean libraries on the Thingi10K corpus: trueform, Manifold, three-bvh-csg. trueform is fastest in the browser at 21.9 ms median, 12.6× Manifold WASM and 41.2× three-bvh-csg, watertight on all 1000 pairs.","algorithms\u002Fbrowser-mesh-boolean-libraries-2026",[262,263,264,265,266,267,268],"csg","booleans","benchmarks","performance","comparison","browser","webassembly","kje739DCoH0baY2ROdWLlF92GH71HAdQ0gbAAQS1M1I",1786950767604]