# Y-CRDTs
## [y-protocols](https://github.com/yjs/y-protocols)
Documentation repository with some information about the protocols
## [Yjs](https://github.com/yjs/yjs)
https://docs.yjs.dev/
Yjs is a CRDT implementation that exposes its internal data structure as shared types. Shared types are common data types like Map or Array with superpowers: changes are automatically distributed to other peers and merged without merge conflicts.
Yjs is network agnostic (p2p!), supports many existing rich text editors, offline editing, version snapshots, undo/redo and shared cursors. It scales well with an unlimited number of users and is well suited for even large documents.
#### Providers
* [y-webrtc](https://github.com/yjs/y-webrtc)
* Uses the WebRTC technology to sync peers
* [y-websocket](https://github.com/yjs/y-websocket)
* Uses WebSockets to sync peers
## [y-sync](https://github.com/y-crdt/y-sync)
Rust implementation of the yjs sync protocols.
## [Yrs](https://github.com/y-crdt/y-crdt)
Rust implementation of Yjs. This repository also contains a wasm implementation and C headers.
#### Providers
* [yrs-warp](https://github.com/y-crdt/yrs-warp)
* Web socket provider using Rust tokio's warp web server
* I beliebe its a server provider not a client
## [Ypy](https://github.com/y-crdt/ypy)
Python bindings for Yrs. This is the implementation we use in JupyterLab's backend.
#### Providers
* [ypy-websocket](https://github.com/y-crdt/ypy-websocket)
* Uses WebSockets to sync peers
## Experiments that could be useful
https://github.com/hbcarlos/rtc-exp
## Posible tasks
1- Update ypy to use yrs v0.15
2- Error when moving an element from yjs https://github.com/y-crdt/ypy/issues/93
Issue in ypy you should be aware of https://github.com/y-crdt/ypy/pull/104