The world needs another CAD program.

Weekly Release - 2022-W36

I spent most of last week working on CAD kernel cleanups, with the goal of addressing the issue that is blocking further progress on the union operation (#993; also see the more detailed update I left in there).

I'm very happy with the progress I've made, but I also hope to finish this work soon, so I can return to working on the union operation (#42) directly.


Fornjot is supported by @webtrax-oz, @lthiery, @Yatekii, @martindederer, @hobofan, @ahdinosaur, @thawkins, @bollian, @rozgo, @reivilibre, and my other awesome sponsors. Thank you!

If you want Fornjot to be stable and sustainable long-term, please consider supporting me too.

End-user improvements

Improvements to Fornjot and its documentation that are visible to end-users.

Ecosystem improvements

Improvements to the Fornjot ecosystem that are relevant to developers who are building on top of Fornjot components.



Internal Improvements

Improvements that are relevant to developers working on Fornjot itself.

Issue of the Week

One important function of a CAD application is to export the CAD model to external file formats, for further processing in other software. Fornjot currently supports export to STL and 3MF. Both of those formats are comparable, in that they contain a triangle mesh.

3MF is more tightly specified than STL, however, and we make use of that by verifying the validity of exported 3MF files as part of our CI build. This has caught a lot of bugs already! We use a custom tool based on lib3mf to do that, but unfortunately this tool only works on Linux, making it impossible for users of other operating systems to do a full build locally.

If you have access to Windows or macOS and know a thing or two about linking C/C++ code into a Rust program (or would like to learn), #920 - export-validator doesn't support macOS and Windows might interest you.


My priority remains the union operation (#42), which is currently blocked by #993. Addressing that will keep me busy with cleanups for some more time.

Next up is finishing the cleanup of the sweep algorithm, which should help unblock #993 and #1020. After that, I plan to address #1020, as that will simplify a lot of code, promises to address some long-standing issues (#97, #250), and should make the next steps easier. After that, I'll look into #695, as solving that will help address #993.