Real-time collaboration (Yjs + WebSocket)

- Go WebSocket hub: rooms per document, broadcast updates, persist state
- Yjs integration: connect/disconnect, sync document state
- Collab toggle button in toolbar (Solo/Live)
- When Live: edits broadcast to all connected users in real-time
- Yjs state persisted to SQLite (survives server restart)
- gorilla/websocket dependency added
This commit is contained in:
2026-05-22 23:49:12 +02:00
parent 1a77d068a7
commit ed4d0b261f
6 changed files with 226 additions and 1 deletions
+8 -1
View File
@@ -10,6 +10,7 @@ import (
"markdownhub/internal/api"
"markdownhub/internal/auth"
"markdownhub/internal/collab"
"markdownhub/internal/db"
"markdownhub/internal/files"
)
@@ -33,8 +34,14 @@ func main() {
router := api.NewRouter(database, dataDir, secret)
// Collab WebSocket hub
hub := collab.NewHub(database)
mux := http.NewServeMux()
mux.Handle("/ws/collab/", http.HandlerFunc(hub.HandleWebSocket))
mux.Handle("/", router)
fmt.Printf("MarkdownHub listening on :%s\n", port)
log.Fatal(http.ListenAndServe(":"+port, router))
log.Fatal(http.ListenAndServe(":"+port, mux))
}
func ensureAdminUser(database *db.DB, dataDir string) {