AlexDunmow / y-supabase

Supabase Provider for Yjs
MIT License
118 stars 14 forks source link

y-supabase

A Supabase Realtime provider for Yjs, a high-performance CRDT for building collaborative applications that sync automatically.

Disclaimer

Please note that this package is currently in its early stages of development and may does have rough edges. Reliability is still being worked out. API will likely change dramatically. It is not recommended to use this in a production environment.

Contributions and feedback are greatly appreciated!

Getting started

To get started, you will need to install y-supabase as a dependency.

npm install --save y-supabase

Next, you can create a new Y.Doc and a SupabaseProvider with a Supabase connection.

const yDoc = new Y.Doc()
const provider = new SupabaseProvider(yDoc, supabase, {
    channel: note.id,
    id: note.id,
    tableName: "notes",
    columnName: "document",
})

API

The SupabaseProvider class takes in the following arguments:

const provider = new SupabaseProvider(yDoc, supabase, {
    channel: note.id,
    id: note.id,
    tableName: "notes",
    columnName: "document",
    resyncInterval?: number | false; // Default: 5000 (5 seconds)
})

Events

The SupabaseProvider class emits the following events:

provider.on('message', (update) => {
  console.log('Received real-time update:', update);
});

provider.on('awareness', (awarenessUpdate) => {
  console.log('Received awareness update:', awarenessUpdate);
});

// version is local to the provider only, not a true version number
provider.on('save', (version) => {
  console.log('Document saved to database with version:', version);
});

provider.on('status', (status) => {
  console.log('Connection status update:', status);
});

provider.on('connect', (providerInstance) => {
  console.log('Connected:', providerInstance);
});

provider.on('error', (providerInstance) => {
  console.error('Error:', providerInstance);
});

provider.on('disconnect', (providerInstance) => {
  console.log('Disconnected:', providerInstance);
});

provider.on('synced', (state) => {
  console.log('Synced with state:', state);
});

provider.on('sync', (state) => {
  console.log('Sync event with state:', state);
});

License

License

y-supabase is released under the MIT License. See LICENSE for more information.

Author

y-supabase is developed and maintained by Alex Dunmow.

Feel free to reach out with any questions or feedback via email or GitHub issues

Contributing

We welcome contributions to y-supabase! If you're interested in contributing, please check out our contributing guidelines.