demo · v139
Cross-Tab State Bus
Open this page in two tabs. A SharedWorker with extendedLifetime: true keeps a tick counter and event log, and pushes deltas to every connected tab. Close every tab, reopen one — the counter is still there, because the worker never died.
Connecting…
this tab
Tab ID:
Counter: —
Worker uptime:
—Counter: —
Worker uptime:
—
worker broadcast
Connected tabs: —
snippet
// Tab side
const worker = new SharedWorker('./state-bus.js', {
name: 'state-bus',
extendedLifetime: true, // 139+: stays alive past last page
});
worker.port.onmessage = (e) => render(e.data);
worker.port.postMessage({ type: 'bump' });
// Worker side (./state-bus.js)
let counter = 0;
const ports = new Set();
self.onconnect = (e) => {
const port = e.ports[0];
ports.add(port);
port.onmessage = ({ data }) => {
if (data.type === 'bump') counter++;
broadcast({ counter });
};
port.start();
port.postMessage({ counter, hello: true });
};
function broadcast(msg) { for (const p of ports) p.postMessage(msg); }