Skip to content

Realtime collaborative editing for notes and canvases (CRDT) #87

@piwi3910

Description

@piwi3910

Context

Mnemo currently uses last-write-wins for shared notes (and will for shared canvases too). For shared canvas in particular, two users dragging different cards simultaneously can clobber each other's positions on save. Same issue exists for shared .md notes today.

Proposal

Adopt a CRDT-based realtime collaborative editing layer (e.g. Yjs) covering both notes and canvases together. Goals:

  • Simultaneous editing without lost writes
  • Presence indicators (cursors, selections)
  • Offline-tolerant with eventual convergence
  • Single mechanism for notes and canvases — avoid divergence where canvases collaborate better than the notes embedded in them

Why deferred

  • Significant infrastructure investment (WebSocket layer, CRDT runtime server-side, persistence strategy, conflict resolution for concurrent file system writes)
  • Should land for notes and canvases together, not in isolation
  • Canvas v1 will use last-write-wins matching the existing note model — acceptable for self-hosted personal/small-team usage

Related

  • Canvas integration design (forthcoming spec in docs/superpowers/specs/)
  • Plugin ecosystem design (docs/superpowers/specs/2026-03-23-plugin-ecosystem-design.md)

Acceptance criteria (high-level)

  • Shared note editing supports simultaneous edits without data loss
  • Shared canvas editing supports simultaneous edits without data loss
  • Presence indicators visible to all participants
  • Works offline; reconciles on reconnect

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions