Your tabs, but fabulous - A modern Chrome extension for finding and managing duplicate tabs
Built with React 19, TypeScript, and Vite 7.
# Install dependencies
pnpm install
# Start development server with HMR
pnpm run dev
# Build for production
pnpm run build
# Run tests
pnpm test
# Run tests with coverage
pnpm test --coverage- Open Chrome →
chrome://extensions/ - Enable Developer mode (top-right toggle)
- Click Load unpacked
- Select the
dist/directory - Open the extension and start finding duplicates!
- 🔍 Smart Duplicate Detection - 4 detection modes for different use cases
- 🪟 Cross-Window Scanning - Find duplicates across all browser windows
- 📊 Real-time Statistics - See duplicate groups and redundant tab counts
- 🗑️ Bulk Actions - Close all duplicates or manage them individually
- ⚡ Fast & Lightweight - Modern React with optimized performance
- 💾 Persistent Settings - Your preferences are saved automatically
- 🎨 Clean UI - Simple, intuitive interface
- Strict - Exact URL matching (default)
- Ignore Fragments - Ignore
#anchors (e.g.,page.html#section) - Ignore Query Params - Ignore
?parameters (e.g.,page.html?id=123) - Loose - Ignore both fragments and query params
tabulous/
├── src/ # Source code
│ ├── components/ # React components
│ │ ├── Popup.tsx # Main UI component
│ │ ├── Popup.css # Styles
│ │ ├── DuplicateGroupComponent.tsx
│ │ └── TabItem.tsx
│ ├── lib/ # Core logic
│ │ ├── DuplicateDetector.ts
│ │ └── DuplicateDetector.test.ts
│ ├── test/ # Test utilities
│ │ ├── setup.ts
│ │ └── chrome-mock.ts
│ ├── popup.tsx # Entry point
│ └── popup.html # HTML template
├── icons/ # Extension icons (16, 48, 128)
├── dist/ # Build output (gitignored)
├── manifest.json # Chrome extension manifest
├── package.json # Dependencies
├── vite.config.ts # Build configuration
├── vitest.config.ts # Test configuration
├── tsconfig.json # TypeScript config
├── devenv.nix # Reproducible dev environment
└── archives/ # Historical docs (gitignored)
Comprehensive test suite with 94.73% coverage:
# Run tests in watch mode
pnpm test
# Run tests once
pnpm test run
# Generate coverage report
pnpm test --coverage
# Interactive test UI
pnpm test:uiTest Coverage:
- ✅ 23 tests covering all detection modes
- ✅ Edge cases (empty arrays, invalid URLs, etc.)
- ✅ Cross-window duplicate detection
- ✅ Complex URL handling (ports, auth, subdomains)
- ✅ Large-scale performance (100+ tabs)
| Category | Technology |
|---|---|
| Framework | React 19.2.0 |
| Language | TypeScript 5.9.3 |
| Build Tool | Vite 7.2.2 |
| Testing | Vitest 4.0.8 |
| Package Manager | pnpm |
| Dev Environment | devenv (Nix) |
pnpm run buildThis creates an optimized build in dist/:
- Minified JavaScript bundle
- Optimized CSS
- Extension manifest
- Icons
pnpm run devStarts Vite dev server with:
- Hot Module Replacement (HMR)
- Fast refresh
- Source maps
- Clone the repository
- Install dependencies:
pnpm install - Start dev server:
pnpm run dev - Make your changes
- Run tests:
pnpm test - Build:
pnpm run build - Test in Chrome
# Type checking
pnpm run type-check
# Linting
pnpm run lintMIT License - See LICENSE file for details.
Historical development artifacts are preserved in archives/ (gitignored):
- Previous Vite + Svelte implementation
- Planning documents and analysis reports
- Pre-reorganization backups
See archives/README.md for details.
Made with ❤️ and TypeScript