Sync plugin for @zignal/core signal stores. Adds cross-tab sync via BroadcastChannel or localStorage to your state.
- Keeps your zignal store in sync across all open tabs/windows
- Uses real-time sync (BroadcastChannel) by default, or storage-based sync (localStorage) as a fallback
- Simple API, works with any zignal store
- Lightweight and dependency-free (except React)
pnpm add @zignal/core
pnpm add @zignal/sync
# or
npm install @zignal/core
npm install @zignal/sync
import { createZignal } from '@zignal/core';
import { broadcast } from '@zignal/sync';
const useCounter = broadcast(createZignal(0), { key: 'counter' });
export function Counter() {
const [count, setCount] = useCounter();
return (
<>
<span>Count: {count}</span>
<button onClick={() => setCount(count + 1)}>+</button>
</>
);
}
zignal
: A zignal store (fromcreateZignal
)options.key
: The sync key (used for BroadcastChannel or localStorage)options.strategy
:'broadcast' | 'storage'
(default:'broadcast'
)'broadcast'
: Uses BroadcastChannel API for real-time tab sync (falls back to localStorage if not supported)'storage'
: Uses localStorage and the storage event for sync
If you choose 'broadcast'
but the browser does not support it, broadcast
will automatically fall back to using localStorage.
MIT