Y-Sweet is an open-source document store and realtime sync backend, built on top of the Yjs CRDT library.
The Y-Sweet server can be used by any Yjs app, or you can use our opinionated stack to integrate Yjs and Y-Sweet into a Next.js app.
create-y-sweet-app
, a command line tool to quickly create a Y-Sweet app.@y-sweet/sdk
, a TypeScript library for interacting with y-sweet-server
from your application backend.@y-sweet/client
, a TypeScript library for syncing documents from a client to a Y-Sweet server.@y-sweet/react
, a library of React hooks for connecting to a Y-Sweet server and manipulating Yjs docs.Y-Sweet is MIT-licensed, and was created by Jamsocket.
The easiest way to start a Y-Sweet project is with the create-y-sweet-app
command line tool:
npx create-y-sweet-app@latest
For more information, check out our documentation.
Explore our collaborative examples to help you get started or play with them live.
Check the vanilla js example for more details.
import * as Y from 'yjs';
import { createYjsProvider } from '@y-sweet/client';
// Create the Yjs doc and link it to the Y-Sweet server:
const doc = new Y.Doc();
const docId = 'my-doc-id';
createYjsProvider(doc, docId, '/api/my-auth-endpoint');
// Now use the doc like a normal Yjs doc!
let mySharedMap = doc.getMap('thing');
mySharedMap.set("foo", 123);
// Update your UI based on `mySharedMap` changes like this, for example:
mySharedMap.observe((event) => {
event.keysChanged.forEach((key) => {
// do whatever you want based on the detected change:
yourUpdateFunction(key, mySharedMap.get(key));
});
});
import { DocumentManager } from '@y-sweet/sdk';
// Pass in a CONNECTION_STRING, which you can get from a Y-Sweet service in the Jamsocket dashboard or from running npx y-sweet@latest serve locally
const manager = new DocumentManager(CONNECTION_STRING);
// create an endpoint that auths your user and returns a Y-Sweet client token
export async function POST(request) {
// in a production app, you'd want to authenticate the user
// and make sure they have access to the given doc
const body = await request.json();
const docId = body.docId;
const clientToken = await manager.getOrCreateDocAndToken(docId);
return Response.json(clientToken);
}
If you have npm
, the fastest way to run a local server is with npx
:
npx y-sweet@latest serve
This will download the Y-Sweet server if you do not already have it, and run it.
By default, y-sweet serve
does not write data to disk. You can specify a directory to persist data to, like this:
npx y-sweet@latest serve /path/to/data
If the directory starts with s3://
, Y-Sweet will treat it as an S3-compatible bucket path. In this case, Y-Sweet will pick up your local AWS credentials from the environment. If you do not have AWS credentials set up, you can set them up with aws configure
.
Package Manager | Name | Version | Path |
---|---|---|---|
npm | y-sweet |
js-pkg/server |
|
crates.io | y-sweet |
crates/y-sweet |
|
crates.io | y-sweet-core |
crates/y-sweet-core |
Package Manager | Name | Version | Path |
---|---|---|---|
npm | @y-sweet/sdk |
js-pkg/sdk |
|
npm | @y-sweet/client |
js-pkg/client |
|
npm | @y-sweet/react |
js-pkg/react |
|
pypi | y-sweet-sdk |
python/y_sweet_sdk |
You can run Y-Sweet on your own server, or you can run it on Jamsocket. Jamsocket is purpose-built to scale up sync backends like Y-Sweet, and allows you to bring your own storage.
You can try it out for free today by following our quickstart guide.