<story><title>How Figma&apos;s Multiplayer Technology Works</title><url>https://www.figma.com/blog/how-figmas-multiplayer-technology-works/</url></story><parent_chain><item><author>ggambetta</author><text>Sounds weird to use &amp;quot;multiplayer&amp;quot; when there are no players involved, but users. On the other hand, I guess &amp;quot;multiuser&amp;quot; doesn&amp;#x27;t convey the real-time-ness they want to convey.&lt;p&gt;FWIW, here&amp;#x27;s how it&amp;#x27;s done for actual multiplayer games, especially the ones where latency is critical: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;gabrielgambetta.com&amp;#x2F;client-server-game-architecture.html&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;gabrielgambetta.com&amp;#x2F;client-server-game-architecture....&lt;/a&gt; Arguably, their software is more similar to a turn-based game, and formal correctness of the results is more desirable than &amp;quot;a smooth experience&amp;quot;, as is the case for multiplayer games.</text></item></parent_chain><comment><author>coreyward</author><text>Figma&amp;#x27;s case is more challenging in some ways, too, though. In multiplayer games, like the one described on your website, you rarely have multiple actors independently manipulating the same object, there&amp;#x27;s a moderate tolerance for imperfect resolution of conflicts, and the server can reject messages that are more than a few seconds out of sync with the server state.&lt;p&gt;Figma needs to have very consistent, predictable resolution in order for users to trust it with business-critical documents, and it needs to allow users to operate offline for arbitrarily long periods without throwing their work away when they reconnect. This has to happen across multiple versions of the software, and across documents (e.g. when dependency libraries are republished).</text></comment>
<story><title>How Figma&apos;s Multiplayer Technology Works</title><url>https://www.figma.com/blog/how-figmas-multiplayer-technology-works/</url></story><parent_chain><item><author>ggambetta</author><text>Sounds weird to use &amp;quot;multiplayer&amp;quot; when there are no players involved, but users. On the other hand, I guess &amp;quot;multiuser&amp;quot; doesn&amp;#x27;t convey the real-time-ness they want to convey.&lt;p&gt;FWIW, here&amp;#x27;s how it&amp;#x27;s done for actual multiplayer games, especially the ones where latency is critical: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;gabrielgambetta.com&amp;#x2F;client-server-game-architecture.html&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;gabrielgambetta.com&amp;#x2F;client-server-game-architecture....&lt;/a&gt; Arguably, their software is more similar to a turn-based game, and formal correctness of the results is more desirable than &amp;quot;a smooth experience&amp;quot;, as is the case for multiplayer games.</text></item></parent_chain><comment><author>melvinroest</author><text>Note: there&amp;#x27;s no client-server architecture needed with things such as Figma since it can be done P2P. I&amp;#x27;m just past the beginning stages of it. You can use a mix of WebRTC&amp;#x2F;WebTorrent&amp;#x27;s infrastructure to get a serverless (i.e. use WebTorrent&amp;#x27;s signaling services) for P2P. A library called Bugout [1] implemented it this way.&lt;p&gt;If you want to see an example of how it works, check out my side project Doodledocs. I modified the Bugout library a bit for performance improvements, but my project is using its concept on how to spin up a serverless (i.e. not your servers but those of WebTorrent) P2P web app [2].&lt;p&gt;[1] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;chr15m&amp;#x2F;bugout&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;chr15m&amp;#x2F;bugout&lt;/a&gt;&lt;p&gt;[2] Doodledocs is a collaborative doodling web app that I created as a sideproject, so it is just a bit related to Figma. I didn&amp;#x27;t make CRDTs yet, since I want a simple doodle environment for pencil&amp;#x2F;eraser (+ simple web annotation&amp;#x2F;image annotation).&lt;p&gt;Link: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;doodledocs.com&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;doodledocs.com&lt;/a&gt; (browsers tested: Chrome&amp;#x2F;laptop, Chrome&amp;#x2F;iPad, Safari&amp;#x2F;iPad).</text></comment>