cadjs
cadjs is the shared JavaScript runtime for CAD Viewer, documentation previews,
and generated snapshot browser assets. It owns reusable parsing, scene-building,
explicit-CAD rendering, STEP topology, selector, mesh, robot-description, and
artifact helpers without depending on React or application chrome.
Implicit CAD model loading, shader rendering, snapshots, SDF sampling, and
mesh exports live in the sibling implicitjs package. Consumers that need
implicit CAD should depend on implicitjs directly alongside cadjs.
Install
In this workbench, consumers link the package directly:
{
"dependencies": {
"cadjs": "file:../packages/cadjs"
}
}
The package exports source files so local consumers can alias or install it and pick up edits without copying generated bundles.
Layout
src/index.js: public package entrypoint.src/common/: browser-safe render pipeline used by interactive viewer, docs previews, and snapshot browser runtime.src/lib/: lower-level first-party helpers for assets, formats, mesh decoding, selector runtimes, STEP sidecars, and URDF/SRDF/SDF.src/lib/viewer/: shared non-React 3D viewer runtime helpers such as picking, clipping, drawing geometry, reference geometry, stage theme, scene scale, and visual state.scripts/run-tests.mjs: package test discovery and Node test runner wrapper.docs/: reference docs for package-owned APIs.
Tests live beside the modules they cover as *.test.js or *.test.mjs.
Boundaries
Keep this package UI-framework agnostic. Do not add React components, Tailwind
helpers, browser workbench state, or CAD Viewer chrome utilities here. Those
belong in consumer apps such as viewer/.
Prefer moving logic into cadjs when it is reusable across:
- interactive CAD Viewer rendering,
- docs or marketing previews,
- generated snapshot browser runtime,
- testable CAD parsing or sidecar preparation.
Prefer moving implicit model, shader, snapshot, SDF, or mesh-export behavior
into implicitjs instead.
Keep app-specific workflows in the app. A useful rule of thumb: cadjs should
understand CAD data and rendering state, while viewer/ should understand user
interface and product workflow.
Commands
From this package directory:
npm test
From the workbench repository root:
npm --prefix packages/cadjs test
The test command discovers all *.test.js and *.test.mjs files under
src/. To run one file:
node scripts/run-tests.mjs src/lib/themeSettings.test.js
Reference
- Render pipeline:
loadSource,buildModel,renderModel, andcaptureModelstages shared by viewer, docs, and snapshots.