Looking at this now, I like the approach! It's also fundamentally different from mine (maybe phew). The mouse driven approach makes it far more approachable, while mine is deliberately code driven and perhaps more quirky (step export is a code function for example).

Also looking at your API, I used a vector type a lot for defining things like planes, so where you have sketch("xz",func) mines a little more like plane(vec).sketch(). How are you handling sketching directly on arbitrary planes or faces etc?

maouida3 days ago | | | parent | | on: 47727855
It seems from what you are describing your software is more like (replicad)[https://github.com/sgenoud/replicad]

The user can create planes with plane() command e.g plane("xy") or plane("xy", { offset: 10 }); but I have added some shortcuts for common planes (https://fluidcad.io/docs/guides/sketching/introduction#sketc...)

you can also sketch on faces sketch(extrusion.endFace(), ...) which will extract the plane from face and put the starting point on the center for convinience.

interstice2 days ago | | | parent | | on: 47727893
Had a bit of a rethink after this, settling on name spacing more like this at the moment. Quite enjoying the cycle of build/try/improve.

const in1 = draw.rectangle(size1, size1).fillet(2)

const in2 = draw.origin([0,0,height1]).rectangle(size2, size2).fillet(2)

const result = make.loft([in1, in2])

interstice2 days ago | | | parent | | on: 47727893
Inspired by yes, it was one of the ones I tried. I like your approach to selection eg endFace, intuitive selection is definitely one of the trickier parts of a code based approach.