• cursor chat
  • stamps
  • stickers
  • drawing - tldraw
  • dancing cursors ^19e9a8
  • ephemeral chat / forum
  • pixel canvas
  • object arrangement
  • fingerprints
  • location on map
  • device info?
  • weather info / day vs. night /



Collaborative software comprises of software that allows people to interact with each other in real-time. Google Wave is one of the earliest (too early for its time) examples of a software system that was collaborative by default. One could create spaces and add widgets with custom functionality that everyone could use collaboratively.

Sample applications include collaborative word documents and productivity software, real-time video and audio, and video games.

Collaboration Algorithms

  • generally rely on eventual consistency because individual users can make changes and be “out of sync” for a while. Eventually all users will converge to the same “baseline”

Frameworks and Algorithms

  • operational transform is the traditional model of enabling collaborative software by using a centralized server to arbitrate and synchronize all actions performed by clients. Clients update in response to what the centralized server tells them to do
    • this can be implemented peer-to-peer but it doesn’t have the same guarantees as CRDTs (which are idempotent and commutative by default)
  • CRDTs are data structures used to facilitate peer-to-peer collaboration through local transmission of update operations which local clients know how to apply to themselves, eliminating the need for a centralized meditation server
    • the main issue with CRDTs is to be resilient and secure to malicious clients because there is no single server to dictate truth in a benevolent way
    • jacky zhao investigated how to do this in Building a BFT JSON CRDT

Databases / Services

  • yjs is an open-source library of shared data-types that facilitates peer-to-peer by default, aiming to bring collaborative
    • has many adapters for different storage solutions, from indexed DB to levelDB to DAT
    • how to persist data in serverless architecture
      • To persist the document nonetheless, we have the browser send snapshots to our API every couple of seconds. When a user opens the document, we try to fetch it via webrtc from another user. If the user is the first opening the document, we go back to our API and load the persisted state from there.

      • and if needed, deploy your own signaling server, although there are public ones available
  • gun is an open-source small protocol for syncing data between
  • Braid
  • instantDB — graph-based firebase
  • https://homebase.io/


  • XMPP is the Extensible Messaging and Presence Protocol, a set of open technologies for instant messaging, presence, multi-party chat, voice and video calls, collaboration, lightweight middleware, content syndication, and generalized routing of XML data.
    • streams XML over a network
  • webRTC supports adding real-time communication capabilities to web applications by supporting the transmission of video, voice, and generic data between peers.