y-sweet is an open-source server for building realtime applications on top of the Yjs CRDT library.
- Persists document data to a network filesystem or S3-compatible storage, inspired by Figma’s infrastructure.
- Scales horizontally with a session backend model.
- Deploys as a native Linux process, or as a WebAssembly module on Cloudflare's edge.
- Provides document-level access control via client tokens.
- Written in Rust with a focus on stability and performance, building on the blazing fast y-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.
@y-sweet/sdk
, a TypeScript library for interacting withy-sweet-server
from your application backend.@y-sweet/react
, a React hooks library for building Yjs applications.- A debugger for exploring Yjs document and presence state.
The goal of the y-sweet stack is to give developers the end-to-end developer ergonomics they would expect from a proprietary state-sync platform, without the lock-in.
y-sweet is MIT-licensed, and was created by Drifting in Space.
Explore our collaborative examples to help you get started.
All examples are open source and live in this repository, within /examples.
Check the vanilla js example for more details.
import { DocumentManager } from '@y-sweet/sdk'
// Pass in a CONNECTION_STRING, which you can get from running npx y-sweet@latest serve locally or from y-sweet cloud
const manager = new DocumentManager(CONNECTION_STRING)
// Get the client token from the y-sweet server. The client token is like the user's "password" to edit the "myDoc123" doc.
const clientToken = await manager.getOrCreateClientAndToken('myDoc123')
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();
createYjsProvider(doc, clientToken);
// 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));
});
});
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/react |
js-pkg/react |
If you were to use the open source y-sweet server alone, you would still have to set up the infrastructure for self hosting it. With Y-Sweet cloud, every document is automatically persisted. You can link your own S3-compatible storage, or just let us take care of the details.
You can try a preview for free today by following our quickstart guide.
If you are interested in being a build partner for early access to new features, please reach out.
We are committed to growing y-sweet as an open-source-first project, wherever you decide to host it.