You are browsing as a guest. Sign up (or log in) to start making projects!

7h 15m 21s logged

The Idea

OpenVDE (need a better name) is on the surface a standard CAD software to design parts and assemblies.

I was frustrated with existing solutions like OnShape because it’s completely cloud-based (you will own nothing and be happy), and only runs in the browser which often lags a lot with WebGL and both of these mean offline use is impossible. However, these together do give the convenience of seamless collaboration.

On the other hand, apps like Fusion360 (and I’m assuming SolidWorks although I’ve never used it) do run locally but run like garbage because they’re from the 20th century (I’m not even kidding) and will crash unless you make a sacrifice to Andrew Anagnost himself. As a side effect of running locally, the collaboration features are lacking and don’t work well with modern workflows.

OpenVDE

My solution is CodeCAD, which is an approach to designing parts using code to call a CAD kernel in order to generate parts. OpenVDE is a generator for build123d Python scripts. You use it just like any other CAD software but it saves to a Git repository (or whatever you want to use) which allows for advanced version control and collaboration (eg. live editing of the same file). Storing designs as text also unlocks true parametric design and can be used to also write generators for parts using the logic flows programming languages provide.

I want this app to be an cross-platform and not look like crap, so I decided to go with a Tauri app with a Svelte front-end. A big feature of OpenVDE is the hybrid RPC CAD kernel, which is just jargon for you can run the heavy CAD operations natively, in WASM, in a cloud server, or on your own self-hosted server. This works because at it’s core OpenVDE just generates Python code and it can either be run through Pyodide in WASM, Py03 for native via Rust, or by calling a server.

Progress

I setup the project with some basic styles, Three.js, and Pyodide. Huge thanks to this project which provides the WASM compiled wheels for build123d (although I’m pretty sure the project is vibe coded). After getting that all setup plus IndexedDB caching of the packages and an async Web Worker to free the main thread, I got a bare-minimum example of a build123d sandbox in the browser.

I’ll try optimizing it, but the WASM version is running extremely slowly right now (15sec+ to generate this simple part).

0
14

Comments 0

No comments yet. Be the first!