valtio-yjs
Version:
valtio-yjs makes yjs state easy
79 lines (54 loc) • 2.17 kB
Markdown
[](https://github.com/valtiojs/valtio-yjs/actions?query=workflow%3ACI)
[](https://www.npmjs.com/package/valtio-yjs)
[](https://bundlephobia.com/result?p=valtio-yjs)
[](https://discord.gg/MrQdmzd)
valtio-yjs makes yjs state easy
[](https://github.com/pmndrs/valtio) is
a proxy state library for ReactJS and VanillaJS.
[](https://github.com/yjs/yjs) is
an implementation of CRDT algorithm
(which allows to merge client data without server coordination).
valtio-yjs is a two-way binding to bridge them.
## Project status
It started as an experiment, and the experiment is finished.
Now, it's in alpha.
We encourage developers to try it in non-trivial apps, and find bugs.
## Install
```bash
yarn add valtio-yjs valtio yjs
```
## How to use it
```js
import * as Y from 'yjs';
import { proxy } from 'valtio';
import { bind } from 'valtio-yjs';
// create a new Y doc
const ydoc = new Y.Doc();
// create a Y map
const ymap = ydoc.getMap('mymap');
// create a valtio state
const state = proxy({});
// bind them
const unbind = bind(state, ymap);
// now you can mutate the state
state.text = 'hello';
// you can nest objects
state.obj = { count: 0 };
// and mutate the nested object value
++state.obj.count;
// you can use arrays too
state.arr = [1, 2, 3];
// mutating the array is also possible
state.arr.push(4);
// unbind them by calling the result
unbind();
```
Using `useSnapshot` in valtio and
`WebsocketProvider` in [y-websocket](https://github.com/yjs/y-websocket),
we can create multi-client React apps pretty easily.
- [Messages object](https://stackblitz.com/github/valtiojs/valtio-yjs/tree/main/examples/01_obj)
- [Messages array](https://stackblitz.com/github/valtiojs/valtio-yjs/tree/main/examples/02_array)
- [Minecraft + webrtc](https://stackblitz.com/github/valtiojs/valtio-yjs/tree/main/examples/03_minecraft)