samwillis
I'm very excited about what Matt is building, the world desperately needs a good open source parametric CAD package. One where the UI/UX is designed to be as "easy" to use a SolidWorks.

The biggest reason this hasn't happened so far is the lack of a truly capable parametric kernel, Truck, the kernel that Matt is using looks like an incredible project and exactly whats needed. The only other kennel till now that been close to being whats needed is OpenCascade, but its lacks important features, is buggy and at times quite unstable.

Once Truck (and CADmium) lands stable fillets (surprisingly one of the hardest features to make stable) it will prove itself as the perfect successor to OpenCascade and and the perfect platform to build the future of open source parametric CAD upon.

phkahler
As one of the Solvespace maintainers I have a few comments:

1) You don't want just 2D constraints, 3D is better. If you were writing in C++ I'd say just take our constraint solver (Like Dune3D did). Since you're loving Rust, I can point you to the work of Michael F Bryan who wrote one in Rust and blogged about it here: https://adventures.michaelfbryan.com/posts/constraints-part-...

I think his code is over at gitlab. I haven't looked at it in a couple years. He wrote that after I nerd-sniped him ;-)

2) For geometry kernels... I've got 3 classes of bugs I want to squash in the Solvespace kernel and then it should do booleans pretty reliably, but I haven't had the time. Ours is just under 6k LOC so you could learn a lot from it. My email is the same ID at gmail if you want to ping on this topic. Its been a while since I looked at Truck and I thought it had stagnated a bit. This is a really hard problem, which is why there are so few options out there even in the commercial world. Even triangulating a trimmed NURBS shell is tricky.

3) History/feature tree is closely related to the "topological naming problem" that FreeCAD has. Solvespace handles this by creating each entity from a set of known things. If you try to recreate (regenerate in our lingo) it will just return a handle to the existing entity rather than creating a new one. In other words, every entity "came from something" and that relationship is remembered. Where we handle topological naming it works perfectly. But not everything in solvespace is covered by this. You need to bake this in from the start, it's not something you can easily bolt on afterward.

4) where is the link to try out CADmium?

alright2565
I think this is amazing. I'd love to get to the point where we are with open source EDA with open source physical CAD.

> Another downside is that solving this kind of matrix equation gets prohibitively slow when you have a lot of unknowns, which gives rise to the conventional wisdom that individual sketches should be small and simple.

I've gotten quite deep into this, and this is really not a problem in practice[1]

1. FreeCAD's main issues with constraint performance come from a redundant & unnecessary GUI layout algorithm, which falls over with just a few hundred constraints.

2. Eigen's sparse QR decomposition benchmarks at 18s for 2200 constraints, which is really not too bad

3. There are sparse QR decomposition libraries that can handle 500k-1M constraints in about 18s. I can't imagine a CAD sketch with more than a few thousand constraints.

[1]: https://github.com/FreeCAD/FreeCAD/issues/11498#issuecomment...

gen3
As someone who learned CAD on autodesk (inventor) ages ago, the only free modeling software I could grasp after working for a few hours was Onshape. Usability seems to be a real problem in this space, Freecad for example seemed to have a billion ways to do the same thing, but in the end only one of them was the real way, some tutorials leaving me with a model that doesn't conform.

Awesome work! It seems like a hard problem

Repo: https://github.com/MattFerraro/CADmium

s1mon
It's exciting to see a new entry into this space, especially one that is trying to create a new kernel. Unfortunately, it seems unlikely to be successful. The top kernels in the industry have been in development for decades by armies of CAGD PhDs and programmers, with funding from automotive and aerospace companies. Getting to table-stakes with the feature set will take a long time.

I also question what user problems this is trying to solve. CAD users don't necessarily need things to be open source. They may have limited budgets, but open source is not a user facing feature in this space the way it might be for some developers. Plasticity has shown that it is possible to license Parasolid and make money at a very low price point.

I've been using parametric CAD tools for 30+ years. I find that Onshape is a pretty amazing solution to many of the issues that exist with Creo or Solidworks. I never loose data. Having the equivalent of Google Docs for collaborative CAD with unlimited undo based on a ground up database instead of a file system is life changing. That said, its modeling capabilities are still playing catch up with other tools.

A big downside to Onshape (and Creo and Solidworks) is that it started as 2D sketches to extrude/revovle/loft etc into 3D objects. 3D tools are an add on and afterthought to the fundamentals. Plasticity (and Rhino and Alias) are all much more 3D first.

Onshape's FeatureScript is really cool and powerful, but it is not as good for CAD users to build their own tools as say Grasshopper in Rhino.

