Document Vim 9.0+ requirement for adapter

This commit is contained in:
Jared Miller 2026-01-27 16:18:48 -05:00
parent 7b81777d9d
commit 2e370afe2c
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C

66
CLAUDE.md Normal file
View file

@ -0,0 +1,66 @@
# collabd - editor-agnostic collaborative editing daemon
daemon + thin adapters architecture. daemon handles yjs crdt, adapters just
hook buffer events and apply remote changes.
## stack
- bun runtime
- yjs for crdt
- websocket transport
- vim9script adapter (with bun bridge since vim cant do websocket)
## running
```bash
just dev # daemon on :4040
bun test # unit tests
just check # biome lint
```
## vim adapter usage
requires Vim 9.0+ (uses vim9script)
```vim
:source adapters/vim/collab.vim
:CollabJoin roomname
:CollabLeave
:CollabStatus
```
the vim plugin spawns adapters/vim/bridge.ts which handles yjs and speaks
json lines to vim via channels.
## protocol
daemon speaks json over websocket at /ws
client -> server:
{ type: "join", room: "name" }
{ type: "leave" }
{ type: "update", data: [...] } // yjs update bytes
server -> client:
{ type: "sync", data: [...] } // full yjs state on join
{ type: "update", data: [...] } // remote changes
{ type: "peers", count: N }
## key files
- src/index.ts - websocket server, room routing
- src/session.ts - yjs doc per room, peer management
- src/protocol.ts - message types
- adapters/vim/bridge.ts - bun process vim spawns
- adapters/vim/collab.vim - vim9script plugin
## adding new editor adapters
each adapter needs:
1. hook buffer change events
2. send changes to daemon as yjs updates (or use a bridge like vim does)
3. receive remote updates and apply to buffer
4. optionally show peer cursors
see NOTES.txt for cell-grid vs text-crdt mode discussion.
see docs/ for full research and architecture breakdown.