About

The story behind DocNode and DocSync, credits, and acknowledgements.

About Me

Hi, I'm German Jablonski, an Argentinian currently based in the UK and working on Payload development at Figma.

I began working on DocNode in January 2024, but my fascination with CRDTs and OT started back in 2021, when I was building my note editor Fluski.

In Fluski, not only the text editor but also other data structures, like the document tree, are CRDTs. Along the way, I faced countless challenges. That experience pushed me to dive deep into the world of rich-text editors and collaborative data structures. I set up alerts on Google Scholar, Hacker News, and Reddit, and spent years reading every paper and implementation I could find.

Had I known how much time and effort it would take to build DocNode, I probably wouldn't have been foolish enough to start it. But looking back, I'm glad I did. The world might have missed out on something truly beautiful. What kept me going was the conviction that there had to be a simpler way to work with conflict resolution in documents. That way is now real, and I hope it helps you too.

Credits & Acknowledgements

Many thanks to:

  • The Lexical team, especially Dominic Gannaway, Acy Watson, Gerard Rovira, Maksim Horbachevsky, and Bob Ippolito, for the opportunity to collaborate closely and for the insightful discussions on Lexical's design. Special thanks to Bob, whose design of the new Lexical State API and the idea of Lexical Extensions strongly shaped DocNode's approach to state management and gave it its composable nature.
  • The Yjs team, Kevin Jahns and Bartosz Spytkowski, for their inspiring work and for sharing so many valuable resources through forums, blogs, and talks.
  • The Loro team, Zixuan Chen and Leon Zhao, for the friendly and insightful conversations about CRDTs and for pushing the boundaries of what's possible with them.
  • The research community advancing conflict resolution strategies for collaborative editing. Special thanks to Martin Kleppmann and Joseph Gentle for their impactful contributions.
  • State management libraries: Jotai, Zustand, and Pinia, which inspired the way to customize getters and setters in DocNode.
  • To my beautiful wife Normi, for supporting me unconditionally in this and all my projects.