Skip to main content

Local-First in Production: How We Built Plane's Collaborative Wiki with Yjs

K.3.201 | Day 2 | 10:00 - 10:30 | Speakers: M Palanikannan

Local-First in Production: How We Built Plane's Collaborative Wiki with Yjs
A picture of a devroom at FOSDEM 2024
Open in browser
Get involved in the conversation!Join the chat

Notes

Abstract

Plane is an open source project management tool used by thousands of teams. A year ago, we shipped Wiki — a collaborative documentation system built on Yjs with real-time editing, offline support, and version history.

Yjs is remarkable. Kevin Jahns and the community have built something incredible — real-time sync, conflict resolution, offline editing, all handled elegantly. But integrating a powerful library is just the start. This talk is about what comes after.

I'll cover the production challenges we solved building on top of Yjs, the crux of it would be around:

  1. Server-side edits — making backend mutations (AI, automations, database state sync in case of subdocuments) coexist with live client editing without users feeling out of sync
  2. Scaling the sync layer — infrastructure decisions for thousands of concurrent documents with awareness working as expected.
  3. Large document performance — what breaks when documents get massive, and how we fixed it without breaking our servers, horizontally scaling sticky ws connections.
  4. Version history — snapshots and visual diffs using StateVectors and the StructStore (deep-dive: palanikannan.com/blogs/version-history-and-snapshots-in-yjs) and what works at scale!
  5. Offline-first in practice — making "syncs when you're back" actually reliable, especially say when you open your tab that chrome killed due to inactivity :p
  6. Permissions and reacting to them in realtime, inline comments sync and so much more!

Plane is fully open source with 38k+ stars and a vibrant OSS community. Real problems, real code, no theory slides.

Speakers

M Palanikannan

I'm Palanikannan, leading the Wiki team at Plane. I've spent the past year deep in Yjs internals, figuring out how CRDTs actually behave at scale. Been in the open source world for 4 years — contributed extensively to Rocket.Chat, Gitpod, Formbricks, Apache DevLake, NextAuth.js, and others. I love building quality software and going deep into how things actually work under the hood.


Notice: The placeholder video image is licensed under CC BY-SA 4.0. The original image can be found hereChanges made to the image are: Cropped the image to a new ratio, part of the image was cut off.