I would focus on what user problems are being solved. How will CADmium be a better CAD tool for a certain market than any of the others paid or free? Even though this is very early days in the development process, it's not too early to try to understand user needs. Open source is not in and of itself a goal.

JeremyHerrman
What an excellent summary of the CAD kernel landscape.

Favorite quote from this:

"The only popular open-source b-rep kernel is OpenCascade, which is the Pontiac Aztek of b-rep kernels: It is ugly, barebones, and it might break down on you, but it is drivable and you can get one for free."

SO true!

WillAdams
Why in a browser if it's local-first?

Solvespace has the benefit of being a single download/executable.

It also has a constraint solver which has been used in a couple of projects: CADsketcher as you noted, and Dune 3D: https://github.com/dune3d/dune3d where the author noted:

>I ended up directly using solvespace's solver instead of the suggested wrapper code since it didn't expose all of the features I needed. I also had to patch the solver to make it sufficiently fast for the kinds of equations I was generating by symbolically solving equations where applicable.

Any relation to: https://github.com/jay3sh/cadmium ?

Also, for CAD kernels, Manifold was not mentioned: https://github.com/elalish/manifold/wiki/Manifold-Library --- while I understand it to have many of the same disadvantages as OpenCASCADE, it does seem worth mentioning.

Interestingly the kernel was previously discussed here:

https://news.ycombinator.com/item?id=35071317

It seems really interesting/promising, esp. the compleat history and editability (I'd love to see that history listed in a pane which could be opened/closed --- add a series of disclosure triangles which would allow hiding finished elements so that one could focus on the current task and it would be a dream come true for me --- if I can puzzle out the 3D stuff, so far I've crashed and burned on all the apps I've tried (BRL-CAD, FreeCAD, Solvespace, Alibre Atom...) --- the only thing I've been successful w/ is OpenSCAD and similar coding tools).

blt
> 3D CAD apps are among the most complex UIs that exist.

I agree.

> If you want to make a good one and you only have a small team, the framework had better do a lot of heavy lifting!

I am skeptical that general-purpose UI frameworks can be a good long-term solution for 3D CAD. At times, a nice UX will need to think about many of the following at once:

    - the parametric 3D model
    - its mesh approximation
    - its hidden-surface projection into lines and patches
    - the pixels in the frame buffer
    - UI widgets.
The frameworks make too many assumptions about information being easily partitioned and limited in size.

Maybe the frameworks will help for prototyping, but if the project grows, I expect at some point they will end up ditching frameworks for the core 3D viewport interactions, and have mostly their own code in between OpenGL (or similar) and mouse/keyboard events.

Frameworks for buttons, lists, etc. will probably be fine, but even those tend to be much more dynamic in 3D CAD than in average apps.

hathawsh
I really hope CADmium can wean me off of OpenSCAD. With OpenSCAD, I don't really have to think at first; I use a simple language to write modules that build on other modules. The problem with OpenSCAD is there's no solver: I have variables, but no constraints. As I make changes, suddenly I have to think hard and solve the constraints manually and it's easy to introduce errors. However, the problem isn't severe enough to get me to use something else, because starting a model with OpenSCAD is IMHO far easier that anything else I've tried.
sliptonic
It's great to see others investing time and talent into open-source CAD. At Ondsel, we believe open-source CAD is incredibly important and we're thrilled to see innovation in this area.
ecjhdnc2025
Outstanding writing that is clear and convincing.

I am a mostly (and increasingly) happy FreeCAD user (though I agree with your framing) but OMG I am happy for you, and I will try to get involved when I can.

Best of luck.

rjsw
We spend a lot of time working on the correct type system for STEP, I don't think that using an untyped format like JSON is a good idea.

I know that ISO 10303-243 uses JSON but in hindsight I think that was a mistake.

PrivateButts
I recently messed around with using OpenSCAD's WASM build to make a serial plate generator for Voron printers[1], and the one take away from it is that we desperately need a cad export format that preserves variables and history so that parts can be regenerated with new parameters. OpenSCAD, or some other project built on top of it could get there, but not without some major work. Currently building complex projects in OpenSCAD feels like a form of self harm.

[1] https://serial-generator.privatebutts.dev/voron

andybak
peppertree
Plasticity was open source before it abandoned c3d in favor of Parasolid. The repo can still be found here: https://github.com/nkallen/plasticity
sliptonic
A 2D solver works great for sketches and some kinds of assemblies. However, it is insufficient for many kinds of 3D assemblies. The solver Ondsel released (LGPL) which underlies the new integrated assembly workbench is a true 3D solver. https://github.com/Ondsel-Development/OndselSolver
RobotToaster
> In contrast, the open source CAD landscape looks like this:

