I have been working for a while on this library to do CAD in the browser.
The main inspiration were CadQuery and cascade studio. These are two great projects, but my needs were different.
Originally I wanted to create a browser based generator for token trays. I prefer not to have any code running on a server (so I don’t need to pay or operate them). So CadQuery was out of the picture. It needed to be in javascript.
I really liked what Cascade Studio was doing - but I wanted to create my own UI for configuring boxes - and the studio is only an integrated environment - there was no library to just make the models.
I'm looking for CAD libraries for our project at bldrs.ai and have been considering replicad.
Could you describe the relationship with OpenCascade/OCJS.org and also the other projects using it. Replicad is listed on their README as one of 4 design tools using it. CascadeStudio and your project seem to be similarly targeting general use scripting. Are you in touch, with any thoughts on how to collaborate?
I'm also curious How do you see the health of OpenCascade. The last commit 8 mo ago and their issues look like it's getting difficult to build. But I understand it's also a singularly valuable open-source CAD kernel.
We are a loose group of people who interact a little bit!
The person maintaining OCJS works on in bursts - it depends on the time he has. He is doing a great job at it!
The difference between replicad and Cascade Studio is that replicad is a library first - that you can include in your specific project. As a proof of concept I built a development environment while Cascade Studio is meant as a development environment first. Different aims with different tradeoffs.
People around code cad have been interacting a bit in the CadHub discord - but it is a bit quieter lately!
The UI is gorgeous and buttery smooth on my Windows machine. Very impressive.
In the docs, the example pages have a nice 'configuration' dropdown. Again, this is very nice and I can see a bunch of 3D printing websites adopting this as a library. I mean, how many times have you seen a model that just needs a slight tweak to be perfect, but there is just too much friction (download, unpack, load, modify, resave, reupload).
On another note, I wonder if I can train a small LLM to the docs. Once trained, I would be able to have a conversation to create some really cool geometry. Hmmm...
This is fantastic, thank you for your work! I'm excited to see this project combine a clean API in a popular language, with a fast online playground that requires no installation. Having played with OpenSCAD and CadQuery in the past, this feels like a big step forward.
Some suggestions (I'm sure you've already thought of most of these):
- It would be great to have notebook-like UI to isolate steps and allow faster partial rebuilds.
- live editing is great, but it'd be nice to automatically stop in-progress rebuild if another edit is made while it's computing. Right now it seems to always let a rebuild complete even if it's already out-of-date.
- Search on API/docs page would be really handy
- Face/vertex filtering API looks cleaner than CadQuery's, and I'm excited to try it out. In a lot of cases I would still really like to just be able to click on the model and get a reference in code. Even if it's just an index that would break if topology has changed. Auto-generating stable references/filters would be even better, when possible.
Are you by any chance part of the custom ergonomic keyboard community? I can see this being incredibly useful in replacing a bunch of existing work to programatically generate parameterised custom 3d-printable keyboard cases, currently done in Clojure/OpenSCAD/Blenderpy etc.. Currently the REPL workflow and toolchain for most such designs is way too long, and I can really see that use case driving adoption of your library.
How hard would it be to make your workbench pull and render code from GitHub repositories, so that for example, authors can link to a render of the codebase in their readme?
This is really great work btw. A pleasure to tinker with. Following closely.
> How hard would it be to make your workbench pull and render code from GitHub repositories, so that for example, authors can link to a render of the codebase in their readme?
That was my thread yesterday. While I have reservations about OpenCascade for "industry" scale and capable CAD, having OpenCascade in the browser is f-ing awesome! This project looks incredible, and I'm am going to have to a play with it. Thanks @sgenoud!
After spending 5 minutes with Replicad, I canceled my subscription to Fusion360. Thank you @sgenoud!
Context: I have design and shipped physical products (injection mold plastic), but have found the parametric support in Fusion to be almost unusable, as it's tied to the order of operations. For a recent laser cutting project, I did the CAD in HTML—using JS to lay out SVG elements based on input fields for all the parameters.
Given the above, Replicad is a 100% fit for my philosophy and needs:
• Code-driven, so I can completely control how things are parameterized (and use arbitrary expressions)
• Text-based, so I can work in a Git repo
• Open source & web based, so I don't worry that I'll lose the ability to view or edit old files in the future
• Well-funded core (OpenCascade), so I have reasonable hope that it will continue to receive updates
• Human-friendly documentation, so I can find what I need quickly
afaik, FreeCAD is not code-driven or text-based. In the few minutes I played with it, it seems like a massive app which is sluggish on fast computers, and stores its data in an opaque binary format. So it's not really in the same category.
I've played around with both three.js and babylon.js, in attempts to make a CAD system. Where I get in over my head is moving objects relative to each other. For example, I need cube A's top right front corner to be 10mm left of the midpoint of cube B's rear face, left edge. Fusion360 can select any of these edges, vertices, etc, and gives you the controls and necessary visual feedback, with distance, angles and alignments.
Trying to implement even the simplest version of this has been a project killer.
I'm not talking about the user writing code to move an object. I'm talking about the user clicking features on 3D objects with their mouse (like a specific vertex), having those features become highlighted, drawing the visual cues that let the user know that they are in "Move" mode, showing distances and angles to give the user the necessary feedback, clipping to features like midpoints, etc.
Really, the piece that drove me to eventually give up was getting a vertex or edge to be selected, rather than the whole object. Its not difficult to calculate for simple shapes, but what is really needed is a general solution, that doesn't depend on shapes being regular polygons.
This looks like a good replacement for most of what I do in fusion360, but one operation I'm not sure about is importing an existing SVG file and using it for sketch geometry, say, to put an embossed logo onto something. In looking through the Replicad docs, the only SVG references I saw were about exporting.
Is this something people have done with Replicad? Perhaps with an additional lib for parsing SVG into a set of 2D curves?
There are two main ways of representing 3D objects, BRep and mesh.
BRep is the equivalent of a vector image. It has the advantage of having the notions of faces and edges within the representation. This is what replicad uses.
Meshes is the equivalent of a raster image. This is how 3D art is usually made. It has some performance advantages. This is what JSCAD uses.
The reason the example took some time to load is that the code needed to get to the page a first time. After this it is snappy everywhere.
I realize that this will probably be down to the configuration of OpenCascade itself, but the STEP file exported from the "Simple vase" example is for ISO 10303-214. This standard has been withdrawn and applications should use ISO 10303-242 instead.
I will have a look if OpenCascade has a more recent API which saves in the up to date standard. How do you check that a file follows the latest standard?
I currently use OpenSCAD for hobby projects. I’m very much a beginner at it, having used it for about 2 weeks, but so far it has been a very shallow learning curve.
In terms of an ecosystem it’s quite good, but the language frustrates me. It is powerful in its own way, but primitive, and I really wish that it just became a library that was used within an established language.
There are alternatives, but nothing that has really attracted me.
Until now. Good work.
Have you considered reaching out to Thingiverse? They have OpenSCAD integration so users can change parameters and download the resulting STL files, but this seems like it’d suit their ecosystem just as much - if not more.
Very cool! Looking forward to finally trying out code-based CAD. I work as a sysadmin in CAD/PDM/PLM roles so while I am very close to the designer work I have not needed to pick up those tools for actual work in a long time.
I especially like the "spinning amorphous blob" result that happens on an error.
I'm very glad to discover this. I'll be evaluating shortly if I could/should integrate it in my procedural design tool Polygonjs ( https://polygonjs.com )
The main inspiration were CadQuery and cascade studio. These are two great projects, but my needs were different.
Originally I wanted to create a browser based generator for token trays. I prefer not to have any code running on a server (so I don’t need to pay or operate them). So CadQuery was out of the picture. It needed to be in javascript.
I really liked what Cascade Studio was doing - but I wanted to create my own UI for configuring boxes - and the studio is only an integrated environment - there was no library to just make the models.
So replicad was born! You can read the docs at https://replicad.xyz/ (and play with the workbench at https://studio.replicad.xyz/workbench)