Show HN: Chili3d – A open-source, browser-based 3D CAD application
https://github.com/xiangechen/chili3d
Features:
Modeling Tools: Create basic shapes (boxes, cylinders, cones, etc.), 2D sketches (lines, arcs, circles, etc.), and perform advanced operations (boolean operations, extrusion, revolution, etc.).
Snapping and Tracking: Precisely snap to geometric features, workplanes, and track axes for accurate alignment.
Editing Tools: Modify (chamfer, fillet, trim, etc.), transform (move, rotate, mirror), and perform advanced edits (feature removal, sub-shape manipulation).
Measurement Tools: Measure angles and lengths, and calculate sums of length, area, and volume.
Document Management: Create, open, and save documents, with full undo/redo history and support for importing/exporting STEP, IGES, BREP formats.
User Interface: Office-style interface with contextual command organization, hierarchical assembly management, dynamic workplanes, and 3D viewport controls.
Multi-Language Support: Built-in i18n support with current languages including Chinese and English.
I read your description and thought, "some toy 3D project; probably slow/lacking features." I mean, you did a fine job but perhaps reading it in such a simple view made it lose something? Not a critique on you, just an observation of myself.
I've looked at it all of a few minutes and this is pretty fantastic. Quite fast, the UI seems relatively understandable coming from other tools. Looks as clean as the rest, anyway.
And I've been annoyed that there's not Fusion 360 available (supported, anyway) for OpenSUSE Tumbleweed ... you may have saved me some grief with this, so thanks for that!
I wondered what geometry kernel it was going to use! Interesting to me how few of these there are. Some of the solid modeling stuff is nearly 40 years old (parasolid) this must be hard.
That being said, for CAD (personal usage) I switched from Fusion 360 to Freecad 1.0 with almost no project and the latter is an order of magnitude faster.
OpenCASCADE used to be commercial, but they couldn't find enough customers to keep on and it got open sourced after a failed commercial existence.
Probably the most accessible NURBS kernel to learn from is the one in Solvespace. The entire source for the core NURBS is about 6KLoC:
https://github.com/solvespace/solvespace/tree/master/src/srf
My favorite file in there is ratpoly.cpp
It doesn't handle higher order NURBS or use knots. It's just the basics, but there are a lot of geometric algorithms in there. We're still trying to get the bugs out of NURBS booleans, but the high level algorithm is sound.
BTW it can also be compiled for web but that is incomplete.
Been working in 2D with bezier implementation for our in-house CAD kernel. 3D parametric is limited at the moment, though.
(I'm also a bit sad that this is a web app, but, alas, such is progress.)
That said, also as a teacher and a parent, I worry that Chromebooks are making kids have no idea about the world of non-web-apps. (And file systems, etc. etc.)
I watch my kid create a poster: find an image online, copy & paste into an automatic background remover, c&p into an image editing program to remove the watermark, c&p into Canva for assembling with text etc.
Meanwhile I show her that I can do the whole thing on Pixelmator Pro (or Affinity or Photoshop) and she looks at me like I have three heads.
It doesn't train them how to use real computers, but that's not on the state standards so they don't care.
The reasons schools ate them up os because they're cheap and were the most readily available laptops during a shortage. I really doubt much else was on anyone's mind.
Arguably, it really should be.
BUT the more relevant and valuable point you made was about constraints and sketches.
And, related to this, true parametric design, which IMO is vital for a CAD package to be taken seriously.
UPDATE: On my newer laptop thius is faster than my native apps. And I was literally drawing shapes within 30 seconds of clicking on the link to this app. Compare that to the nightmare of all the other tools out there with registrations, email clutter, 2FA, and on and on. Oh, and cost in most cases!
UPDATE 2: I have no connection to this team other than having just seen a post online about this tool. I've been navigating the world of SketchUp/AutoCad/Revit recently so this of course is totally thrilling. Especially for what it means for the future.
For most current pro CAD, certainly there are a lot of calls to Win32 libraries on Windows, but those aren't fundamentally needed by a CAD system. There was professional 3D CAD before Windows.
I don't know what native hardware would be needed that isn't already accessible through current Chrome?
There certainly are optimisations that aren’t possible in web browsers today. Arbitrary wasm memory constraints and difficulties around cpu multithreading or simd for example. But CUDA kernels aren’t a realistic option for most cad software.
Looks like some work needs to be done to get this into familiar CAD terms with the English translation.
Difficult to use right now, it just switched into the Chinese translation when trying to make a cube and there doesn't appear to be an easy way to change that.
Hope to see more projects like this one in the near future !
Anyone knows what is the status of Truck [1] in this regard. Are they going to implement an open-source CAD program with their CAD-kernel? That also looks like a promising project.
[1] https://github.com/ricosjp/truck
There's also the Fornjot kernel. https://github.com/hannobraun/Fornjot
Context: I was the main contributor/maintainer of cadmium
No idea where truck is going, it'll take me quite some time to tinker with CAD I think, it left me quite a bitter taste...
Fornjot seems to be doing good, I'm donating to them and I get regular updates (you should too!). Still, there's a long, long road ahead
If I were to do this all over again I'd either go the OCCT route (like chili3d or zoo) or solvespace. they're both "lacking" kernels if you compare them to the commercial ones, but I think there's enough "market gap" for makers that would prefer a sustainable CAD format instead of perfect fillets (and IMO freecad is not the solution).
Keep in mind though that my efforts where laser focused on non-math stuff. From what I gathered from my time in cadmium, b-rep kernels are hard in an unsustainable level. Browser level unsustainable. I just hope that out of seer necessity we'll find another way to solve the CAD problem, instead of a b-rep kernel
What do you dislike about FreeCAD's interface?
I was just thinking about how TinkerCad has block coding.
however with opencascade working in webassembly here, perhaps also cadquery and/or build123d can do something like that
https://www.cadsketcher.com/
Or maybe NASA's Vehicle Sketch Pad?
https://software.nasa.gov/software/LAR-17491-1
I think of these CAD programs as being very old-school native programs that either are a loosely collected group of tools that allow you to manipulate files and pass them around (so, like, a bunch of Linux native programs that spit out files and ingest them, and you go around in the terminal to make sure everything is in the right spot), or a nice GUI around a bunch of those types of tools (it is definitely very possible that I’ve been influenced by only seeing these tools via engineering grad school where everything is open source, the gui’s don’t count, Linux command line is assumed, and 90’s tools are the baseline).
With a web-based system, what do you do? Like, for example if the user wants to pass models to some finite element simulation tool, do they just repeatedly download/simulate/go back to the website/edit/download/simulate, or something like that?
Is there a nice way for browser based apps to pipe to each other?
In the 60s, 70s, and 80s it was more true, but nowadays Catia, NX, Creo, and the other big CAD systems are monolithic applications with extensions and add-ons (either from the vendor directly, sold as third party add-ons, or developed in house with CAA/NXOpen/ProToolkit) for doing stuff like composite design, sheet metal, various types of analysis, and a million other things.
Under the hood they're very modular with hundreds (or thousands) of shared library modules, and sometimes those modules have long histories going back to the 70s, but the UI of the 70s is long gone, and they're used like normal shared libraries, not piping around data on the shell.
Not that it doesn't happen - I'm sure some companies have old tools they haven't updated in decades - but the day to day CAD work is all GUI based.
That's my impression working at a company doing CAD translation, anyway.
In a lot of large deployments, the CAD data isn't even stored in files, but in a PLM database. For example PTC's WindChill and Dassault's Enovia/3DX.
Making CAD more accessible seems like a massive win, in the sense that it is really hard to get hands on experience making things nowadays—hobbyist methods and professional ones have diverged quite far! Easy web-based tool that bridge that gap without playing around in the shell could be really useful.
The main CAD program is often the center of use, and any specialty functionality is a add-in to the main cad program (FEA, CAM, etc).
If the specialty software is stand-alone, it still needs a CAD Kernel to be able to work with the BREP, and there are essentially only 2 main commercial kernels (Parasolid and ASICs).
No comments yet
” very old-school native programs that either are a loosely collected group of tools that allow you to manipulate files and pass them around”
Opencascade is a C++ library and manages it’s state in single process. Examples: https://dev.opencascade.org/doc/overview/html/samples.html
Bentley and Autodesk have a Frankenstein version of this because they can’t disrupt their revenue stream for CAD software that stopped improving 20 years ago. iTwin (yes, the branding is that bad) is an attempt to link cloud to local-file-based work. ProjectWise was a first stab at that, which is worse than plain network storage in every way except that CAD managers don’t have to be responsible for configuration scripts.
No comments yet
> Products with extensive/rich UIs lots of sliders, switches, menus, with no scripting support, and built on opaque, custom, binary formats are ngmi in the era of heavy human+AI collaboration.
If an LLM can't read the underlying representations and manipulate them and all of the related settings via scripting, then it also can't co-pilot your product with existing professionals and it doesn't allow vibe coding for the 100X more aspiring prosumers.
Example high risk (binary objects/artifacts, no text DSL): every Adobe product, DAWs, CAD/3D Example medium-high risk (already partially text scriptable): Blender, Unity Example medium-low risk (mostly but not entirely text already, some automation/plugins ecosystem): Excel Example low risk (already just all text, lucky!): IDEs like VS Code, Figma, Jupyter, Obsidian, ...
AIs will get better and better at human UIUX (Operator and friends), but I suspect the products that attempt to exclusively wait for this future without trying to meet the technology halfway where it is today are not going to have a good time.
https://x.com/karpathy/status/1930354382106964079?s=61
English (or other human) language is pretty bad at describing 3D geometry. People have been using drawings and physical 3D models to describe designs going way back into antiquity. The idea you can just use text suitable for a current-design LLM to manipulate 3D technical data really seems like an idea from someone who has never tried.
But also, Solidworks and Inventor (and I think NX) have extensive API coverage that would allow an LLM to manipulate the geometry data, if the LLM could figure out what the data meant, and what it wants to do. If you can do it on screen with a mouse and keyboard, you can likely do it over the API. An add-in could certainly be written to accept requests for information and instructions on api calls to make from an LLM.
I see that it uses some type of WebAssembly technology and some CAD/CAM API that gets translated over. I also see they integrated with Three.js,
but what I would like to know is how much of the whole "thing" are they responsible for?
Are they responsible for all that code that draws the viewport and lets the user pan around? Are they responsible for that Microsoft Office ribbon UI? Are they responsible for the internationalization? What parts did they do? When I look at this, it's so sophisticated it just makes me feel think about the widening divide as far as AI skill gap goes. Was AI used?
Now they don't owe me that, of course, and that's nothing on them, kudos to them! It's a brilliant project.
Well, that's the beauty of open source. Go read it.
https://github.com/xiangechen/chili3d/blob/43161b9f51021f2ef...
>When I look at this, it's so sophisticated it just makes me feel think about the widening divide as far as AI skill gap goes. Was AI used?
I feel like this was the "So tell me about your father.." turn here , did you really care about the details or did you want to wax poetic about AI?
On the Widening AI Skill Gap No, sophisticated software doesn't automatically mean AI was used. Your immediate jump to an "AI skill gap" just because something looks well-made says more about your assumptions than about the software itself. Perhaps the real "skill gap" is in telling the difference between good engineering and AI magic.
Was going down the rabbit hole with TypeScript, React, and three.js.