The idea for Landau came when I was toying around with OpenSCAD. While being used in a lot of open hardware projects (especially in the 3D printing world), it has a lot of shortcomings. After all, making a custom programming language for your project always has its downsides, especially when it comes to developer tooling.
I think if CAD-in-code would really take of and get toolchains that are tailored for it (e.g. validation of mechanical constraints in CI), it could improve development speed and knowledge sharing in hardware engineering a lot.
Luckily, there was already a Javascript adaption of OpenSCAD: OpenJSCAD. OpenJSCAD already enables a lot of cool things, like easy splitting of a bigger project into modules, and sharing reusable CAD geometry via NPM. But as someone who was at the time working a lot with React, it was lacking one thing: JSX.
Yes, quite a few people here will be shocked, but I am a very big friend of JSX-like syntax. I think JSX really nailed how to make compostion of nested components intuitive. It also allows for easy extraction/refactoring into different components and functions when you feel it's necessary.
With that idea in mind, I wrote a lot of the core logic mid 2017 and then did a bigger refactor in the winter holidays 2017.
What came out of it:
- The core landau package
- A server to help building GUIs
- An adapted Atom plugin that allowed coding landau components with live preview in Atom
- An electron based standalone viewer to allow for live preview when coding in other editors (e.g. vim)
Retrospective
I stopped working on the project mostly because I didn't get my cheap 3D printer working, and with that didn't really have any practical use for the system. IIRC the project is in a state where the core functionality should work, but a lot of tooling would probably need serious refactoring to be useful.
I still believe in the core ideas behind the project. As of right now (May 2020) there doesn't seem to be any project that really has fulfiled my goals. I found Cadmio, which seems to aim for something similar, but is apparently in a similar stage, and seems to be focused on "just transpiling JSX" (without providing better/more consistent naming for OpenJSCAD parameters).
If I were to start the same project again right now, the core thing I would do different is trying to take advandtage of the custom renderer functionality of React. When I started Landau, custom renderers werer barely a thing IIRC (and there are a lot of them now), so I spent a lot of time trying to reimplement the internals of React.