He missed BRL-CAD, which also does brep. The interface is clunky but the kernel seems advanced.

adastra22
It appears to be written in Rust. Why package it as a wasm app inside of electron instead of compiling to native and using wgpu directly?
bee_rider
I’m slightly confused by the 2D constraint problem solver, it seems to me like they have a probably sparse, possibly banded problem. Of course, in a high level description a whole lot can be excused under

> In practice many optimizations are made.

And I’m sure there’s a good reason to do physics. But, do iterative solvers like gmres or whatever have trouble with these kinds of problems?

TaylorAlexander
This looks great! I hosted some discussion about open source cad late last year on this GitHub discussion board. People tend to say that building a new CAD kernel would take ten full time engineers ten years. I like where truck is going and I’m curious to see what its current limitations are. Sadly I haven’t had as much time as I’d like to evaluate the various options. (The other promising option for a complete package is Ondsel).

See that discussion forum here:

https://github.com/tlalexander/open-cad-foundation/discussio...

jesperwe
I have to say I love your approach to solving sketch constraints.

Many times I have used traditional solvers to map out an old building where no angles are 90°. I measure a bunch of distances (with some inaccuracy of course) and spend hours fighting with the solver to get to something that satisfies most of the measurements.

This takes time because I am in essence doing exactly the converging spring forces simulation that you propose. Except much slower :-)

jpm_sd
What a great piece of writing. Clearly explained, nicely illustrated, got me really excited about the project.
fahhem
The claim that onshape runs in a gpu-enabled AWS instance and 'streams the result' to your browser seems far-fetched. I haven't investigated, but I don't have the best internet connection and onshape isn't laggy like anything else built like that. It's possible the core solvers run elsewhere, but the UI and other interactions are definitely all rendered locally.
JAlexoid
Hopefully it's an easy to use CAD, because my preferred CAD right now on Linux is FreeCAD is way too complex and the user input in the UI horrendously clunky.

The good side is that all CADs have a very steep learning curve, with most tutorials made by people who are oblivious to the ignorant masses. The landscape is so complex today, that it's easier to use a vector drawing tool and transform it into a 3D model than to use any CAD to make a cylinder.

mijoharas
This looks cool.

What would people recommend for a CAD program to run on Linux that I could use now (that is either free or cheap). I have simple requirements, I want to make a box for some electronics, but need the ability to import (and extrude etc) SVGs.

I couldn't see the SVG feature when I looked at dune, and I had some problems when I used freeCAD, but was planning on looking into it again.

What would people suggest?

xinayder
Seems like an exciting project, I'd like to try it out as soon as there's a public testing phase.

On another note, please don't use Discord for development: https://drewdevault.com/2021/12/28/Dont-use-Discord-for-FOSS...

use IRC or Matrix but not Discord.

ryukoposting
Good to see someone is making this. Losing free student access to Autodesk Inventor exposed me to the hideous world of free-as-in-money 3D CAD software, and my interest in 3D CAD fizzled pretty quickly as a result.

On a related note, we really, really need a worthy replacement for EAGLE. It's only a couple years away from EOL, and KiCAD is light years away from being feature-equivalent.

porphyra
I like how the Truck kernel's github [1] says that their choice to use Rust and WGPU is due to "Trendy Tools" being a core principle. I'm super excited about this.

[1] https://github.com/ricosjp/truck

bimguy
This is an awesome project. I work with Revit(Python coded) so immediately tried shift + mouse wheel click drag. If you can get anywhere near Revit that would be impressively scary for Autodesk.
logrot
Totally going to check this out. I've been rooting for FreeCAD but I think it's just going to be consumed by Ondsel in the next few years.

Does CADmium suffer from a topological naming problem like FreeCAD?

juliangmp
>If you'd like to join the effort, join the Discord!

Why is it that open source programs always want me to use an awful (and proprietary) chat app?

phero_cnstrcts
I dislike the browser idea but I’ll take it over any subscription based app.
syntaxing
Absolutely amazing. I have high hope for this project to be a real OnShape competitor!
stirfish
Inequality constraints! This makes me really excited
bilsbie
Why should I use this over openscad?
dvh
Are boolean operations working yet?
MCLAU155
onShape has been great
eschaton
Why would anyone want to do CAD in a web page?

JavaScript should be limited to 1997 Netscape 3.0 performance to stop this kind of garbage. And WASM should never have been attempted, and should be removed.

Write real native software if you’re trying to make something good for end users.

xipix
Getting negative vibes from the name. Cadmium's a nasty substance. I mean, you wouldn't call an augmented reality app ARsenic, would you? Constructive, I hope, criticism.