v148 · Web Workers · Android

Shared State Board

A multi-tab shared dashboard using SharedWorker. The worker maintains online users, a shared clipboard, a broadcast counter, and a live chat — all synchronized across every tab that's connected. On Chrome 148+ this also works on Android.

Connecting… Port ID:
Your display name:

Online users

0 connected
  • No users yet

Broadcast counter

shared across all tabs
0

Shared clipboard

all tabs see it
Nothing copied yet

Live chat

broadcast to all tabs
Messages appear here

Connection log

The SharedWorker pattern

// In every tab (page.js):
const worker = new SharedWorker('./worker.js');
worker.port.addEventListener('message', (e) => {
  const { type, ...payload } = e.data;
  switch (type) {
    case 'COUNTER': updateCounter(payload.counter); break;
    case 'NEW_MSG':  appendMessage(payload.msg); break;
    case 'USER_JOINED': updateUserList(payload.users); break;
    // …
  }
});
worker.port.start();

// Send events:
worker.port.postMessage({ type: 'INCREMENT' });
worker.port.postMessage({ type: 'SEND_MSG', text: 'Hello!' });

// In worker.js — all ports (tabs) share a single execution context:
const ports = new Map();
let counter = 0;
self.addEventListener('connect', (event) => {
  const port = event.ports[0];
  // … store port, handle messages, broadcast to all other ports
});

Chrome 148 enables this on Android — previously SharedWorker was silently unavailable on Chrome for Android. The fix aligns Android with desktop.

see also

implementation reference

Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