If one was to build an OSS Figma, what are the latest libraries and toolkits one would use?
I’d do the multiplayer aspect first, that is the canvas and positions of each user.
Then I’d start adding components to the canvas and tracking those.
And finally I’d add metadata and other features to those components.
I don’t think in theory the base of the project would be that hard. It’s building those features that would be challenging, because there are a lot of small details that are important to designers.
I don’t think you need any libraries beyond whatever for wasm. Go concurrency is simple and straightforward. Could probably be done in a weekend.
I have not done anything with wasm specifically but I have built a real time collaboration tool backend using Go. It took like four days to put together the base functionality and another month to add all the features.
I could be totally wrong in my approach but I hope you figure it out and share it with us! Cheers
Both Go and Rust, and wasm are new to me - so i'm wondering about whether one is superior to the other.
I think figma has a lot of feature, and penpot seems a great replica of it, but I'm not too sure if the SVG + Clojurescript is a great way to build it..
I'm really looking for the core figma feature set to build. 1. Ability to have a canvas with zooms / freedom to create elemnets 2. Components and instances, and tree structured layers 3. Autolayout + CSS options. Frames and Pages
I think with the above 3, there's a viable basic feature set that would get one off the ground.
I did try the figma plugin apis, to extend native figma capabilities - but there's a limit to things you can do with it and it's getting to a point where more investment in the figma plugin seems a bit wasteful
As for the rendering layer, you will use wasm to build your rendering engine that will load in the user's browser
Wasm seems appropriate. Why Go, instead of Rust ?
For most of my needs, Go offers an excellent ratio of developer experience, features, and performance.
I wouldn't say any language is superior or inferior - they all have a valid use case that makes sense. For me personally, I prefer to validate against the ratio I mentioned above.
That being said, Go concurrency is quite simple. It works well and offers great performance.