Skip to main content

v4 Migration Guide

There a number of breaking changes in v4. This guide will help you migrate your code.

The biggest change is that SocketDB is now split into multiple packages. Most notably @socketdb/client and @socketdb/server.

All packages share the same version number. Make sure to keep all packages at the same major version.

The client has been moved into its own package​

To upgrade the client, replace all imports from socketdb to @socketdb/client.

- import { SocketDBClient } from 'socketdb';
+ import { SocketDBClient } from '@socketdb/client';

The server has been moved into its own package​

To upgrade the server, replace all imports from socketdb to @socketdb/server.

- import { SocketDBServer } from 'socketdb';
+ import { SocketDBServer } from '@socketdb/server';

Core functions are now located in the core package​

If you have been using core functions, for example to create a custom store, you need to install the @socketdb/core package.

npm install @socketdb/core

Then replace the relevant imports from socketdb to @socketdb/core.

- import { createStore } from 'socketdb';
+ import { createStore } from '@socketdb/core';

Client and server cannot be updated independently to v4​

You need to update both the client and the server at the same time. This is because of a change how socket events are handled.

All socket events are now batched 🎉​

SocketDB now batches all events. This means that nested subscribe calls will now only send one event to the client. Previously, every nested subscribe call would send & receive its own event. This has been a major performance issue for larger collections.

// this will now only send a single event instead of an event for every todo item
db.get('todos').each((todoRef) => {
todoRef.on(({ title }) => {
console.log(title);
});
});

If you've been avoiding nested subscribe calls, like each for performance reasons, you may now opt-in again to use nested subscribe calls for cleaner code.

Note

Feel free to raise an issue if you face any performance problems with this.

- db.get('todos').on(todosObject => {
- Object.values(todosObject).forEach(({title}) => {
- console.log(title);
- });
- })
+ db.get('todos').each((todoRef) => {
+ todoRef.on(({ title }) => {
+ console.log(title);
+ });
+ });