- Cloudflare Worker + Durable Object server (packages/collab/) - One DO per room with WebSocket Hibernation for near-zero idle cost - Yjs sync protocol for document state (CRDT merge) - Yjs awareness protocol for cursors, selection, presence - Persists doc state to DO storage - CORS headers for cross-origin WebSocket upgrade - Client composable (src/composables/use-collab.ts) - Y.Doc ↔ SceneGraph bidirectional binding - Awareness: broadcasts cursor position, selection, name, color - Auto-join from /share/:roomId URL - Suppresses echo loops between Yjs and graph updates - CollabPanel component (src/components/CollabPanel.vue) - Share button generates room link, copies to clipboard - Join flow: paste link or room ID - Avatar stack with colored initials and tooltips - Name input persisted to localStorage - Remote cursor rendering in CanvasKit - Colored arrow cursor + name label pill per remote peer - Remote selection outlines in peer's color - Only shows cursors on the same page - SPA redirect for /share/* routes (Cloudflare Pages _redirects)
19 lines
362 B
JSON
19 lines
362 B
JSON
{
|
|
"name": "@open-pencil/collab",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "wrangler dev",
|
|
"deploy": "wrangler deploy",
|
|
"types": "wrangler types"
|
|
},
|
|
"devDependencies": {
|
|
"@cloudflare/workers-types": "^4.20250214.0",
|
|
"wrangler": "^4"
|
|
},
|
|
"dependencies": {
|
|
"yjs": "^13.6.24",
|
|
"y-protocols": "^1.0.6"
|
|
}
|
|
}
|