Livelymerge es un proyecto experimental del Ink & Switch en el que Alex Warth, Dan Ingalls y Peter Van Hardenberg exploran las posibilidades de usar un documento de Automerge como memoria (heap) de un programa. La idea combina dos propiedades: la persistencia —el estado del programa se conserva tal cual entre sesiones, al estilo de una imagen de Smalltalk— y la colaboración multiusuario, ya que todos los participantes comparten la misma memoria y ven los cambios del resto en tiempo real. Entre los retos abiertos están la consistencia (qué proceso ejecuta qué en presencia de varios usuarios y cómo preservar invariantes tras las fusiones automáticas), el rendimiento y el soporte de programas de larga duración, cuyo documento Automerge acumula un número muy elevado de cambios.
El artículo describe el modelo de objetos implementado en el proyecto. Los programas se escriben en JavaScript convencional —literales, closures, clases— pero sus objetos viven en el documento Automerge en lugar de en el heap del intérprete. Para ello se utiliza una tabla de objetos serializados, con identificadores UUID, que distingue propiedades especiales (prefijadas con $) de propiedades de usuario (con @). Las funciones son objetos de primera clase que guardan referencias a objetos de ámbito donde residen sus variables libres, lo que hace que el estado de los closures también sea persistente y compartido. Los arrays tienen su propia entrada en la tabla, lo que les permite aprovechar la semántica de fusión de arrays de Automerge: ediciones concurrentes como un push y un splice conviven tras la fusión. Un transpiler reescribe el JavaScript del usuario para invocar estas primitivas de forma transparente, de modo que programar resulte indistinguible de hacerlo en JS estándar, pero con colaboración y persistencia integradas.
