Notion reescribe su editor con CRDTs para que dos personas no se pisen el texto
La compañía detalla cómo pasó del modelo de última escritura a un árbol de secuencia RGA y a Peritext para el formato, después de años en los que dos ediciones sobre el mismo bloque podían perderse.

Notion ha contado cómo rediseñó el modelo de datos de su editor para que la edición concurrente no se coma los cambios de nadie. Hasta 2025, la compañía reconoce que el sistema no era colaborativo en el nivel del texto: si dos personas tocaban el mismo bloque, una de las dos ediciones desaparecía. La solución ha sido un CRDT —en concreto, una variante del Replicated Growable Array (RGA)— para el texto, y operaciones basadas en Peritext para las anotaciones de formato.
El punto de partida era un modelo de "gana la última escritura". Cada bloque de una página se guardaba como un registro independiente en base de datos, así que dos personas editando bloques distintos no se molestaban. El problema aparecía al coincidir en el mismo bloque: el servidor procesaba cada actualización según llegaba y la última en entrar determinaba el resultado. Con dos colaboradores la probabilidad de perder texto es baja; con cientos, no. Y el modo offline que preparaban lo empeoraba, porque alguien podía editar sin conexión y volver a sincronizar después de que otros hubieran tocado esos mismos bloques.
Un árbol que nunca olvida
El CRDT que eligieron es un árbol de secuencia. Cada carácter insertado es un nodo con un identificador único y estable: el session ID de quien lo escribió más un reloj de Lamport, un contador lógico que solo avanza. Las operaciones de inserción y borrado no apuntan a posiciones, sino a esos identificadores, que Notion llama origins. Dos inserciones que referencian el mismo origen se ordenan por el reloj lógico más reciente y, en caso de empate, por session ID, de modo que todos los clientes llegan al mismo resultado sin coordinarse con el servidor.
El borrado no elimina el nodo. Lo marca como tombstone, porque puede haber operaciones en vuelo o guardadas offline que dependan de ese ID; quitarlo del árbol dejaría esas operaciones sin punto de anclaje. Para no pagar un identificador por carácter, agrupan caracteres contiguos del mismo session ID y reloj en una sola entrada con su longitud.
Formato sin perder intención
Con el texto resuelto quedaba el formato: negritas, cursivas, menciones de página. Ahí entra Peritext. Las anotaciones se guardan como operaciones con puntos de ancla —justo antes o justo después del límite de un item— y se aplican al recorrer el árbol. El ancla también define si la anotación se extiende: si escribes al final de un texto en negrita, lo nuevo sale en negrita, pero un hipervínculo no se estira solo porque sigas tecleando.
Que todo esto sea determinista no significa que respete la intención de cada persona. Si alguien quería que el texto quedara exactamente como lo escribió y otro estaba editando lo mismo, el resultado fusionado puede no coincidir con ninguno de los dos. En documentos largos, donde la gente suele tocar zonas alejadas entre sí, el problema casi no aparece; en un bloque corto y disputado, sí. Notion tampoco detalla cuánto crece el árbol con los tombstones acumulados ni cuándo se limpian, que es el coste habitual de este tipo de estructuras y la parte que más pesa cuando la página se edita durante meses.
