Universal version control and rich text on Automerge

Hello all,

We’ve had a busy spring at Ink & Switch, including a lab summit in Denver and a hack week where some new projects sprung up. In this dispatch we have some updates on our ongoing work on version control, notes on an exciting new release of Automerge, and news from our researchers-in-residence.

If you’re in the neighborhood of Berlin at the end of May, several lab members will be participating in the Local-First Conference. Tickets are sadly sold out, but if you’d like to connect when we’re in town, drop us a line!

Patchwork: universal version control

In our last Dispatch in Febuary, we introduced Patchwork: a research project by Geoffrey Litt, Paul Sonnentag, Max Schoening, Adam Wiggins, Peter van Hardenberg, and Orion Henry exploring universal version control. Our goal was to design conceptual primitives for version control that were simple enough for all computer users; powerful enough to handle a variety of sophisticated workflows like branching changes and editing history; and could span a wide variety of types of media and collaboration workflows.

We started by exploring a variety of versioning concepts for helping small teams of writers collaborate better. The lab notebook for the project logs some of those experiments:

An interface showing edits on text being grouped and commented on.
The Edit Groups prototype from Patchwork lets users group related edits and comment on them together.

All of these ideas were prototyped in Tiny Essay Editor—the Automerge-based Markdown editor we use at the lab—and used to write our lab notebook posts. We’ve found that even simple versions of branching, edit groups, and history timelines were quite powerful in that context. But we also discovered tricky challenges we’re still working on, including some new ways of representing changes in Automerge to make it easier to cherry-pick edits across branches.

We’ve also lightly explored two more areas beyond: AI bots that make suggestions on branches, and first steps towards version control on other media types like drawings and spreadsheets. More work is needed to flesh these out, but they feel like promising directions.

We’d love to hear feedback via email on this work! We’re especially interested in hearing from you if you need a better collaborative versioned text editor for writing blog posts or papers, or you might want to add better versioning to an existing application you’ve already built.

Rich text in Automerge

Automerge, the CRDT-based collaboration library developed by Ink & Switch, now has official support for rich text and a fully supported Prosemirror binding!

For those who’ve been following along: our Peritext essay from 2021 described a model for representing text with inline annotations like bold, italic, or underline. But that work didn’t address a critical part of rich text: block elements like paragraphs and bulleted lists, where any span of text can only belong to one block at a time. Martin Kleppmann then proposed some extensions to Peritext to handle these cases.

Since then, the Automerge team, particularly maintainer Alex Good, have been hard at work implementing all of these ideas in Automerge. We’re thrilled to announce that the results are now available: the new version of Automerge includes a native and portable representation for rich text with inline marks and blocks, and a reference binding for the ProseMirror rich text editor library for the web. There is also work underway on iOS bindings.

This work has been supported by our corporate sponsors, particularly including our partners at GoodNotes. Thanks also to Marijn Haverbeke for his input on the project.

If you’d like to learn more about the theory behind this, Alex will be speaking at Local-First Conf and we’ll plan to write up a more detailed account in the future.

For more details on this work, check out the post on the Automerge blog!

Researching-in-Residence

Researcher-in-residence Alexander Obenauer is working on Heron: an applied research project investigating concepts in personal health informatics for individuals with chronic conditions.

Researcher-in-residence Lu Wilson has concluded a collaboration with Dave Ackley, introducing and exploring the concept of natural code, and has also been researching autocomplete for canvas, building on some work from Patchwork.

Mary Rose Cook has finished her residency and taken a job with Void, a slightly mysterious new game engine company started by GitHub founder Chris Wanstrath. We’re all looking forward to seeing what they come out with.

Till next time!