. * . · ✦
· ✦ . · * .
. ○───────○ ·
* / \ ✦ .
· ○ ○─────○ *
\ / ·
· ○────○ ✦
· .
Your browser history, as a living constellation. ✦
A Chrome extension that turns every tab you open into a star, every link you follow into a thread of light, and your whole browsing session into a tiny universe drifting quietly in the corner of your screen.
From the Chrome Web Store: coming soon — listing is pending review.
From source (for now):
git clone https://github.com/Mintsolester/Chronocluster.git
cd Chronocluster
npm ci
npm run buildThen in Chrome: chrome://extensions → toggle Developer mode → Load unpacked → point at dist/.
Click the ChronoCluster icon in your toolbar. A full tab opens. Start browsing. Watch your constellation bloom. ✨
You open a tab. It becomes a node. You click a link. The new tab is born connected to its parent. You close a tab. The node gently vanishes.
No bookmarks. No folders. No forgetting. Just a live, force-directed graph of your own curiosity — constantly rearranging itself as you browse.
Hover a node, and the threads that bind it to its siblings light up purple. Drag one, and the whole constellation ripples. Zoom out, and watch a thousand tabs cluster by domain like galaxies on a golden spiral.
Because tab bars are a lie. They pretend your browsing is linear — it isn't. You branch, backtrack, detour, rabbit-hole. ChronoCluster just... shows you the actual shape of it.
- 🌌 Live graph — tabs appear, move, and connect in real time, powered by
d3-forcein a web worker so your browsing never stutters - 🔗 Edge styles for every intent — dashed for typed URLs, dotted for form submits, solid for clicks. You'll know at a glance whether you chose to be here or stumbled in
- ➜ Directional arrows — every connection points from parent to child, so the story of "how did I end up here" is always legible
- ✋ Obsidian-style dragging — grab any node, fling it around, release it back into the sim
- 🔍 Fluid zoom & pan — trackpad pinch, scroll wheel, on-screen buttons, or click-drag the empty void
- 🎨 Obsidian-dark palette — off-white stars on charcoal, with a purple accent that shows up only where it matters
- 💾 100% local — all data lives in IndexedDB on your machine. No telemetry, no server, no "we value your privacy" banner because there's nothing to value
- ⚡ Handles 2000+ nodes — automatic level-of-detail kicks in when things get galactic
ChronoCluster runs entirely on your machine. There are no network calls, no analytics, no third parties. Full details in PRIVACY.md.
Three contexts, strictly separated:
| Context | Lives in | Sees | Touches |
|---|---|---|---|
| 🛰️ Service worker | src/background.ts |
Chrome tab/nav events | IndexedDB |
| 🖼️ Full-tab page | src/App.tsx + renderer.ts |
DOM, Pixi.js v8 | IndexedDB (read) |
| ⚙️ Physics worker | src/worker.ts |
d3-force simulation |
nothing else |
Positions stream from worker → page as transferable Float32Array every ~16 ms. Dexie useLiveQuery diffs the graph and forwards only deltas. Domain gravity places new clusters on a golden-angle spiral so your favourite sites never land on top of each other.
More detail in MANUAL.md and SHIPPING.md.
PRs welcome. See CONTRIBUTING.md for the short version, and open an issue first for anything non-trivial.
The workflow at .github/workflows/submit.yml uses PlasmoHQ/bpp. To enable, add these GitHub repo secrets:
CHROME_EXT_IDCHROME_CLIENT_IDCHROME_CLIENT_SECRETCHROME_REFRESH_TOKEN
Trigger manually via workflow_dispatch. See SHIPPING.md for full submission details.
MIT © Mintsolester