Client
Web Worker client

Web Worker Client

Triplit supports running the client in a Web Worker (specifically, a SharedWorker (opens in a new tab), which can connect to multiple tabs running a script from the same domain). While running a Web Worker, data syncs between browser tabs without having to sync with server. This reduces network traffic for Triplit apps running in the multiple tabs, move Triplit local database computation to a separate thread, and allow for robust multi-tab offline support.

WorkerClient

The WorkerClient is a drop-in replacement for the TriplitClient that runs in a Web Worker. It provides the same API as the TriplitClient. To use it, import WorkerClient from @triplit/client/worker-client and create a new instance of the client:

import { WorkerClient } from '@triplit/client/worker-client';
import { schema } from './schema';
 
const client = new WorkerClient({
  schema,
  serverUrl: import.meta.env.VITE_TRIPLIT_SERVER_URL,
  token: import.meta.env.VITE_TRIPLIT_TOKEN,
});

With Vite

To use it in Vite (opens in a new tab), you need to import an additional parameter workerUrl, which helps the Vite build process to correctly bundle the Web Worker:

import { WorkerClient } from '@triplit/client';
import { schema } from './schema';
import workerUrl from '@triplit/client/worker-client-operator?url';
 
const client = new WorkerClient({
  workerUrl,
  schema,
  serverUrl: import.meta.env.VITE_TRIPLIT_SERVER_URL,
  token: import.meta.env.VITE_TRIPLIT_TOKEN,
});

However, some frameworks, including SvelteKit (opens in a new tab), use Vite for development but use platform specific plugins that bundle differently for production. If you encounter issues with the WorkerClient in production, try removing the workerUrl parameter.

Here's an example of how to use the WorkerClient in SvelteKit when deploying to Vercel that works in both development and production:

import { browser, dev } from '$app/environment';
import { schema } from '../../triplit/schema';
import workerUrl from '@triplit/client/worker-client-operator?url';
 
export const triplit = new WorkerClient({
  workerUrl: dev ? workerUrl : undefined,
  schema,
  token: PUBLIC_TRIPLIT_TOKEN,
  serverUrl: PUBLIC_TRIPLIT_SERVER_URL,
  autoConnect: browser,
});

Debugging a WorkerClient

Because the WorkerClient runs in a Shared Worker you can't immediately view the Triplit-specific logs it produces. Instead, navigate to chrome://inspect/#workers to view the logs for the Shared Worker. We plan to add better debugging support for the WorkerClient in the future.