Matthew Weidner

I am a software developer at Common Curriculum. I am also an (absentia) computer science PhD student at Carnegie Mellon University, advised by Heather Miller.

I research building blocks for collaborative and local-first software - in particular, Conflict-free Replicated Data Types (CRDTs).


mweidner037 [at] gmail.com • @MatthewWeidner3@mweidner.bsky.socialLinkedInGitHub

Blog  •  Open-Source Software  •  Apps  •  Research Papers

Open-Source Software

CRDT-inspired libraries for the web.

npm profile

Articulated

github.com/mweidner037/articulated

Articulated is a TypeScript library for managing stable element identifiers in mutable lists, including collaborative text. It is designed for optimized implementations of the technique described in Collaborative Text Editing without CRDTs or OT, which I presented at Local-First Conf 2025.

tiptap-extension-flat-list

github.com/commoncurriculum/tiptap-extension-flat-list

A set of Tiptap extensions that implement lists (ordered, unordered, and task) using a “flat” data model, where each list item is a top-level block with inline content. You can use these to implement a Notion-style editor where the document is stored as a list of blocks with inline content, instead of a general tree.

The flat data model is inspired by Quill and makes it easier to work with list items programmatically, including in collaborative scenarios.

Used by: Common Curriculum

list-positions

github.com/mweidner037/list-positions

list-positions is a TypeScript library that provides efficient “positions” for lists and text. You can use these to make documents rich and collaborative - e.g., storing annotations on collaborative rich text. See my announcement blog post.

@list-positions/formatting is a companion library that lets you add inline formatting to its lists (italics, hyperlinks, etc.).

Research Links

list-positions implements the Fugue list CRDT, while @list-positions/formatting implements Geoffrey Litt et al.’s Peritext rich-text CRDT. However, the libraries are more flexible than traditional CRDTs, making them suitable for server-authoritative collaboration as well as local-first apps.

position-strings

github.com/mweidner037/position-strings

position-strings is a TypeScript library that provides “position strings” for use in collaborative lists or text strings. Each position string points to a specific list element (or text character), and the list order is given by the lexicographic order on position strings.

Used by: Miro, Notion

position-strings and list-positions serve similar purposes. position-strings has a minimalist API designed for maximum compatibility with existing systems. list-positions is more comprehensive and uses less memory & storage, especially when used for text editing.

Research Links

position-strings essentially implements the Fugue list CRDT with a minimalist API. See this blog post for further background.

Collabs

collabs.readthedocs.io

Collabs is a TypeScript collections library for collaborative data structures (CRDTs). It puts into practice many of the ideas from my first blog post, Designing Data Structures for Collaborative Apps.

Research Links

For a research-oriented description of Collabs, see our paper preprint. The paper also has benchmark results showing that a Collabs rich-text editor can scale to over 100 simultaneous users, and its memory usage and load/save times are comparable to Yjs.