  A collaboration framework is a distributed system that serves as the data
layer for a collaborative app. Conflict-free Replicated Data Types (CRDTs) are
a promising theoretical technique for implementing collaboration frameworks.
However, existing frameworks are inflexible: they are often one-off
implementations of research papers or only permit a restricted set of CRDT
semantics, and they do not allow app-specific optimizations. Until now, there
was no general framework that lets programmers mix, match, and modify CRDTs.
  We solve this with Collabs, a CRDT-based collaboration framework that lets
programmers implement their own CRDTs, either from-scratch or by composing
existing building blocks. Collabs prioritizes both semantic flexibility and
performance flexibility: it allows arbitrary app-specific CRDT behaviors and
optimizations, while still providing strong eventual consistency. We
demonstrate Collabs's capabilities and programming model with example apps and
CRDT implementations. We then show that a collaborative rich-text editor using
Collabs's built-in CRDTs can scale to over 100 simultaneous users, unlike
existing CRDT frameworks and Google Docs. Collabs also has lower end-to-end
latency and server CPU usage than a popular Operational Transformation
framework, with acceptable CRDT metadata overhead.
