AB Or BC

Figma's multiplayer server is authoritative and stores, per object and per property, the last value any client sent. There is no operational transform and no true CRDT: conflicts on one property resolve by whichever change the server processed last. The server rejects a parent change that would create a cycle in the object tree.

Two clients start from a document where text object T holds "A", and objects A and B are both children of the root. Both clients edit while offline from each other for a few milliseconds. The server processes their messages in the order shown.

Client 1 and client 2 changes as the server receives them client 1 server client 2 T.text = "AB" A.parent = B T.text = "BC" B.parent = A 1st 2nd 3rd 4th

What does the document contain once everything settles?

A

T.text is "AB"; both parent changes are rejected, so A and B both stay under the root.

B

T.text is "AB"; B is a child of A and A stays under the root.

C

T.text is "ABC"; B is a child of A and A stays under the root.

D

T.text is "BC"; A is a child of B and B stays under the root.