https://github.com/yjs/y-leveldb
LevelDB database adapter for Yjs
https://github.com/yjs/y-leveldb
yjs yjs-database
Last synced: about 1 month ago
JSON representation
LevelDB database adapter for Yjs
- Host: GitHub
- URL: https://github.com/yjs/y-leveldb
- Owner: yjs
- License: other
- Created: 2016-08-04T14:47:48.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2024-01-30T19:51:03.000Z (over 1 year ago)
- Last Synced: 2025-04-12T22:17:49.241Z (about 1 month ago)
- Topics: yjs, yjs-database
- Language: JavaScript
- Size: 211 KB
- Stars: 104
- Watchers: 6
- Forks: 19
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# LevelDB database adapter for [Yjs](https://github.com/yjs/yjs)
LevelDB is a fast embedded database. It is the underlying technology of IndexedDB.
Internally, y-leveldb uses [`level`](https://github.com/Level/level) which
allows to exchange the storage medium for a different supported database.
Hence this adapter also supports rocksdb, lmdb, and many more..* Persistent storage for the server
* Exchangeable storage medium
* Can be used in [y-websocket](https://github.com/yjs/y-websocket)
* A single y-leveldb instance can handle many documents.## Use it
```sh
npm install y-leveldb --save
``````js
import * as Y from 'yjs'
import { LeveldbPersistence } from 'y-leveldb'const persistence = new LeveldbPersistence('./storage-location')
const ydoc = new Y.Doc()
ydoc.getArray('arr').insert(0, [1, 2, 3])
ydoc.getArray('arr').toArray() // => [1, 2, 3]// store document updates retrieved from other clients
persistence.storeUpdate('my-doc', Y.encodeStateAsUpdate(ydoc))// when you want to sync, or store data to a database,
// retrieve the temporary Y.Doc to consume data
const ydocPersisted = await persistence.getYDoc('my-doc')
ydocPersisted.getArray('arr') // [1, 2, 3]
```## API
### `persistence = LeveldbPersistence(storageLocation, [{ [level] }])`
Create a y-leveldb persistence instance.
You can use any levelup-compatible adapter.
```js
import { LeveldbPersistence } from 'y-leveldb'
import level from 'level-mem'const persistence = new LeveldbPersistence('./storage-location', { level })
```#### `persistence.getYDoc(docName: string): Promise`
Create a Y.Doc instance with the data persisted in leveldb. Use this to
temporarily create a Yjs document to sync changes or extract data.#### `persistence.storeUpdate(docName: string, update: Uint8Array): Promise`
Store a single document update to the database.
#### `persistence.getStateVector(docName: string): Promise`
The state vector (describing the state of the persisted document - see
[Yjs docs](https://github.com/yjs/yjs#Document-Updates)) is maintained in a separate
field and constantly updated.This allows you to sync changes without actually creating a Yjs document.
#### `persistence.getDiff(docName: string, stateVector: Uint8Array): Promise`
Get the differences directly from the database. The same as
`Y.encodeStateAsUpdate(ydoc, stateVector)`.#### `persistence.clearDocument(docName: string): Promise`
Delete a document, and all associated data from the database.
#### `persistence.setMeta(docName: string, metaKey: string, value: any): Promise`
Persist some meta information in the database and associate it with a document.
It is up to you what you store here. You could, for example, store credentials
here.#### `persistence.getMeta(docName: string, metaKey: string): Promise`
Retrieve a store meta value from the database. Returns undefined if the
`metaKey` doesn't exist.#### `persistence.delMeta(docName: string, metaKey: string): Promise`
Delete a store meta value.
#### `persistence.getAllDocNames(docName: string): Promise>`
Retrieve the names of all stored documents.
#### `persistence.getAllDocStateVectors(docName: string): Promise