> ## Documentation Index
> Fetch the complete documentation index at: https://invariant-cad.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Package exports and compatibility

> Supported import paths, ESM requirements, types, browser assets, and semver expectations.

## Export map

```json theme={"system"}
{
  ".": "./dist/index.js",
  "./conformance": "./dist/conformance.js",
  "./kernels/occt": "./dist/occt-kernel.js",
  "./kernels/occt/browser": "./dist/occt-runtime-browser.js",
  "./kernels/occt/node": "./dist/occt-runtime-node.js",
  "./package.json": "./package.json"
}
```

Each JavaScript entry has a matching declaration file. Declaration maps point
back to source JSDoc for editors and source-aware tooling.

## Supported imports

```ts theme={"system"}
import { design, createEvaluator } from "invariantcad";
import { createOcctKernel } from "invariantcad/kernels/occt";
import { auditKernelShapeArtifactCodec } from "invariantcad/conformance";
import { loadAttestedOcctRuntime as loadInBrowser } from "invariantcad/kernels/occt/browser";
import { loadAttestedOcctRuntime as loadInNode } from "invariantcad/kernels/occt/node";
```

Do not import `invariantcad/dist/...`, internal chunks, `src/...`, or vendored
runtime files. They are deliberately hidden by the export map and can change
without a public API decision.

## ESM only

The package defines `"type": "module"` and only an `import` condition. It does
not ship a CommonJS wrapper. Use dynamic `import()` from a legacy CommonJS host
if migration cannot happen immediately:

```js theme={"system"}
const { design } = await import("invariantcad");
```

## Node and browser

The supported Node floor is 22.13. The root module and bundled Manifold runtime
also target modern browsers. The OpenCascade kernel entry can run in both
environments when its larger WASM asset is correctly served.

Exact owned-runtime verification has separate environment entry points. Import
`invariantcad/kernels/occt/node` only in Node.js and
`invariantcad/kernels/occt/browser` only in a browser or module worker. Both
return the same opaque runtime type consumed by `createOcctKernel`. See
[OCCT runtime attestation](/evaluation/occt-runtime-attestation) for byte
acquisition, trust-pin, CSP, permission-model, lifetime, and non-claim details.

Release CI verifies Node 22.13, 24, and 26 plus a production Vite build in
Chromium.

## Side effects and tree shaking

The package declares `sideEffects: false`. Importing the OCCT subpaths is
separate so ordinary Manifold consumers need not execute exact-backend module
initialization. WASM initialization occurs only when a kernel factory is called.
The Node attestation loader installs a module hook only when
`loadAttestedOcctRuntime` is called. Node 22.15 and newer use an isolated,
short-lived hook per load; Node 22.13 and 22.14 retain the compatible
process-wide worker-hook fallback.

## Type compatibility

Published declarations are checked with `publint` and Are the Types Wrong under
the ESM profile. The release gate also installs the packed tarball into a clean
consumer instead of testing only repository-relative imports.

## Semver before 1.0

* Patch releases should repair behavior without changing frozen document
  meaning.
* Minor releases may evolve the TypeScript authoring surface during `0.x`.
* Frozen document schemas and protocol versions remain independently
  parseable according to their compatibility policy.

Pin a minor line for production systems that cannot absorb pre-1.0 API changes,
and read the changelog before upgrading.
