Collaborative Editing in Wordgard
Eleven years ago, I wrote Collaborative Editing in ProseMirror, my first stab at doing collaboration in a rich text editor. Then six years ago I wrote Collaborative Editing in CodeMirror, describing a...
View ArticleWordgard Release 0.1
I am happy to announce that my latest project, which I've been talking about for years, is now out with a first release. The project is called Wordgard. It is a new iteration of a ProseMirror-style...
View ArticleTypeScript's unknown type and type variance
Type systems have a tendency of sneaking up on you. You start just trying to enforce some obvious invariants like “I shouldn't be able to assign a string value to a Boolean-typed variable”, and before...
View ArticleAddressing Editor Content
Every text editor system, whether it works with plain or rich text, needs some way to refer to specific positions in the document. The very first reason one runs into this, when implementing such a...
View ArticleReference Semantics and Value Semantics
The concept of an object, record, structure, or product type occurs in almost every programming language. Being able to declare a type of value that groups a number of other values together is a...
View ArticleCodeMirror 6.0
CodeMirror 6 is a new code editor library for the web, a from-scratch implementation based on the experience of building and maintaining versions 1 to 5 for the past 13 years. It aims to be more...
View ArticleFacets as Composable Extension Points
An extensible system, at its base, is a system that allows people to add additional functionality that was not anticipated by the core system. A good extensible system also makes sure multiple...
View ArticleCodeMirror 6 Enters Beta
I'm happy to announce that with version 0.8.0 the CodeMirror 6 project is entering its beta phase, and you're very much invited to start trying it out and poking at it. Roughly, this “beta” status...
View ArticleCollaborative Editing in CodeMirror
This post describes the considerations that came up in designing the document-change data structure and built-in collaborative editing feature in the upcoming version of CodeMirror (a code editor...
View ArticleCodeMirror MOSS project report
Development of CodeMirror 6 this year has been generously supported by Mozilla through their MOSS program. The MOSS program asks for a closing retrospective blog post describing the progress made...
View ArticleLezer
I keep coming across people who consider parser technology a forbidding, scary field of programming. This is nonsense—a small parser can be very, very simple, and provide a wholesome exercise in...
View ArticleCodeMirror 6 Status Update
It has been almost a year since we officially announced the CodeMirror 6 project, which aims to rewrite CodeMirror (a code editor for in the browser) to align its design with the technological...
View ArticleComputing Indentation from Syntax Trees
Most code editors have some concept of automatic indentation. For each language, they have some logic that can compute an appropriate indentation for a given line. They may immediately indent when you...
View ArticleExtensible Extension Mechanisms
(The details at the bottom of this post no longer reflect the way things work in CodeMirror 6. See this post for an updated description.) It has become fashionable to structure big systems as a number...
View ArticleProseMirror 1.0
Two years ago, I started the ProseMirror project because I wanted to take a stab at a better approach to WYSIWYG-style editing. Today, I'm releasing version 1.0 of the library. The architecture and...
View ArticleMy JavaScript Build Setup
I am looking forward to the time where my node.js and browser can natively run ECMAScript 6 code. Build steps are a pain, and one of the reasons I like JavaScript in the first place is the...
View ArticleBeing a Resident at the Recurse Center
I spent one week being a resident at the Recurse Center in New York this November. The Recurse Center is a somewhat unusual institution. They call themselves a “programmers retreat”. That more or less...
View ArticleCollaborative Editing in ProseMirror
This post describes the algorithm used to make collaborative editing work in ProseMirror. For an introduction to ProseMirror, see another post here. The Problem A real-time collaborative editing system...
View ArticleProseMirror
Sometimes I lie awake at night, feverishly searching for new ways to load myself down with more poorly-paying responsibilities. And then it comes to me: I should start another open-source project!...
View ArticleMore Money For Better Open-Source Software
As a programmer I create artifacts that, unlike classical commodities such as loaves of bread or toothbrushes, can be copied at zero cost. Fitting copyable things into the capitalist market economy is...
View Article