PolyChrome 2.0 is a Chrome extension that turns curated visualization pages into shared spaces. Move your cursor and your peers see it. Brush a chart and the selection replicates. Every action drops into a shared timeline, and the side panel can undo your most recent move.
Fully peer-to-peer over WebRTC. No backend, no accounts. A canonical, invertible op log per session.
Standalone, hosted example apps. They work without the extension - with it installed and a peer joined to the same room, every interaction synchronizes in real time.
Shared whiteboard. Strokes append to a CRDT list, so a late-joining peer sees every existing stroke immediately.
Open →Iris dataset, D3 v7. Brush selection and X/Y axis choices replicate across peers.
Open →US states, year slider, pinned-state list. Slider position and pinned set sync between peers.
Open →Nine coordinated views over an exoplanet dataset. Brush any view to filter the rest; filter ops are dimension-keyed so peers on a desktop grid and a mobile pager share the same selection.
Open →It's an unpacked Chrome MV3 extension - open-source, no telemetry.
dist/
folder.
chrome://extensions, enable
Developer mode, click
Load unpacked, and select the
dist/ folder.
Architecture, protocol, OT spec, and per-track briefs live in
docs/plan/.
The implementation is a pnpm workspace with a thin extension shell
on top of four small TypeScript packages
(protocol, ot-core, sdk,
replay-player).
PolyChrome 2.0 is a reimplementation of the 2014 PolyChrome paper by Karthik Badam & Niklas Elmqvist (ITS '14). The original system used a Node proxy and PeerJS signaling; this version keeps the peer-to-peer spirit, moves everything client-side, and adds an OT-based replay/undo layer.