The CAD editor, three days later
14 September 2026
Three days ago I wrote that I was building a CAD editor in the browser. Since then it has gone through 18 releases, 32 changelog entries mention it, and the single file that holds the whole thing grew to 3,521 lines. This is where it stands and where it goes next.
What works now
Every edge of a part can be picked: the top rim, the base rim, the vertical corners, the rim of a hole, the mouth of a pocket, and the edges of a cut made on a side wall. Fillet and chamfer apply to one edge at a time, and each edge keeps its own style. One rim edge rounded, the next one chamfered, the vertical corner under them rounded again with a different radius. The roundovers are true arcs, lofted as one surface, not the stack of slices they were a week ago.
Selection only offers what the final part actually has. A hole that a later cut swallowed is no longer a clickable ghost. A face that a notch trimmed at an angle highlights in its trimmed shape, with the real contour drawn around it. To edit an earlier step you click it in the history, the model rewinds to that moment, and its faces are whole again because at that moment they were.
Shapes anchor the FreeCAD way, by a chosen point of the shape, to a reference edge, in millimetres or in percent of the span. A hole pinned 20% from the left edge stays at 20% when the plate grows.
The ghosts
The thing that ate the most time was not geometry. It was invisible pick targets that outlived the material they stood on. The editor builds its selectable faces from the history, one plane per feature, and the history does not know that feature six cut a wedge out of feature two. So the wedge was gone, but the face it used to belong to still caught clicks and lit up as a complete rectangle.
I fixed that four times. First by refusing clicks that landed in mid air. Then by pruning the mouths of holes that no longer had walls. Then by cutting the highlight itself out of the real mesh, so a trimmed face lights up trimmed. The fourth fix was the embarrassing one: hovering over a face you had already selected took a shortcut that skipped all of the above and flashed the original rectangle. You always have the mouse over the face you just clicked, so the ghost was there every single time.
Two more bugs from the same days. A chamfer on a cut's mouth measured 3 mm³ of removed material instead of 15, because each slice of it was 0.01 mm too tall and the topmost one laid a full-size ring across the rim. And a countersink on a notch in a side wall rendered a plate across the opening. The plate had no volume at all. The band of the countersink touched the body of the cut face to face, and the union left a membrane of zero thickness exactly there. Pushing the band 0.05 mm into the body made it go away.
Next
The obvious gap is revolve on a side face, which still refuses. After that, a constraint between sketches on different faces, so a hole in a lid can follow a boss in the base. Then mirroring and patterns, because most of what I model has four screw holes and I place each one by hand.
The editor stays unlisted until those three are in. The models made in it already export fine, and the history files reload, so nothing built now will be lost when it opens.