https://www.figma.com/blog/rust-in-production-at-figma/
https://www.figma.com/blog/multiplayer-editing-in-figma/
https://www.figma.com/blog/realtime-editing-of-ordered-seque...
https://www.figma.com/blog/webassembly-cut-figmas-load-time-...
https://www.figma.com/blog/rust-in-production-at-figma/
https://www.figma.com/blog/multiplayer-editing-in-figma/
https://www.figma.com/blog/realtime-editing-of-ordered-seque...
https://www.figma.com/blog/webassembly-cut-figmas-load-time-...
If you're interested in more technical articles related to the topic, I think you'll enjoy those two:
- https://liveblocks.io/blog/how-to-animate-multiplayer-cursor...
- https://liveblocks.io/blog/how-to-build-undo-redo-in-a-multi...
Let's get some details on what mattered here.
How does webassembly <> backend communication work? I imagine it's somehow websockets. How do you proxy websocket connections to the appropriate backend? How does the C++ <> rust communication work? Protobuf perhaps?
I don't think there's much public info about this, besides what you can infer from looking at what goes over the wire (zstd-encoded binary messages). But to your question about routing wss connections to the appropriate backend, we've been working on a proxy/DNS server that does just that (by giving each backend its own ephemeral hostname). We've talked to some Figma engineers and at least on a conceptual level they do something similar (although their routing is path-based rather than DNS-based).
Our source is here if you're interested: https://github.com/drifting-in-space/spawner