News for hackers. Stuff that matters.

YuechenLi

Would you be interested in evaluating (or having your LLMs check out) my geometry kernel Aetheris for your project? I already have DSL (called Firmament) parser/lexer/AST part down, and it is designed to be easy to extend, so you don't have to write everything from scratch.

https://github.com/yuechen-li-dev/Aetheris

One of my goals when I built the kernel is I want to make building a pro grade CAD software as easy as wrapping a web frontend around the Aetheris libraries. It's still very much an aspirational goal though.

Ok, I think I oversimplified it too much previously, the more accurate way to word the difference is that in OCCT/ACIS/Parasolid, NURBS and analytical surfaces are separate entities altogether, whereas SMLib, due to its heritage, uses NURBS as the underlying representation of everything and only use analytical surfaces as shortcuts, and even their analytical surfaces are built on top of NURBS.
MoL seems to be more of a Rhino alternative than it is a mCAD application, so, yes, the architecture that makes it good for freeform surface modeling is what makes it less good for mechanical engineering applications.
Hmmm. Have you tested the hard case, surface/surface intersections between cylinders yet?

For your application in IFC, the architecture difference between OpenCascade and SMLib doesn't matter as much, but a geometric modeling kernel for mechanical CAD has much stricter requirements in terms of geometric correctness, which is the reason that Rhino, despite being BRep and widely used in architecture, isn't used very much in mechanical CAD at all.

FreeCAD and Dune3D are both OpenCascade based, so they are limited by OpenCascade's architecture (For example, OpenCascade uses per-entity tolerances, which means it is more bad geometry import tolerant, but if every face and edge has its own tolerance value in the kernel representation, then it creates a great amount of hidden tolerance drift.)

SolveSpace is still fairly limited on what it can do in terms of features such as fillet/chamfers, so it's not really suitable for pro work right now

For projects like SolidCraft, the SMLib kernel they are currently porting to Rust from Nvidia is currently about a decade behind OpenCascade, nevermind Parasolid/ACIS as they are still converting all geometry to NURBS instead of preserving analytical geometry, which means that their initial development is easier but it creates a near infinite amount of edge cases once they start going heavy into booleans and fillet/chamfers.

From their Github, it looks like OpenCascade with Manifold for mesh boolean that they are calling MEDUSA.
Wow, I'm glad I'm not the only person insane enough to make a geometric modeling kernel solo with LLMs. Did a quick review of the architecture, it's probably the strongest conventional kernel that's currently open source, much more advanced than Truck or SolidCore/SMLib currently.

