21 Jun 2019

Collaborative Editor in Rust

I've been experimenting with techniques for collaborative editing in Rust recently and I'd like to share my first functional prototype with you.

You'll probably want to make the video full screen to see it in action. There is no audio.

Download

Note

  • It has only been tested in Firefox and Chrome.
  • The document is temporary and will be lost when the server is stopped.

Implementation

The demo uses Rust and WebAssembly, and I implemented it using a conflict-free replicated data type (CRDT) based on LOGOOT, which I modified to work with variable-sized strings rather than individual characters or lines. I will explore the implementation and my reasons for this choice in a future blog post (you can subscribe via rss if that's of interest), but for now, I'm just happy to mark this small milestone.

Next steps

I plan to develop the code further and have been particularly interested in designing a wiki around collaborative editing.

It turns out designing a collaborative tool is not as simple as slapping a multi-user textarea on an existing product. It has implications for the user interface, workflows, data storage - it affects the whole project.

This fledgling project is called TamaWiki, after our cat Tama.

If you'd like to chat about it's development or just follow along, please join the mailing list.