OpenCascade is a parametric 3D CAD kernel that's been quietly powering FreeCAD and a generation of mechanical engineering tools since the mid-1990s. Thanks to the OpenCascade.js project, the entire kernel now compiles to WebAssembly — and that opens up a category of browser applications that used to be impossible.
Why this matters for web apps
Three.js is excellent for visualizing 3D geometry, but it's a rendering library — not a modeling kernel. If you need real CAD operations (boolean union/subtract/intersect, fillets, chamfers, lofts, sweeps, robust solid modeling), Three.js leaves you stranded. OpenCascade fills exactly that gap, in the browser, with no native install.
What you can actually build
- In-browser parametric configurators — change a dimension, the geometry rebuilds, the visual updates.
- STEP and IGES file viewers and converters that run client-side, never uploading the customer's IP.
- Simple CAM toolpath previews for makerspaces and hobbyist tools.
- Educational tools for mechanical engineering students that don't require installing a 2 GB desktop suite.
Where the rough edges are
The WebAssembly bundle is large — roughly 35 MB compressed. You'll want to lazy-load it behind a meaningful user action, not on first paint. The TypeScript definitions are auto-generated and occasionally lie. And the API is C++-flavored: lots of allocate / use / explicitly-delete patterns that JS engineers find unfamiliar.
A workable architecture
We've shipped two production apps with this stack, and the pattern that consistently worked is: do the modeling in OpenCascade in a Web Worker, mesh the result into a buffer geometry, postMessage it back to the main thread, and let Three.js handle the display. This keeps the UI thread responsive even during heavy boolean operations.
If you're considering this for a customer project, budget more time than you think for performance tuning around triangulation parameters. The default mesh quality is overkill for visualization and surprisingly slow.
