π§ Grooopy
AI-Powered Tab Grouping for Chrome
Stop drowning in tabs. Let AI organize them for you.
Your tabs, intelligently organized. Locally. Privately. Instantly.
Features β’ Installation β’ How It Works β’ Architecture β’ Contributing
β¨ Features
| Feature | Description |
|---|---|
| π§ Semantic Clustering | Uses state-of-the-art NLP embeddings to understand what your tabs are about |
| π― Content-First | Groups by meaning, not just domain. React docs across 5 sites? One group. |
| π Screen-Aware | Adapts grouping density based on your window width |
| π 100% Private | Everything runs locally in your browser. No data leaves your machine. β¦ |
π§ Grooopy
AI-Powered Tab Grouping for Chrome
Stop drowning in tabs. Let AI organize them for you.
Your tabs, intelligently organized. Locally. Privately. Instantly.
Features β’ Installation β’ How It Works β’ Architecture β’ Contributing
β¨ Features
| Feature | Description |
|---|---|
| π§ Semantic Clustering | Uses state-of-the-art NLP embeddings to understand what your tabs are about |
| π― Content-First | Groups by meaning, not just domain. React docs across 5 sites? One group. |
| π Screen-Aware | Adapts grouping density based on your window width |
| π 100% Private | Everything runs locally in your browser. No data leaves your machine. |
| β‘ One-Click | Click the button. Watch the magic. Thatβs it. |
| π¨ Smart Naming | Auto-generates meaningful group names using semantic analysis |
π Installation
β‘ Quick Install (Recommended)
Just want to use it? Download and go:
- Download the latest release (
.zipfile) - Extract the zip to a folder
- Open Chrome β go to
chrome://extensions - Enable Developer Mode (toggle in top right)
- Click "Load unpacked" β select the extracted folder
- Done! Click the π§ icon to organize your tabs
β³ First-time setup: The AI model (~23MB) downloads on first use. This may take 30-60 seconds depending on your internet speed. After that, itβs cached and instant!
π οΈ Install from Source (For Developers)
Want to contribute or customize? Build from source:
# Clone the repository
git clone https://github.com/shubhams2m/grooopy.git
cd grooopy
# Install dependencies
npm install
# Build the extension
npm run build
Then load in Chrome:
- Go to
chrome://extensions - Enable Developer Mode (top right)
- Click Load unpacked
- Select the
grooopyfolder
πͺ Chrome Web Store
Coming soon...
π¬ How It Works
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β YOUR 47 OPEN TABS β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Content Extraction β
β β’ Page titles, meta descriptions, headers, paragraphs β
β β’ URL path analysis β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π§ AI Embedding Generation β
β β’ all-MiniLM-L6-v2 (384-dim sentence embeddings) β
β β’ Runs 100% locally via Transformers.js + ONNX/WebAssembly β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Multi-Signal Similarity Scoring β
β β’ Semantic similarity (primary) β
β β’ Domain affinity boost β
β β’ URL path pattern matching β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Agglomerative Hierarchical Clustering β
β β’ Bottom-up merging with average linkage β
β β’ Adaptive thresholds based on tab count β
β β’ Screen-width aware group capacity β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β¨ ORGANIZED TAB GROUPS β
β π REACT π NEWS π SHOPPING π DOCS β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ποΈ Architecture
grooopy/
βββ manifest.json # Chrome extension manifest (MV3)
βββ background.js # Service worker entry point
βββ build.js # esbuild configuration
βββ src/
β βββ clustering.js # π§ Core AI clustering engine
β βββ tabManager.js # Chrome tabs/groups API wrapper
β βββ offscreen.js # Offscreen document for AI processing
β βββ offscreen.html # Offscreen document HTML
β βββ popup.html # Extension popup UI
β βββ popup.js # Popup logic
βββ dist/ # Built bundles
βββ icons/ # Extension icons
The Clustering Engine
The heart of Grooopy is src/clustering.js β a production-grade implementation featuring:
- Agglomerative Hierarchical Clustering (HAC) with average linkage
- Multi-signal similarity scoring: semantic embeddings + domain affinity + URL patterns
- Adaptive thresholds that scale with tab count
- Smart singleton consolidation with multi-pass orphan handling
- Semantic name generation using TF-IDF-like scoring
π οΈ Tech Stack
| Component | Technology |
|---|---|
| AI Model | all-MiniLM-L6-v2 via Transformers.js |
| Runtime | ONNX + WebAssembly |
| Bundler | esbuild |
| Platform | Chrome Extension Manifest V3 |
Why This Model?
- 22.7 MB β Small enough for browser caching
- 384 dimensions β Fast similarity computation
- MIT License β Free for any use
- SOTA performance β Trained on 1B+ sentence pairs
π€ Contributing
Contributions are welcome! Whether itβs:
- π Bug fixes
- β¨ New features
- π Documentation improvements
- π¨ UI/UX enhancements
Development Setup
# Clone and install
git clone https://github.com/shubhams2m/grooopy.git
cd grooopy
npm install
# Build (with file watching)
npm run build
# Load the extension in Chrome and test
Code Style
- Clean, readable code with meaningful comments
- JSDoc for public methods
- Descriptive variable names
π License
MIT License β do whatever you want with it.
π Acknowledgments
- Transformers.js by Xenova β for making SOTA ML accessible in the browser
- Hugging Face β for the model hosting
- The open source community
Built with β€οΈ and caffeine
Created with the assistance of Antigravity β an AI coding assistant.
If this helped you tame your tab chaos, consider giving it a β