title: what libraries or platforms should I use to build web apps that provide real-time, asynchronous data synchronization between clients?
body: <p>This is a less a question with a simple, practical answer and more a question to foster discussion on the real-time data exchange topic.</p>
  
  <p>I'll begin with an example:</p>
  
  <p>Google Wave is, at its core, a real-time asynchronous data synchronization engine. Wave supports (or plans to support) concurrent (real-time) document collaboration, disconnected (offline) document editing, conflict resolution, document history and playback with attribution, and server federation.</p>
  
  <p>A core part of Wave is the Operational Transformation engine: <a href="http://www.waveprotocol.org/whitepapers/operational-transform" rel="nofollow noreferrer">http://www.waveprotocol.org/whitepapers/operational-transform</a></p>
  
  <p>The OT engine manages document state. Changes between clients are merged and each client has a sane and consistent view of the document at all times; the final document is eventually consistent between all connected clients.</p>
  
  <p>My question is: is this system abstract or general enough to be used as a library or generic framework upon which to build web apps that synchronize real-time, asynchronous state in each client?</p>
  
  <p>Is the Wave protocol directly used by any current web applications (besides Google's client)? Would it make sense to directly use it for generic state synchronization in a web app?</p>
  
  <p>What other existing libraries or frameworks would you consider using when building such a web app?</p>
  
  <p>How much code in such an app might be domain-specific logic vs generic state synchronization logic? Or, put another way, how leaky might the state synchronization abstractions be?</p>
  
  <p>Comments and discussion welcomed!</p>