(I'd like to think my own kernel is little bit ahead of you architecturally though.)

How's the Boolean and fillet/chamfer robustness currently in Popkern?

Also, would you like to collaborate and compare notes? It's a lot of work trying to maintain something like this solo.

https://github.com/yuechen-li-dev/Aetheris

Re:Type Server Protocol on Monday October 26, 2026 @11:11PM (#50254322)
Interesting. Look up "semantic compression", and you can also try out one of my experiments to see if it works for you.

https://github.com/yuechen-li-dev/GenerativeCompressionProto...

Re:Type Server Protocol on Monday October 26, 2026 @05:42PM (#50251434)
Out of curiosity, may I ask what the big unrelated problem is?
Re:Type Server Protocol on Monday October 26, 2026 @03:57PM (#50250020)
At this point, Python is less of a programming language by itself but more of an interop protocol between various C/C++/Fortran/Rust binaries. But again, it's just part of the cycle, Python was a breath of fresh air 10 years ago when academia is still dominated by Matlab, but now it is mostly a mess of a language that's good for throwaway scripts but not very convenient for large software projects compared to statically typed languages.
Re:We should be more ambitious with the software we build on Monday October 26, 2026 @04:26AM (#50240768)
https://github.com/yuechen-li-dev/Aetheris

Already made the geometry kernel. So far, nobody has offered me even like 20 dollars to license it yet, nevermind millions of dollars.

Aetheris generates STEP AP242 BREP directly, the tessellated mesh generated is only used for display (although currently, I've switched to a WebGPU based SDF representation so the surfaces can be smooth). One of the key differences in the architecture Aetheris doesn't export rational b-splines outside of debug or STEP passthrough and instead tries to recover and export analytical and non-rational splines instead.

On screw thread, if you mean by "how do you make a screw thread in Aetheris", you can check out the actual code for a threaded bolt I built for a showcase here with the JSON like DSL called Firmament:

https://github.com/yuechen-li-dev/Aetheris/blob/master/fixtu...

So, the high-level surface language of defining a screw thread is basically a struct/record that looks like:

    Thread MainThread {
        Surface: face(Bolt.Shank)
        MajorDiameter: 8mm
        Pitch: 1.25mm
        Length: 47.5mm
        StartOffset: 1.5mm
        }
Which is why I said that it's really hard to think of an editor UI for Aetheris that's not just a text editor or a ComfyUI like graph visual programming or something.

If you mean compile speed wise, not great right now, it wasn't that much of an issue when running on RyuJIT natively since it's still acceptable, but currently WASM cold compile speed for a moderately sized assembly is around 4-5 minutes so there is a lot more work to be done before I'm ready to put it on a cloud server.

I think I've seen ports of OCCT to Rust as well as Rust wrappers for OCCT floating around Github once or twice already.

However, OpenCascade being C++ instead of Rust is the least of its problems, the main issue is OCCT's boolean/blend engines aren't really as robust as the commercial kernels, and handling arbitrary 3D boolean edge cases one by one correctly is one of the main difficulties of a geometry kernel.

Very interested in SolveSpace's progress on this really.

Well, this is more similar to a linter/borrow checker than anything else, because if you catch errors at compile time, the bad geometry doesn't persist in the STEP artifact that's being generated, so analogous to the philosophy of Rust vs C++ really.

The current design is meant to be import tolerant but export strict, it imported most STEP file I throw at it fine after a bunch of fixes, but I don't really have a big enough sample corpus know for sure how much real world STEP file it can handle.

A sliver is basically a tiny degenerate geometry in the micro/nanometer scale that's basically the result of ambiguous surface intersections. Basically, if you put two say, cylindrical surfaces against each other in NURBS form, floating point noise would generate these microscopic geometric noises, and a lot of what commercial kernel does is they use what they call "healing" operations to clean up those bad microscopic geometries from the models they generate.

Aetheris took a very obvious approach that not many have seemed to tried before: It throws an error when an operation that may create ambiguous intersections and refuses to materialize bad geometry in the first place, which is not really possible to do with traditional NURBS based kernels, whereas Aetheris can because it is analytical first.

Re:Where is all the new, good software? on Tuesday October 13, 2026 @04:59AM (#50068704)
Yeah, the Photocraft (or whatever that photoshop clone name is, naming everything *craft just blends the names together in my head) program, for example, is way too slow in WASM to be usable, I think it ran on a single thread without using Worker and basic optimization features like that.

Just because you can throw tens of thousands of dollars at frontier LLMs doesn't mean what they write would be good, you still need to have some oversight for their work.

> Creating a b-rep kernel is a phenomenal amount of work

Well, I did it, took 6 months, and I think I'm ahead of Truck on that front since as far as I can tell Truck can still only do single edge fillets with Newton's method as their new fillet algorithm, whereas my kernel can do planar fillet chains fairly reliably.

I wish someone would wrap a frontend around it too considering I'm bad at designing UIs, and the architecture is too weird to put a conventional 3D CAD UI on it that I'm honestly hoping someone would throw their LLM at that task.

https://github.com/yuechen-li-dev/Aetheris/

Also, sorry about the excessive self-promotion, but I think most people would be shouting from the mountaintop if they built a BREP geometry kernel from scratch solo too.

Re:OpenSCAD the Programmers Solid 3D CAD Modeller on Sunday October 11, 2026 @12:36AM (#50039833)
OpenCascade is an almost 30 year old C++ codebase that's known for being notoriously difficult to integrate.

The bigger issue is that OpenCascade is error tolerant to a fault, which allows it to import a lot more legacy geometries, but it also means that it silently exports a lot more bad geometries much more often than commercial kernels

So, there's a reason why commercial solutions don't really use OpenCascade over ACIS/Parasolid for authoring.

Re:OpenSCAD the Programmers Solid 3D CAD Modeller on Saturday October 10, 2026 @06:29PM (#50037830)
STEP is a weird standard and one of the reasons it's weird is because it allows you to store tessellated mesh in the file with no BREP. Wrapping an STL mesh inside a STEP container is trivial, but reconstructing a BREP from the mesh is daunting.

Here're are some SIGGRAPH 2026 papers attempting BREP recovery, if you are interested. None of their automated approaches seem to work reliably, and they can only recover generic NURBS instead of analytical geometries like circles/cones/torii, etc.

https://github.com/AutodeskAILab/DualBrep https://github.com/yilinliu77/Brepler https://rilpraa0110.github.io/Img2CADSeq/

What I'm interested in is their performance, since I would assume that they are running in WebAssembly from reconstructed C/C++ code decompiled from binary, what would be the overhead on that compared to running on native? And how does running on WebGPU compared to running with native through DirectX/OpenGL?
Re:OpenSCAD the Programmers Solid 3D CAD Modeller on Saturday October 10, 2026 @03:48PM (#50036481)
Near impossible to do it robustly without AI, since a mesh is a blob of triangles and vertices, it doesn't really know if something is a "face" or an "edge", and mesh STL -> BREP STEP is akin to decompilation from binary than it is a simple translation. So, the most robust approach is to get a human/LLM to reconstruct the STEP file from the STL/OBJ/glTF file with a BREP kernel.

I wish there was an easier way, but I've spent weeks during the course of the project working on and failing to solve a similar problem (SDF to BREP) and concluded finally that there just isn't an easier way to do this fully automated without AI.

You can ask your LLM to try it with one of the OCCT wrappers or with my thing, I think Aetheris is slightly better because we added more STEP diagnostic tools like ray query depth detection and SVG sectional view during the course of development.

Re:OpenSCAD the Programmers Solid 3D CAD Modeller on Saturday October 10, 2026 @03:18PM (#50036171)
Yeah, I know. I started this project earlier this year because of my own frustration with the software ecosystem and that the major CAD vendors is charging thousands of dollar to add STEP 242 support and because of proprietary lock-in and locking everything behind cloud, and was trying to see if I can accomplish this with AI.

I'm not going to pretend this is easy: I actually quit multiple times for this project because I ran into the same walls that everyone else ran to: arbitrary 3D boolean operations is HARD,(Surprisingly, I actually didn't have that much trouble with fillets/chamfers because I kept them pretty bounded) and the approach I've finally taken to solve it is pretty insane. Essentially, the final architecture is more like "LLVM for 3D objects" compiler stack than it is traditional BREP kernel. Would love to talk about the technical deep dives if people want to hear it.

Also, feel free to write UI wrappers around it, because I'm pretty bad at UI design myself.

Re:OpenSCAD the Programmers Solid 3D CAD Modeller on Saturday October 10, 2026 @02:59PM (#50036004)
To be fair, arbitrary fillets/blends on edges is a hard problem in general for Parasolid/ACIS because you are trying to mutate arbitrary topology, essentially guessing vertices/edges/faces and trying to stitch the back together.
Re:OpenSCAD the Programmers Solid 3D CAD Modeller on Saturday October 10, 2026 @02:47PM (#50035882)
Oh, since this came up, for people who like code CAD and want to try something more powerful than OpenSCAD:

https://github.com/yuechen-li-dev/Aetheris/

Not an OpenCascade wrapper, it's based off my own experimental BREP geometry kernel. So, fillets/chamfers work, booleans works fairly robustly, surfacing, sheet metal, etc all works decently, it exports STEP AP242 by default.

Haven't had time to get the AIs to write a more up to date documentation and polish the language server. Not the easiest thing to use right now, so, using it through Codex/Claude Code or CLI is probably the easiest way to get started.

Still working on the webUI currently, in case someone want to DIY the UI. Note that the WASM compilation path is still unoptimized and way slower than the RyuJIT C# compilation though.

https://github.com/yuechen-li-dev/helioscad

Re:Rust Port of TypeScript (Tsc) on Friday October 09, 2026 @03:44AM (#50017358)
Already did.

https://github.com/yuechen-li-dev/copeland

Compiles to JS, WASM via Blazor WebAssembly, C# RyuJIT and NativeAOT.

Re:How Machines Learned Precision on Wednesday October 07, 2026 @06:06PM (#49999430)
Hey, so a bit of self-promotion for some free software I built that you may be interested in.

https://github.com/yuechen-li-dev/Aetheris/

It's a code-first CAD kernel/toolkit specifically to help LLMs with CAD stuff, it's currently AI usable but not very human usable yet since I'm working on the editor UI. Get your Claude to clone it and give it a try and see if it's easier than your current workflow.

I built two 3D mechanical demos with it a couple of weeks ago that you can check out as well. https://aetheris-difference-engine-showcase.yuechenli.worker... https://aetheris-editable-v8.yuechenli.workers.dev/

Re:Why Common Lisp Is Now the Best Programming Language on Tuesday October 06, 2026 @04:08PM (#49983360)
Gonum is probably what you are looking for, it should have most of the optimized linear algebra stuff you need.

https://github.com/gonum/gonum

For sparse, I think the best is still Intel's sparse libraries for MKL on CPU, it's just not a workload that runs well on GPU compared to dense SGEMM. You can call it via CGo.

For GPU offloading, there should be a decent amount of CUDA bindings available for Go right now, but I'm not as familiar in that front since I'm building my own GPU compute runtime in Vulkan, but it's still very much an experimental work in progress right now.

Re:Why Common Lisp Is Now the Best Programming Language on Tuesday October 06, 2026 @11:15AM (#49979769)
Unless you are doing very low level C++ manual memory optimization, I would recommend using Go for both: it's on the same scale of magnitude of speed as C/C++/Fortran but the compile time is crazy fast that prototyping in a high-level scripting language like Python really isn't that necessary.

You also get very easy parallelism in Goroutines, excellent ecosystem, and one of the best performance profilers in any programming language, pprof.

Re:Beating the Compiler on Monday October 05, 2026 @03:40PM (#49969566)
Compiler isn't really difficult in the way that many think it is, because it really isn't that difficult to write a basic C compiler for example, and writing a parser is pretty mechanical that there are a multitude of parser generators. The difficult part is that writing an optimized compiler is much more difficult than writing a correct compiler, and certain language features, like generics, closure, and async, propagates and touch every part of the language that the complexity grows exponentially, and it's really hard to balance performance, compile speed, and correctness against miscompiles.

You can kinda see that in the many "compile TypeScript to native via LLVM" projects that showed up a lot recently. From my testing, none of them could beat V8/Node JIT in the majority of cases, and most of them are generally 10x-40x slower.

But, we did have a great number of innovations in language design over the last decades that really closes the gap on how optimized a compiler can be over writing assembly directly: Rust's exhaustive match default null-less error handling and language level MIR, immutable data structures from functional languages to mainstream ones, TypeScript's compile time constraints as core part of the language, and Zig's `comptime` turning compile time metaprogramming to an integrated part of the language instead of C++ template metaprogramming.

Obviously, it's not really possible to beat hand optimized C/C++ or directly authored assembly, but I think a well-designed compiler/language can potentially beat idiomatic C/C++ in performance.

And this is speaking as someone who learned compiler design solely from having every one of his vibe-coded projects turn into either a compiler or a kernel for some reason.

Re:Pop!_OS bans AI-generated code from much of its codebase on Saturday October 03, 2026 @09:53PM (#49949822)
True. I personally use LLMs much more ambitiously to help with my own coding projects, but I've always been very disciplined about planning ahead and task breakdown so that the LLMs can get it right the first time so there won't be any need to fix the code afterwards.

Other people's open-sourced project is different though, so I tend to check/test the code myself much more rigorously when contributing to other people's repos than if it is my own projects.

Older »