# y-websocket :tophat: > WebSocket Provider for Yjs The Websocket Provider implements a classical client server model. Clients connect to a single endpoint over Websocket. The server distributes awareness information and document updates among clients. This repository contains a simple in-memory backend that can persist to databases, but it can't be scaled easily. The [y-redis](https://github.com/yjs/y-redis/) repository contains an alternative backend that is scalable, provides auth*, and can persist to different backends. The Websocket Provider is a solid choice if you want a central source that handles authentication and authorization. Websockets also send header information and cookies, so you can use existing authentication mechanisms with this server. * Supports cross-tab communication. When you open the same document in the same browser, changes on the document are exchanged via cross-tab communication ([Broadcast Channel](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) and [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) as fallback). * Supports exchange of awareness information (e.g. cursors). ## Quick Start ### Install dependencies ```sh npm i y-websocket ``` ### Start a y-websocket server There are multiple y-websocket compatible backends for `y-websocket`: * [@y/websocket-server](https://github.com/yjs/y-websocket-server/) * hocuspocus - y-sweet - y-redis - ypy-websocket - pycrdt-websocket - [yrs-warp](https://github.com/y-crdt/yrs-warp) - ... The fastest way to get started is to run the [@y/websocket-server](https://github.com/yjs/y-websocket-server/) backend. This package was previously included in y-websocket and now lives in a forkable repository. Install and start y-websocket-server: ```sh npm install @y/y-websocket-server HOST=localhost PORT=1234 npx y-websocket ``` ### Client Code: ```js import * as Y from 'yjs' import { WebsocketProvider } from 'y-websocket' const doc = new Y.Doc() const wsProvider = new WebsocketProvider('ws://localhost:1234', 'my-roomname', doc) wsProvider.on('status', event => { console.log(event.status) // logs "connected" or "disconnected" }) ``` #### Client Code in Node.js The WebSocket provider requires a [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) object to create connection to a server. You can polyfill WebSocket support in Node.js using the [`ws` package](https://www.npmjs.com/package/ws). ```js const wsProvider = new WebsocketProvider('ws://localhost:1234', 'my-roomname', doc, { WebSocketPolyfill: require('ws') }) ``` ## API ```js import { WebsocketProvider } from 'y-websocket' ```
wsProvider = new WebsocketProvider(serverUrl: string, room: string, ydoc: Y.Doc [, wsOpts: WsOpts])
wsProvider.wsconnected: boolean
wsProvider.wsconnecting: boolean
wsProvider.shouldConnect: boolean
wsProvider.bcconnected: boolean
wsProvider.synced: boolean
wsProvider.params : boolean
wsProvider.disconnect()
wsProvider.connect()
wsProvider.destroy()
wsProvider.on('sync', function(isSynced: boolean))
wsProvider.on('status', function({ status: 'disconnected' | 'connecting' | 'connected' }))
wsProvider.on('connection-close', function(WSClosedEvent))
wsProvider.on('connection-error', function(WSErrorEvent))