Skip to content

y-crdt/ypy-websocket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b53c2b4 · Dec 23, 2023
Feb 6, 2023
Sep 7, 2023
Jun 20, 2023
Oct 4, 2023
Nov 25, 2022
Jun 16, 2023
Oct 4, 2023
Apr 21, 2022
Dec 23, 2023
Nov 25, 2022
Feb 6, 2023
Sep 7, 2023
Sep 7, 2023

Repository files navigation

Ypy-websocket

Ypy-websocket is an async WebSocket connector for Ypy.

Build Status Code style: black


Documentation: https://davidbrochart.github.io/ypy-websocket

Source Code: https://github.com/y-crdt/ypy-websocket


Ypy-websocket is a Python library for building WebSocket servers and clients that connect and synchronize shared documents. It can be used to create collaborative web applications.

The following diagram illustrates a typical architecture. The goal is to share a document among several clients.

Each client has an instance of a YDoc, representing their view of a document. A shared document also lives in a room on the server side. Conceptually, a room can be seen as the place where clients collaborate on a document. The WebSocket to which a client connects points to the corresponding room through the endpoint path. In the example below, clients A and B connect to a WebSocket at path room-1, and thus both clients find themselves in a room called room-1. All the YDoc synchronization logic is taken care of by the WebsocketProvider.

Each update to a shared document can be persisted to disk using a store, which can be a file or a database.

Loading
flowchart TD
    classDef room1 fill:#f96
    classDef room2 fill:#bbf
    A[Client A<br>room-1]:::room1 <-->|WebSocket<br>Provider| server(WebSocket Server)
    B[Client B<br>room-1]:::room1 <-->|WebSocket<br>Provider| server
    C[Client C<br>room-2]:::room2 <-->|WebSocket<br>Provider| server
    D[Client D<br>room-2]:::room2 <-->|WebSocket<br>Provider| server
    server <--> room1((room-1<br>clients: A, B)):::room1
    server <--> room2((room-2<br>clients: C, D)):::room2
    A <-..-> room1
    B <-..-> room1
    C <-..-> room2
    D <-..-> room2
    room1 ---> store1[(Store)]
    room2 ---> store2[(Store)]