# Third-party notices

This project's own code is MIT (see `LICENSE`). The components below are
redistributed in the npm package, the standalone bundles in `lib/` and/or the
deployed web tools, and keep their own licenses. The full license texts are in
[`licenses/`](licenses/); the OCCT and Assimp texts are also shipped next to
their WebAssembly binaries in `public/wasm/`, and `public/draco/NOTICE` and
`public/basis/NOTICE` travel with those decoders. The deployed web tools serve
this file and every license text at `/licenses/`, and each library bundle
starts with a short `@license` banner that points here.

MIT is compatible with GPL-2.0-or-later, so the WordPress plugins that embed
this library can carry it without changing their own license.

Nothing here is legal advice.

## What ships where

| Artefact | three.js | CAD/BIM decoders |
| --- | --- | --- |
| `dist/library/universal-3d-viewer.es.js` | external, the consumer supplies it | lazy chunks, loaded only when such a file is opened |
| `dist/library/universal-3d-viewer.umd.js` | bundled | bundled |
| `lib/universal-3d-viewer*.min.js` | bundled | bundled (`.web.min.js`: none) |
| the web tools (`3d-tools/`) | bundled | lazy chunks |

The WebAssembly binaries (`public/wasm/`, `public/draco/`, `public/basis/`) are
separate files fetched at runtime from `assetBasePath`. All components are
redistributed unmodified.

## Library runtime components

Versions are the ones pinned in `package-lock.json` when this file was written;
`three` is a peer dependency and the consumer's version applies.

| Component | Version | License | Where it ships | License text |
| --- | --- | --- | --- | --- |
| three.js | 0.186.0 | MIT | UMD/standalone bundles, web tools | `licenses/MIT-three.txt` |
| fflate (via three's `libs/`) | bundled copy | MIT | ZIP, 3MF, AMF, FBX, OBJ-zip and USDZ code paths | `licenses/MIT-fflate.txt` |
| Draco decoder / draco3d | 1.5.7 | Apache-2.0 | `public/draco/`, compressor | `licenses/Apache-2.0.txt`, `licenses/NOTICE-draco.txt` |
| Basis Universal transcoder (via three's `libs/basis`) | bundled copy | Apache-2.0 | `public/basis/` (KTX2 textures) | `licenses/Apache-2.0.txt`, `licenses/NOTICE-basis-universal.txt` |
| meshoptimizer | 1.2.0 | MIT | Meshopt decode/encode | `licenses/MIT-meshoptimizer.txt` |
| web-ifc | 0.0.77 | MPL-2.0 | `public/wasm/web-ifc.wasm` (the single-threaded build only), JS API in the bundles | `licenses/MPL-2.0-web-ifc.txt`, source: `licenses/web-ifc-SOURCE.txt` |
| Open CASCADE Technology (in occt-import-js) | as built into 0.0.23 | LGPL-2.1 with the Open CASCADE exception 1.0 | `public/wasm/occt-import-js.wasm` | `licenses/LGPL-2.1-occt.txt`, `licenses/OCCT-LGPL-EXCEPTION.txt`, source: `licenses/occt-import-js-SOURCE.txt` |
| occt-import-js | 0.0.23 | LGPL-2.1 | JS glue in the bundles | `licenses/LGPL-2.1-occt-import-js.txt`, source: `licenses/occt-import-js-SOURCE.txt` |
| Assimp (Open Asset Import Library, in assimpjs) | as built into 0.0.10 | BSD-3-Clause | `public/wasm/assimpjs.wasm` | `licenses/BSD-3-Clause-assimp.txt` |
| assimpjs | 0.0.10 | MIT | JS glue in the bundles | `licenses/MIT-assimpjs.txt` |
| zlib (inside assimpjs.wasm) | 1.2.13 | Zlib | `public/wasm/assimpjs.wasm` | no notice required for binary redistribution |
| rhino3dm | 8.35.0 | MIT | `public/wasm/rhino3dm.*` | `licenses/MIT-rhino3dm.txt` |
| three-mesh-bvh | 0.9.15 | MIT | bundles, web tools | `licenses/MIT-three-mesh-bvh.txt` |
| @gltf-transform/core, /extensions, /functions | 4.5.0 | MIT | exporters, compressor | `licenses/MIT-gltf-transform.txt` |
| property-graph | 4.1.0 | MIT | via glTF-Transform | `licenses/MIT-property-graph.txt` |
| ktx-parse | 1.1.0 | MIT | via glTF-Transform | `licenses/MIT-ktx-parse.txt` |
| ndarray, ndarray-lanczos, ndarray-pixels | 1.1.1, 0.3.0, 5.2.0 | MIT | via glTF-Transform | `licenses/MIT-ndarray*.txt` |

### Notes on the copyleft components

**web-ifc (MPL-2.0).** File-level copyleft. We redistribute it unmodified; the
source is at <https://github.com/ThatOpen/engine_web-ifc> (MPL-2.0 §3.2), which
`licenses/web-ifc-SOURCE.txt` states for recipients of the binaries and of the
UMD bundle it is inlined into.

**Open CASCADE Technology / occt-import-js (LGPL-2.1).** OCCT carries the Open
CASCADE exception (version 1.0, `licenses/OCCT-LGPL-EXCEPTION.txt`), which lets
object code that uses OCCT be distributed under other terms provided the
supporting documentation gives prominent notice that it uses Open CASCADE
Technology. **This product uses facilities provided by the Open CASCADE
Technology software** (STEP, IGES and BREP import). The WebAssembly module is a
separate, replaceable file (`public/wasm/occt-import-js.wasm`), fetched at
runtime. Both are redistributed unmodified; the corresponding source is at
<https://github.com/kovacsv/occt-import-js> (occt-import-js, tag matching the
npm version) and <https://github.com/Open-Cascade-SAS/OCCT> /
<https://dev.opencascade.org> (OCCT), as `licenses/occt-import-js-SOURCE.txt`
states for recipients of the binary and of the bundles its glue is part of.

## Web tools only (the deployed viewer, converter and compressor)

| Component | License | License text |
| --- | --- | --- |
| React, React DOM | MIT | `licenses/MIT-react.txt` |
| zustand | MIT | `licenses/MIT-zustand.txt` |
| zundo | MIT | `licenses/MIT-zundo.txt` |
| Lucide icons (lucide-react) | ISC | `licenses/ISC-lucide.txt` |
| clsx | MIT | `licenses/MIT-clsx.txt` |
| tailwind-merge | MIT | `licenses/MIT-tailwind-merge.txt` |
| Tailwind CSS (generated stylesheet) | MIT | `licenses/MIT-tailwindcss.txt` |
| Inter font (self-hosted, `public/fonts/`) | SIL OFL 1.1 | `licenses/OFL-1.1-Inter.txt` |
| JetBrains Mono font (self-hosted, `public/fonts/`) | SIL OFL 1.1 | `licenses/OFL-1.1-JetBrains-Mono.txt` |

### Prior art on the wordpress.org side

The free 3D Viewer plugin already ships two ~1 MB minified third-party bundles
through wordpress.org review today (`o3dv.min.js`, `model-viewer.latest.min.js`),
and `online-3d-viewer` pulls web-ifc, rhino3dm, occt-import-js and draco3d from
jsDelivr at runtime. This is evidence that the review process tolerates the
shape of what we are proposing, not that our specific licensing is settled.
