Changelogs
- @buerli.io/classcad
- @buerli.io/core
- @buerli.io/react
@buerli.io/classcad
2.0.0
Major Changes
facade.connect()rejects with what kept the drawing from connecting, such as a token the key service refuses ("This token is unknown or revoked.") or an engine that cannot be reached, and removes the drawing it made. It used to log the error and resolve to null, after whichfacade.apiandfacade.drawingIdthrew "Did you call connect() first?".useBuerliCadFacadethrows that same error to the nearest error boundary, where it used to show "Drawing ID not set. Did you call connect() first?".BuerliCadFacade.utils.connectis unchanged: it logs the error, shows a message and resolves to null.
Minor Changes
- Every export is documented, most with an example of where it goes in an app, and each package carries its API reference as markdown in
doc/api: a page for the package (what it is for, what it exposes) and a page for each part of its API, with what most apps don't need under Advanced. buerli.io shows it. The props of the components are exported as types (BuerliGeometryProps,DrawingProps,ModelTreeProps,EditorProps, …). onClient(callback)hands an app every drawing's client: the ones there are when it registers, and each new one as soon as the factory has made it, before it connects. An app that prepares the clients a host makes (session sharing, engine settings) registers there instead of wrapping the host's factory, so the host connects withinitand any client. It returns a function that unregisters; a callback that fails does not keep the drawing from connecting.WSClient.url: the address the client was given; one without a scheme (/session) is on the server the page came from.- A page that runs ClassCAD in WebAssembly can share its session on the ClassCAD share relay, where guests join from any machine and no ClassCAD MCP has to run:
WASMClient'ssessionUrlnames the relay's session address (wss://<relay>/session), andsessionAuthgives the reader's sign-in (a Firebase ID token of their ClassCAD account), which the relay takes an invite with. An invite the relay will not take (the plan does not share, another account offers it, the sign-in does not hold) leaves the list, and the client emitsinvite_refusedwith the reason (OfferRefusal).
Patch Changes
- A large model's graphic is added in batches: the WebSocket client collects the graphic frames for 30 ms (a request's result, a structure change or a closed connection adds what has arrived at once), and
graphic.addPackagescreates the geometry of only the added containers, in one store update (geometry.createGeometriesIfNotCached). Before, every frame updated the store several times and walked every container received so far, and an assembly of a few thousand frames kept the browser busy for minutes. - Updated dependencies
- @buerli.io/core@2.0.0
1.2.0
Minor Changes
- Added
WSClient, a client for the ClassCAD Drogon WebSocket protocol, with multi-client session sharing.createInvite/revokeInviteissue and revoke edit/view invites,peers/invitesexpose the session state, andsendPresenceplus thepresenceevent share viewpoints and cursors between clients. Helpers for share URLs (buildShareUrl,getShareTokenFromUrl,getSessionShareState,subscribeSessionShare) are exported as well. - Session sharing reaches engines that run in the page, and carries more than the model. A
WASMClienthosts its session itself (SessionHost):createInvite/revokeInvite,peers,invitesand presence work as on aWSClient, and guests join with?invite=<token>where a ClassCAD MCP on the same machine introduces them (sessionUrl, defaultDEFAULT_SESSION_URL). AddedsyncSelection(client), which shares a drawing's selection with its session and selects what a peer asks for (readSelection,applySelection, theselectionandselectpresence channels), and client identities: a client given anidentitysays who it is, and every client collects what the others said (identities, theidentities_changedevent,SessionShareState.identities). AWSClienttakes a URL without a scheme (/session) as an address on the server the page came from, and every client has adrawingId. WASMClienttakes an access token instead of a key:new WASMClient(drawingId, { token: 'ccpk_…' }). The engine's key is fetched from ClassCAD's token exchange when the engine starts, cached until shortly before it expires, renewed in the background, and kept when the service cannot be reached.getKeylets an app supply keys from its own sign-in;classcadKeyworks as before.resolveEngineKeyandrequestEngineKeyare exported for other hosts.- Added per-connection emission config:
getEmissionConfig/setEmissionConfigon the ComClient andBuerliCadFacade.utils, plusBuerliCadFacade.utils.withEmissionConfigto run a script with a temporary config. On engines without support the calls reject with an error namedEMISSION_CONFIG_UNSUPPORTED. - Added
BuerliCadFacade.tree()andBuerliCadFacade.graphic()to read the structure tree and the current tessellation of a drawing. Both are also returned byuseBuerliCadFacade.
Patch Changes
- Updated dependencies
- @buerli.io/core@1.2.0
1.1.0
Minor Changes
- Added an optional
xAxisparameter tocirclemethod in Curve API. This parameter can be used to define the parametric start of an arc. - Added an optional 'silent' flag to the
evaluateExpressionAPI function in the Common API. - Deprecated
splitAllCurves,trimCurvesandsplitCurvesMergeBackin the Sketch API. UsepreTrim,trimandpostTriminstead. - Added an optional
isConstructionparameter toline,circle,arcByCenter, andarcBy3Pointsmethods in the Sketch API. When set totrue, the created curves are created as construction geometry in the sketch. - Added new methods to Sketch API to get diagnostic information of the sketch. New methods are
getGlobalState,getDiagnosticsInfo,getObjectsLists,getObjectInfoandgetTopologyInfo. - Deprecated
splitCurvesin the Sketch API. UsesplitCurveinstead which returns a more structured result.
Patch Changes
- Updated @classcad/api-js version to
21.2.0 - Updated dependencies
- @buerli.io/core@1.1.0
0.13.0
Minor Changes
- Add useCurrentTransform flag for updateFastenedConstraints and updateFastenedOriginConstraints
- Add SphericalConstraint and GearRelation. SphericalConstraint connects two mates, restricting translational degrees of freedom, but leaving rotational degrees of freedom. GearRelation connects rotation values of two RevoluteConstraints, allowing to set a linear relationship between them.
- Add new assembly constraints: GroupConstraint, LinearPatternConstraint and CircularPatternConstraint. GroupConstraint fixes relative transforms of selected instances to each other. LinearPatternConstraint makes copies of selected instance and fixes their relative transforms to each other in a linear pattern. CircularPatternConstraint makes copies of selected instance and fixes their relative transforms to each other in a circular pattern.
Patch Changes
- @buerli.io/core@0.13.0
0.12.0
Minor Changes
- Add new feature CompositeCurve to buerli. This allows to create curves composed of brep edges and sketch curves. New method
updateCompositeCurve()has been added to FeatureAPI.
Patch Changes
- @buerli.io/core@0.12.0
0.11.0
📝 Note: To use version
0.11.0of@buerli.io/classcad, you must install@classcad/windows-x64,@classcad/linux-x64or@classcad/linux-arm64at version0.0.8to be compatible.
Minor Changes
- Add new API method
setAppearance()to BaseModelerAPI and CommonAPI. It allows to set color, transparency and tessellation settings on entities (e.g. solids) in one single call. - Add new feature Twist to buerli. This allows to create twisted extrusions. New method
updateTwist()has been added to the FeatureAPI - Change type of parameter for API method
addDimensions()in Drawing2DAPI. This improves the flexibility of adding different dimensions to the model. This change breaks the API. - Due to the new API method
setAppearance()the methodssetColor()andsetTransparency()in the BaseModelerAPI and CommonAPI are set as deprecated and will be removed in a future release. - Add two new methods called
setDatabaseSettings()andgetDatabaseSettings()to the CommonAPI. With this methods it's possible to control different settings about tessellation and graphics in general on ClassCAD server.
Patch Changes
- Updated dependencies
- @buerli.io/core@0.11.0
@buerli.io/core
2.0.0
Minor Changes
- Every export is documented, most with an example of where it goes in an app, and each package carries its API reference as markdown in
doc/api: a page for the package (what it is for, what it exposes) and a page for each part of its API, with what most apps don't need under Advanced. buerli.io shows it. The props of the components are exported as types (BuerliGeometryProps,DrawingProps,ModelTreeProps,EditorProps, …).
Patch Changes
- A large model's graphic is added in batches: the WebSocket client collects the graphic frames for 30 ms (a request's result, a structure change or a closed connection adds what has arrived at once), and
graphic.addPackagescreates the geometry of only the added containers, in one store update (geometry.createGeometriesIfNotCached). Before, every frame updated the store several times and walked every container received so far, and an assembly of a few thousand frames kept the browser busy for minutes.
1.2.0
Patch Changes
- Structure patches are now applied with structural sharing, so unchanged tree nodes keep their identity. The
jsonpatchandfast-json-patchdependencies were removed. Thethreedev dependency is aligned to^0.153like the other packages.
1.1.0
Patch Changes
- Updated @classcad/api-js version to
21.2.0
0.13.0
0.12.0
0.11.0
@buerli.io/react
2.0.0
Major Changes
-
React 19, @react-three/fiber 9, drei 10, three r170+, zustand 5, antd 6 and styled-components 6. These are the new peer dependencies; React 18 and fiber 8 are no longer supported.
useBuerlianduseDrawingkeep their equality-function argument (onzustand/traditional), so selectors and theshallowcomparisons that use them work as before. The custom line elements (line_,line2,lineMaterial) are declared on fiber'sThreeElements.@buerli.io/corebuilds its store with zustand 5'screateStore. react-cad's tooltips no longer usefindDOMNode, which React 19 removed.react-cad is now part of this repository; it keeps a version of its own.
Minor Changes
-
Every export is documented, most with an example of where it goes in an app, and each package carries its API reference as markdown in
doc/api: a page for the package (what it is for, what it exposes) and a page for each part of its API, with what most apps don't need under Advanced. buerli.io shows it. The props of the components are exported as types (BuerliGeometryProps,DrawingProps,ModelTreeProps,EditorProps, …). -
useBuerliCadFacade(name, build, deps)makes a drawing's model: it runsbuildwith the drawing'sapionce the drawing is connected, and again when a value indepschanges. A run that a newer one replaces, or whose drawing closes, stops at its next call ofapi, so quick changes ofdepsdon't mix two models;StrictMode's second mount, and content that a Suspense boundary hides and shows again, don't build again. The builds on one drawing take turns; an error goes to the nearest error boundary. Withoutbuild, the hook works as before. A drawing now closes a tick after its last component unmounts, so React'sStrictMode, which mounts each component twice in development, and a component that is replaced in one go keep their drawing instead of losing it. -
The stage can be drawn by three's WebGPURenderer (on WebGPU, or on its WebGL2 backend), as Buerligons now does, as well as by WebGLRenderer.
- react-cad:
DrawingtakesViewOptions, buttons of the app's own for the stage's right-hand dock, and there is alookicon. The sketch's line and arc materials are named (rcad-sketch-line,rcad-sketch-arc), so that a renderer without GLSL can stand in for them; an arc's geometry keeps its position and parameter in one buffer and has no normals (WebGPU takes eight vertex buffers to a draw); a work plane's outline is drawn as segments, since WebGPU has no line loops. - react: a body's material is named
buerli-body, and takes no polygon offset in wireframe (WebGPU refuses one for lines); the vertices' material is namedbuerli-points.
- react-cad:
Patch Changes
facade.connect()rejects with what kept the drawing from connecting, such as a token the key service refuses ("This token is unknown or revoked.") or an engine that cannot be reached, and removes the drawing it made. It used to log the error and resolve to null, after whichfacade.apiandfacade.drawingIdthrew "Did you call connect() first?".useBuerliCadFacadethrows that same error to the nearest error boundary, where it used to show "Drawing ID not set. Did you call connect() first?".BuerliCadFacade.utils.connectis unchanged: it logs the error, shows a message and resolves to null.- Edges can be picked while they are switched off, and so in Buerligons' realistic look, which switches them off: a fillet's or a chamfer's edges, a measurement's, any selection that takes edges. A body whose edges are switched off used to have none to point at; they are now there undrawn, and show when they are hovered or picked.
- The examples on the packages' pages and BuerliGeometry's build their models with
useBuerliCadFacade(name, build, deps), where they built in an effect. - Updated dependencies
- @buerli.io/core@2.0.0
- @buerli.io/headless@2.0.0
1.2.0
Minor Changes
- Added
BuerliCadFacade.tree()andBuerliCadFacade.graphic()to read the structure tree and the current tessellation of a drawing. Both are also returned byuseBuerliCadFacade.
Patch Changes
- Updated dependencies
- @buerli.io/core@1.2.0
- @buerli.io/headless@1.2.0
1.1.0
Patch Changes
- Updated dependencies
- @buerli.io/core@1.1.0
- @buerli.io/headless@1.1.0
0.13.0
Patch Changes
- Updated dependencies
- @buerli.io/headless@0.13.0
- @buerli.io/core@0.13.0
0.12.0
Patch Changes
- @buerli.io/headless@0.12.0
- @buerli.io/core@0.12.0
0.11.0
Minor Changes
- Add new hook called
useHeadless()which creates a component-bound ClassCAD connection to interact with it
Patch Changes
- Update package @react-three/drei in devDependencies to
9.92.3and in peerDependencies to>=9.92.3 - Updated dependencies
- @buerli.io/headless@0.11.0
- @buerli.io/core@0.11.0