Microsoft open-sourced Fluid Framework, a low-level platform for distributed, real-time collaborative web applications that possibly scale to a large number of simultaneous collaborators. Microsoft leverages the Fluid Framework in Microsoft 365.
Fluid Framework describes itself as a collection of client libraries for distributing and synchronizing shared state. Fluid clients use a distributed version of data structures (e.g., SharedMap, SharedMatrix, SharedString) commonly used in a non-collaborative application. Developers do not need to write server code to communicate and synchronize changes to the distributed data structure. The Fluid service strives to relay all changes to connected clients with low latency.
The Fluid service adopts an atomic broadcast strategy in which every operation on the distributed data structure by an origin client is first sequenced and then broadcast to other clients — while the origin client receives an acknowledgment (ACK) response. The service does not store a local copy to which operations are applied — it is not aware of the semantics of the routed operations.
Fluid proposes what it terms optimistic and consensus-based distributed data structures. Optimistic data structures (e.g., SharedMap, SharedSequence, SharedMatrix, and SharedString) locally apply Fluid operations before the Fluid service sequences and broadcasts those operations. They give the best latency profile. Consensus-based data structures (e.g., OrderCollection, RegisterCollection) wait for confirmation from the Fluid service before applying operations — even local ones. They provide additional guarantees about the update behavior of the distributed data structure. Kurt Berglund, co-inventor of Fluid, discussed at length in a blog post how a Fluid service works:
(Source: How a Fluid Framework Service Works)
Microsoft provides several examples of collaborative applications that leverage the Fluid Framework in the framework playground. One example (Brainstorm) lets users collaborate in real-time on a shared sticky note board. Any of the connected users can add its note to the notes already created by other users. Every user eventually sees the same board that aggregates the notes from all users. Another example showcases collaborative text editing with Facebook’s online text editor Draft.js. The examples illustrate the single or simultaneous use of different distributed data structures.
The Fluid Framework is framework-agnostic. Developers can use it in web applications written with (vanilla) JavaScript or UI frameworks (React, Angular, Vue, and more).
Ray Ozzie, former chief software architect at Microsoft and creator of the IBM Notes collaborative software, favorably compared Fluid to the collaboration technology used in Microsoft Sharepoint Workspace:
Fluid Service: so much easier.
Groove was a dapp, built on a transform system designed for distributed consensus. Each transaction on the ledger was signed; distributed trust. Such overkill.
Fluid arch is interesting. I wonder how well it handles “long offline” endpoints.
While Microsoft believes that Fluid Framework is not yet ready to power production-quality solutions, it nonetheless emphasizes that the core technology is mature and stable. Future development efforts will seek to introduce new APIs and features, and to simplify using the framework.
Microsoft first demonstrated Fluid at its Build conference last year as a framework that would allow for real-time collaboration between users of its Office on the web suite. Earlier this year, Microsoft released in preview Fluid components that seek to enhance the web versions of Outlook and Office with collaborative experiences.