In literature, there are two main types of CRDTs commonly described — state-based and op-based. However, there isn't a lot of resources for how to choose between the two. I have collected and digested the relevant resources, and here is my summary.

Bandwidth requirements

It used to be that state-based CRDTs are considered less practical because of the need to synchronize the full state across the network every time. But with Delta State Replicated Data Types, a large part of the bandwidth and storage requirements can be optimized away, especially if you only need eventual consistency and not causal consistency. Some studies have even shown that delta-CRDTs can outperform op-based CRDTs in terms of metadata size.

Message delivery requirements

One of the key differences in requirements is in the message delivery requirements — state-based CRDTs only require eventual delivery, while op-based CRDTs require reliable causal broadcast. Eventual delivery means that messages only need to be eventually delivered, and they can be delivered arbitrarily out-of-order, and duplicate messages are tolerated. Reliable causal broadcasts, on the other hand, require messages to be eventually delivered with an ordering that is consistent with causality. That is, if A happens before B, then msg(A) needs to be delivered before msg(B).

Reliable causal broadcasts are typically implemented in one of two ways:

  1. Tagging each message with a vector clock and using a middleware to compare the clock value with the last delivered message to ensure that causality is preserved, or otherwise buffer the message.
  2. Creating and maintaining and tree topology between the nodes, as described in Tree Topologies for Causal Message Delivery, and use a reliable network connection to communicate between each node. Notably, if you have a central server coordinating the modifications, you effectively have a two-layer tree that gives you this guarantee. (This doesn't mean the clients always have to be online, it just means the clients must go through the server to communicate with each other).

In conclusion, If your nodes can be arranged into a fixed tree topology, then op-based CRDTs are often the better choice. If not, the added overhead of buffering out-of-order messages in an op-based CRDTs can often mean that state-based CRDTs are the better choice.