npm install to first boolean

From npm install to a watertight boolean solid in well under a second, on a stock Node install with no toolchain. Every number below is read at load time from the JSON report tools/bench_ttfb.js writes, and you can run the same script for your own number.

Every number here reproduces with one command: node tools/bench_ttfb.js. tests/test_cadsf-303_ttfb_page.js checks that the data embedded in this page matches benchmarks/out/cadsf-303/report.json byte-for-byte.
Measured: — Node: — npm: — Platform: — CPU: — Kernel: —

Failed to load or parse the embedded benchmark report — see console.

Measured on one machine; yours is one command away

The number below was measured on one Linux dev machine on one day; the hardware and software versions are in the strip above. Your machine will give a different figure, and the measuring script is what produced it — your equivalent is npm install @nativecad/kernel followed by one boolean, which is exactly what the script times:

# in the NativeCAD build tree
bash tools/build_packages.sh   # build packages/kernel/dist (only needed once, or after a kernel change)
node tools/bench_ttfb.js       # packs, installs into a fresh dir, requires, runs one boolean — 5 runs, prints the median

1. The number — median of — runs, install through watertight solid

Time from a fresh npm install of the packed kernel, through Node cold-starting the freshly-installed module, through ops.boxBool.unionBoxes() producing a solid that Topology.validate() confirms is closed and watertight. Every run starts in a brand-new project directory with no shared node_modules and no warm require() cache, so no run gets a head start on any other.

—
median wall-clock time, npm install → watertight boolean solid, this machine, this run
npm install (fresh dir) require() the installed package (fresh Node process) union two boxes → watertight solid
RunInstallRequireBoolean TotalWatertight?Triangles
What "first boolean" means here, exactly

—

Method note: —

2. Why the clock stops at a boolean — what the number claims

Mechanical CAD work is mostly booleans, so the bar is a real modeling operation: ops.boxBool.unionBoxes unions two overlapping boxes into one watertight solid, and the same closed-shell validator the repo's test suite gates on (Topology.validate()) confirms it. A parsed STEP file or a non-null return would stop the clock earlier; this page does not.

3. Self-serve install vs. sales-gated evaluation — sourced from vendor pages

The timing above is measured by this repo's script. How competing kernels gate any evaluation is sourced from the vendors' own public pages, so the two kinds of claim sit in separate boxes.

Sourced from public vendor pages, 2026-07

This section covers process and access. NativeCAD's commercial licence terms are at web/pricing.html.

4. What the number does not include

Provenance Section 1 is measured by tools/bench_ttfb.js; Section 3 is sourced from the vendors' public pages, and we correct it the day a vendor tells us it has changed. Siemens, Parasolid, Spatial and ACIS are named to identify those pages; they are the marks and property of their respective owners, and NativeCAD is not affiliated with, sponsored by, or endorsed by those vendors. Full site-wide notices: legal notes.

More demos

All demos →

Build your own part with NativeCAD

Free for education and makers with a registered key · $200 per seat per year · Kernel SDK for products.