Repository navigation
All fourteen @chestnutlabs/* packages release in lockstep at v0.24.0 (npm, provenance).
This release brings CNC Cut moves to both views, reads inch files correctly, and fixes several bugs users could see. It comes from a second round of mutation-testing sweeps. FDM files render as before.
CNC, laser and inch files
- Cut moves get their own
cutchunk kind, with ashowCut/show-cuttoggle on all four adapters (#597). The 2D renderer now draws them too (#604). - Cut moves count toward the toolpath bounds, so CNC and laser files frame their work instead of an empty box (#575). A file with no printing moves gets a see-through plate and no contact shadow (#587).
- G20 (inch) files are converted to mm in the IR. They used to draw 25.4× too small.
header.unitskeeps the file's own declaration, and an info warningunits-convertedis added (#585). - Canned cycles G81/G82/G83 honour
Lrepeats (#595), and G91 cycles follow LinuxCNC's R/Z rules (#553, #562). ( … )comments are no longer executed (#544).
Text lines are never read as G-code
M117/M118/M486, M23–M33 file names, RESPOND, EXCLUDE_OBJECT and other macro lines are kept as text. M117 Homing G28 no longer homes, and EXCLUDE_OBJECT_START NAME=part2 is not a tool change (#602).
Fixes users could see
- A 2D view went blank when its layer range was cleared (#554).
- The
pixelRatiooption crashed the viewer at construction, in both the toolpath and the model viewer (#608). - The web component's
/defineand/model/defineimports were removed from production bundles, so<gcode-preview>and<gcode-model-viewer>never registered (#609). - A 2D-only build no longer pulls in three.js at startup; there's a new
/litesubpath (#573). - Adapter props (
layerRange,scrub,scrubTime,colorMode, …) persist across a source change (#565). A scrub set before a file loads applies to that file (#558).
Errors
- Every error carries
cause.E_RENDERER_LOADgainsreason: 'load' | 'start';'start'usually means no WebGL (#596). - Worker creation blocked by a CSP now fails with
E_WORKER_CREATE_FAILEDinstead of leaving the preview stuck in "parsing" (#571). renderer-unsupportedis an event on all four components (#534).
Options
- Every 3D option is checked synchronously by one shared validator.
nullandundefinedmean "use the default", and a prop cleared tonullafter mount keeps its value.colorMode: nullstill throws (#590). - Meaningless renderer, theme, 2D and
renderStilloptions throwRangeError(#543, #550, #554, #559).
Hostile files
An STL that overstates its triangle count now fails fast (#572). There's a 3MF vertex cap, E_MODEL_TOO_MANY_VERTICES (#574). The .bgcode decoders reject bad parameters before allocating (#594).
Pre-release check
A smoke run on the release candidate passed 68/68 in headless Chromium on a real GPU. It covered:
- the Feature Lab flows;
pixelRatioon both viewers;- all 12 React, Vue, Svelte and web-component example pages;
null= default;- 2D Cut drawing.
FDM 2D output is pixel-identical to v0.23.0.
Full per-package detail is in each package's CHANGELOG.md.