The Chrome Web Store listing is operated separately and may lag the GitHub source/release version documented here. Check the Store listing's displayed version before assuming a GitHub hardening change is installed from the Store.
Stack and organize your browser tabs like a kebab skewer.
Website · User Guide · Changelog · Privacy Policy · Terms of Service · Report Issue
TabKebab is a Chrome side-panel extension that tames tab chaos. Group, stash, sleep, and restore tabs across windows — manually or with AI. Zero dependencies, zero telemetry, everything stays local unless you opt in.
- Live tab list with favicon, title, URL, and active/discarded status
- Sub-views: All Tabs, By Domain, By Chrome Group, and a unified Groups editor
- Drag-and-drop tab reordering within and across groups
- Close, pin, discard, or move individual tabs from the side panel
- Tab count badges per window with color-coded thresholds (green / yellow / red)
- Hash-aware duplicate detection with badge counter, periodic background scanning (every 60s), and bulk close with lossless undo from each tab's exact original URL
- Empty pages cleanup — find and close blank tabs (
about:blankor missing URLs) while preserving Chrome's new-tab pages - Safe AI domain commands — match only an exact host or its true subdomains, reject lookalike hosts, and revalidate live tabs before a confirmed close
- Global stats bar — always-visible bar showing Windows, Tabs, and Active/Kebab percentage
- Domain grouping — one-click to group all tabs by domain into Chrome native tab groups
- AI smart grouping — understands context (research, shopping, work, entertainment) and creates meaningful groups
- 4-phase pipeline: Snapshot → Solver → Planner → Executor with live progress per phase
- Custom groups — create, rename, recolor, and manage your own groups with three ways to add tabs: drag-and-drop, text search filter, or URL paste
- Collapsible section headers in the Groups sub-view
- Save full snapshots of every window, tab, and tab group layout
- Saved / Auto tabs — sessions view split into Saved (user-created) and Auto (automatic) sub-tabs for clean separation
- Recoverable restore outcomes — every saved tab is reported as restored, already open, invalid, or failed
- Restore modes: original windows, current window, or single new window
- Audio-safe pipeline restore: batched creation → temporary background mute → discard → guaranteed unmute cleanup; non-discarding restores never mute
- Auto-save on browser start and at configurable intervals (default 24h), with retention policy
- Per-session export as JSON for sharing or backup
- Rename and delete sessions from the panel
- Stash and close tabs by window, Chrome group, domain, or all at once
- Save to IndexedDB — no storage limits
- Fail-closed stash restore: incomplete restores retain the unchanged IndexedDB source even when delete-after-restore is enabled
- Two-phase progress bar: "Creating tabs..." then "Loading... X / Y ready" with animated stripe
- Restored badge on stashes already restored, with confirmation before re-restoring
- Favicon previews, source badges, tab count, and one-click restore or delete
- Per-stash export as JSON
- Three bookmark formats: By Windows, By Groups, By Domains
- Multiple destinations: Chrome Bookmarks, Local Storage, Google Drive, or all
- Auto-bookmark on stash — automatically create bookmarks when stashing
- Compressed export — compact JSON to save space on Drive
- HTML bookmark page — browsable, searchable HTML uploaded to Google Drive with:
- Tab navigation (Windows / Groups / Domains)
- Clickable pills for quick-jump to any group
- Live search with highlighted matches
- Dark/light mode support
- Responsive layout
- Discard tabs to free memory while keeping them in the tab strip
- Per-domain keep-awake exceptions — protect email, calendars, AI tools
- AI-assisted classification suggests which domains to protect
- Sleep by domain, group, window, or everything at once
- Auto-kebab idle tabs after configurable hours (default: 3 hours)
- Time-bounded productivity sessions with live countdown timer
- 4 built-in profiles: Coding, Writing, Research, Meeting — each with preset allowed/blocked domains
- Profile-colored HUD — timer display glows in profile color (cyan, purple, green, blue)
- Distraction blocking with three modes:
- Strict Mode — only allowlisted entries are accessible; an empty list blocks every non-internal URL
- Curated Categories — block Social, Video, Gaming, News, Shopping, Entertainment
- AI Detection — AI categorizes unknown domains in real-time
- Complete allowlist policy — exact hosts/true subdomains, canonical exact URLs, and Chrome groups rebound by exact title on each run
- Tab actions on start — Kebab, Stash, Group, or monitor-only
- Session reports — stats on duration, distractions blocked, focus tabs
- Focus history — review your last 50 sessions
- Preferences saved per profile — your category selections and settings remembered
- Keyboard shortcut — press
Fto start Focus Mode
- Multi-line textarea command bar with provider label showing the active AI model
- Type commands like "close YouTube tabs", "find my GitHub tabs", "group by project"
- AI interprets intent and executes tab operations
- Works with any configured AI provider
- 1–4 — switch between Windows, Tabs, Stash, and Sessions views
- F — start Focus Mode
- / — focus the AI command bar
- ? — toggle the help overlay
- Esc — close overlays, unfocus inputs, or dismiss settings
- Profile-scoped — each Chrome profile gets its own folder
- Folder structure:
TabKebab / {profile} / sessions, stashes, bookmarks, archive - Manual or automatic sync at configurable intervals
- Fail-closed retention — only old, strictly dated recoverable copies are eligible; canonical, newest, young, malformed, undated, and unrelated files are protected
- Archive before overwrite — previous versions must be copied successfully before existing content is updated
- Cross-profile settings import from other profiles on the same Google account
- HTML bookmark export alongside JSON
- OpenAI — GPT-4.1, GPT-5, o4-mini
- Anthropic Claude — Haiku, Sonnet, Opus
- Google Gemini — 2.5 Flash/Pro, 3.0 preview
- Chrome Built-in AI — Gemini Nano, on-device, no API key needed
- Custom endpoint — any OpenAI-compatible API (Ollama, LM Studio, Groq, Together AI)
- Encrypted API key storage with AES-GCM 256-bit and optional passphrase
- Response caching — LRU cache (200 entries, 24h expiry) to avoid redundant calls
- Request queue with concurrency control
- Portable v2 full backup of sessions, IndexedDB stashes, custom groups, keep-awake domains, bookmarks, effective settings, Focus preferences/history, and non-secret AI configuration
- Transactional import — validates before storage access, merges under one worker lock, and rolls back affected local/IndexedDB state on failure
- Individual v2 exports for sessions, stashes, and settings
- Secret-free files — API keys, passphrase metadata, Drive/OAuth state, install IDs, active Focus state, and caches are excluded
- Bounded input — files over 25 MiB and malformed or wrong-kind documents reject before import
- Google Drive backup with subfolder organization
- JSON format throughout — human-readable, version-controllable
- Default view selection (Tabs, Windows, Stash, Sessions)
- Theme (System, Light, Dark)
- Tab count thresholds — configurable yellow/red warning levels
- Automation — auto-save interval, retention, auto-kebab, auto-stash
- Bookmark configuration — formats, destinations, compression, HTML export
- Drive sync — connection, auto-export toggles, sync interval, retention
- Keep-awake domains — manage the protected domain list
- Manifest V3 with ES modules throughout
- Side panel UI — zero external dependencies
- IndexedDB for stash storage (no size limits)
- Chrome APIs: tabs, tabGroups, windows, bookmarks, storage, identity, alarms, sidePanel
- Google Drive REST v3 with OAuth2 (
drive.filescope) - 4-phase grouping engine: snapshot → solver → planner → executor
- Adaptive batched operations — lazy mode for 20+ tabs (5/batch with delay and per-batch discard)
- AES-GCM 256-bit encryption for API keys with PBKDF2 key derivation
- Clone this repo:
git clone https://github.com/michelabboud/tabkebab-chrome-ext.git - Open
chrome://extensionsand enable Developer Mode - Click Load unpacked and select the cloned folder
- Click the TabKebab icon or pin it to open the side panel
See Google Drive Setup Guide for OAuth configuration.
- Open Settings in the side panel
- Scroll to the AI section (visible after connecting a provider)
- Select a provider, enter your API key, and choose a model
- The AI command bar and smart grouping features will activate
The extension remains dependency-free and Chrome loads this repository directly; there is no package install, bundler, or generated runtime output. Automated tests use Bun 1.3.11, pinned in .bun-version. Install that exact Bun version and verify it with bun --version before running the gate.
Run the same commands required by CI from the repository root:
bun test
bun test --coverage
bun test tests/syntax.test.jsThe repository-owned Chrome mock resets local/session storage, listeners, tab/window/group state, runtime ports, failures, and call records between tests. It is intentionally an orchestration boundary, not a browser emulator: DOM, IndexedDB, extension lifecycle, OAuth, and Chrome Prompt API behavior still require the real-Chrome smoke matrix.
GitHub Actions runs all three commands, in that order, for pull requests, manual dispatches, and pushes to main. After they pass, a dependent Windows job runs package.cmd, verifies the version and exact archive root, and uploads one tabkebab-extension-<version> artifact. The packager includes only manifest.json, service-worker.js, core/, sidepanel/, and icons/; it is release packaging, not a runtime build. Tag pushes do not trigger this workflow.
TabKebab/
manifest.json # Extension manifest (MV3)
bunfig.toml # Bun test preload and coverage settings
service-worker.js # Background service worker & message hub
tests/ # Bun regressions and Chrome API test doubles
icons/ # Logo and icon assets (SVG + PNG)
core/
tabs-api.js # Chrome tabs/windows API wrapper
sessions.js # Session save/restore with v1→v2 migration
stash-db.js # IndexedDB stash storage
grouping.js # 4-phase grouping orchestrator
duplicates.js # Duplicate tab detection + empty pages
focus.js # Focus Mode engine: state, timer, blocking
focus-profiles.js # Built-in focus profiles
focus-blocklists.js # Curated distraction blocklists
nl-executor.js # Natural language command execution
settings.js # Settings schema and CRUD
storage.js # Storage abstraction layer
export-import.js # Full data export/import
drive-client.js # Google Drive REST API client
ai/ # AI provider abstraction
ai-client.js # Unified AI client
provider.js # Base provider class
provider-openai.js # OpenAI provider
provider-claude.js # Anthropic Claude provider
provider-gemini.js # Google Gemini provider
provider-chrome.js # Chrome Built-in AI provider
provider-custom.js # Custom endpoint provider
crypto.js # API key encryption
cache.js # Response LRU cache
queue.js # Request queue
prompts.js # AI prompt templates
engine/ # 4-phase grouping engine
snapshot.js # Phase 1: Capture tab state
solver.js # Phase 2: Domain-based solving
solver-ai.js # Phase 2 alt: AI-based solving
planner.js # Phase 3: Plan Chrome operations
executor.js # Phase 4: Execute tab moves/groups
types.js # Shared type definitions
sidepanel/
panel.html # Main side panel UI
panel.css # Styles
panel.js # View controller & navigation
components/
tab-list.js # Tab list + grouping controls
window-list.js # Windows view
session-manager.js # Sessions view
stash-list.js # Stash view
group-editor.js # Groups sub-view & editor
duplicate-finder.js # Duplicate detection UI + empty pages
focus-panel.js # Focus Mode UI: setup, timer, report, history
command-bar.js # AI command bar
drive-sync.js # Drive sync controls
settings-manager.js # Settings UI bindings
ai-settings.js # AI provider settings
confirm-dialog.js # Confirmation dialogs
toast.js # Toast notifications
- Architecture
- Current progress
- Changelog
- Architecture decisions
- Reliability hardening design
- Reliability hardening implementation plan
Created by Michel Abboud.
This project was built with the assistance of AI systems including Claude by Anthropic and Codex by OpenAI. In the spirit of full transparency: architecture decisions, code implementation, icon/logo design, documentation, and commit messages were produced through human-AI collaboration. Michel retains final review and approval.
See LICENSE for details.