Open-source notices
Lineplate is built on open-source software. The most important piece is its geometry kernel, Open CASCADE Technology, which reads CAD files and works out hidden lines.
Open CASCADE Technology
This product makes use of facilities provided by the Open CASCADE Technology software. Open CASCADE Technology (OCCT) is licensed under the GNU Lesser General Public License version 2.1, with the Open CASCADE exception. The kernel is built from OCCT 8.0.1 with 4 patches of ours, listed below.
- GNU Lesser General Public License, version 2.1 (full text, as distributed with OCCT)
- Open CASCADE exception, version 1.0, quoted in full below
Open CASCADE exception (version 1.0) to GNU LGPL version 2.1. The object code (i.e. not a source) form of a "work that uses the Library" can incorporate material from a header file that is part of the Library. As a special exception to the GNU Lesser General Public License version 2.1, you may distribute such object code incorporating material from header files provided with the Open CASCADE Technology libraries (including code of CDL generic classes) under terms of your choice, provided that you give prominent notice in supporting documentation to this code that it makes use of or is based on facilities provided by the Open CASCADE Technology software.
What runs where
The kernel is compiled to WebAssembly and loaded by your browser at run time, as two separate files, from /kernel/cadoc-kernel.0dea8f936d3fef53.mjs and the .wasm of the same name beside it. It runs in a background worker in your browser tab and is never bundled into the rest of the application's code. The name carries a hash of the files' contents, so a new build of the kernel always has a new name.
Getting the source
- OCCT itself: the official repository, github.com/Open-Cascade-SAS/OCCT, at tag
V8.0.1(commitb8f597c67781), with our 4 patches applied. - Our changes to OCCT, under the LGPL 2.1 like OCCT itself. They are in the binding source below, in
kernel/build/patches/, and the build recipe applies them:0001-shapefix-selfintersect-wire-edge-snapshot.patch: Shape healing reads a wire's edges from a snapshot instead of a linked list inside a double loop: large files import up to 1.8 times as fast, with identical results.0002-contap-contour-line-without-tangent.patch: Hidden-line removal no longer reads outside an array when an outline has no recorded tangent (a crash in some views).0003-intwalk-fillpntsinholes-unadded-line.patch: Hidden-line removal no longer reads past a list of outlines (a crash in some views).0004-bintools-exact-round-trip.patch: OCCT's binary shape format reads back exactly what it wrote, so a model reopened from this browser's cache draws exactly as when it was imported.
- Our kernel binding (a thin layer of C++ between OCCT and the rest of the studio, with its complete build recipe): published under the LGPL 2.1 at github.com/MichaelMcCoyTech/lineplate-kernel. The tag
kernel-v1.1.0+occt-8.0.1-p4-cdb61ffis the exact source of the kernel this site serves, with the OCCT patches and the build recipe.
Replacing the kernel
The LGPL lets you use a modified version of the library with the application. The kernel is kept separate for that reason: it contains no product logic, the rest of the studio talks to it only through a versioned message format (protocol version 1), and it is loaded from its own URL.
- In the studio, open Kernel in the top bar and enter the address of your own kernel's
.mjsfile under Use a custom kernel URL. The setting is kept in your browser only, and Reset to built-in goes back to ours. - Build the kernel from the binding source with its build recipe (
kernel/build/build.sh kernel-wasm), which producescadoc-kernel.mjsandcadoc-kernel.wasm. Serve both from the same folder, the.wasmasapplication/wasm, and, if they are on another server than this site, with CORS headers that allow this site. - A build of the studio can also be pointed at a kernel when it is built, by setting
CADOC_KERNEL_URL.
The example drawings
The assembly drawings on the home page, and the example model in the studio, are made from the leader arm in Alexander Koch's low_cost_robot repository. We replaced its six servos, with their screws and connectors, and its servo frame with models of our own, made to the same outside dimensions and mounting holes, so the arm goes together as before. The printed parts and the assembly are Alexander Koch's. The example file, leader_arm.step, carries this notice in its header. The single-part drawings are of the NIST MBE PMI test parts, a US government work used without restriction. The arm is published under the MIT licence:
MIT License Copyright (c) 2024 Alexander Koch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Fonts and colour profiles
- Inter: The typeface of this site and of the text in exported PDFs. Copyright 2016 The Inter Project Authors. Licence: SIL Open Font License 1.1.
- Lato: The alternative typeface for manuals, embedded in their PDFs when chosen. Copyright 2011-2015 tyPoland Łukasz Dziedzic, with Reserved Font Name "Lato". Licence: SIL Open Font License 1.1.
- JetBrains Mono: The monospaced typeface of this site's labels and figure captions. Copyright 2020 The JetBrains Mono Project Authors. Licence: SIL Open Font License 1.1.
- sRGB2014 colour profile: Embedded in RGB PDFs. Copyright International Color Consortium. Licence: ICC profile licence: may be copied, distributed, embedded, made, used and sold without restriction.
- Coated FOGRA39 colour profile (Coated_Fogra39L_VIGC_300): Embedded in CMYK PDFs. Made available by VIGC with the permission of X-Rite. Licence: May be used, embedded, exchanged and shared without restriction; may not be altered or sold without written permission of VIGC.
Software packages
The JavaScript packages the studio is built with, including three.js (3D view) and PDFKit (PDF export, which includes Adobe's metrics for the standard PDF fonts). This list is generated from the project's lockfile by apps/studio/scripts/third-party-notices.mjs, which refuses GPL and AGPL licences.
| Package | Version | Licence |
|---|---|---|
| @auth/core | 0.41.3 | ISC |
| @auth/prisma-adapter | 2.11.3 | ISC |
| @img/colour | 1.1.0 | MIT |
| @img/sharp-libvips-linux-x64libvips, an optional dependency Next.js installs for server-side image optimisation. It runs only on the server, is never sent to a browser, and the studio does not use image optimisation. | 1.3.4 | LGPL-3.0-or-later |
| @img/sharp-linux-x64 | 0.35.5 | Apache-2.0 |
| @next/env | 16.3.8 | MIT |
| @next/swc-linux-x64-gnu | 16.3.8 | MIT |
| @noble/ciphers | 1.3.0 | MIT |
| @noble/hashes | 1.8.0 | MIT |
| @panva/hkdf | 1.2.1 | MIT |
| @prisma/adapter-pg | 7.10.0 | Apache-2.0 |
| @prisma/client | 7.10.0 | Apache-2.0 |
| @prisma/client-runtime-utils | 7.10.0 | Apache-2.0 |
| @prisma/debug | 7.10.0 | Apache-2.0 |
| @prisma/driver-adapter-utils | 7.10.0 | Apache-2.0 |
| @swc/helpers | 0.5.23 | Apache-2.0 |
| @types/node | 24.19.1 | MIT |
| @types/pg | 8.23.1 | MIT |
| base64-js | 0.0.8 | MIT |
| base64-js | 1.5.1 | MIT |
| baseline-browser-mapping | 2.11.27 | Apache-2.0 |
| brotli | 1.3.3 | MIT |
| caniuse-lite | 1.0.30001814 | CC-BY-4.0 |
| client-only | 0.0.1 | MIT |
| clone | 2.1.2 | MIT |
| dfa | 1.2.0 | MIT |
| dotenv | 17.4.2 | BSD-2-Clause |
| fast-deep-equal | 3.1.3 | MIT |
| fflate | 0.8.3 | MIT |
| fontkit | 2.0.4 | MIT |
| jose | 6.2.12 | MIT |
| linebreak | 1.1.0 | MIT |
| nanoid | 3.3.19 | MIT |
| next | 16.3.8 | MIT |
| next-auth | 5.0.0-beta.32 | ISC |
| oauth4webapi | 3.8.8 | MIT |
| pako | 0.2.9 | MIT |
| pdfkit | 0.20.2 | MIT |
| pg | 8.23.0 | MIT |
| pg-cloudflare | 1.4.1 | MIT |
| pg-connection-string | 2.14.1 | MIT |
| pg-int8 | 1.0.1 | ISC |
| pg-pool | 3.14.0 | MIT |
| pg-protocol | 1.16.1 | MIT |
| pg-types | 2.2.0 | MIT |
| pgpass | 1.0.5 | MIT |
| picocolors | 1.1.1 | ISC |
| png-js | 2.0.0 | MIT |
| postcss | 8.5.23 | MIT |
| postgres-array | 2.0.0 | MIT |
| postgres-array | 3.0.4 | MIT |
| postgres-bytea | 1.0.1 | MIT |
| postgres-date | 1.0.7 | MIT |
| postgres-interval | 1.2.0 | MIT |
| preact | 10.24.3 | MIT |
| preact-render-to-string | 6.5.11 | MIT |
| react | 19.3.0 | MIT |
| react-dom | 19.3.0 | MIT |
| restructure | 3.0.2 | MIT |
| scheduler | 0.28.0 | MIT |
| semver | 7.8.5 | ISC |
| server-only | 0.0.1 | MIT |
| sharp | 0.35.5 | Apache-2.0 |
| source-map-js | 1.2.2 | BSD-3-Clause |
| split2 | 4.2.0 | ISC |
| stripe | 22.6.1 | MIT |
| styled-jsx | 5.1.6 | MIT |
| tailwindcssCompiled into the site's CSS (its base styles and licence banner ship to the browser). | 4.3.3 | MIT |
| three | 0.186.1 | MIT |
| three-mesh-bvh | 0.9.15 | MIT |
| tiny-inflate | 1.0.3 | MIT |
| tslib | 2.8.1 | 0BSD |
| undici-types | 7.24.6 | MIT |
| unicode-properties | 1.4.1 | MIT |
| unicode-trie | 2.0.0 | MIT |
| xtend | 4.0.2 | MIT |