Filter, hunt, and kill open tabs. Get to zero.
Tab Zero is a browser extension for Chrome and Firefox that brings inbox-zero discipline to your tab bar. Every open tab is a micro-decision you postponed — Tab Zero helps you find and eliminate them fast.
- Live badge on the toolbar icon shows
window tabs / total tabsat a glance, updating automatically as you open and close tabs - Instant full-text filter — type anything (
jira,github.com,window 2) and the list narrows in real time, with matches highlighted - Filter by window — restrict the list to a specific browser window via the dropdown
- Match count — always shows how many tabs match the current filter
- Jump to tab — click a result (or the
→button) to switch directly to that tab and window - Close individual tabs —
✕button per row, without leaving the popup - Close all matching — one click to bulk-close every tab that matches the current filter
- Works in Chrome and Firefox
- Download the latest
tab-zero-extension.zipfrom the Releases page - Unzip it
- Go to
chrome://extensions - Enable Developer mode (toggle in the top-right corner)
- Click Load unpacked and select the
tab-zero-extension/folder
- Download
tab-zero-extension.zipfrom the Releases page - Go to
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on
- Select the zip file (or any file inside the unzipped folder)
Note: Firefox 128 or later is required for Manifest V3 support. Temporary add-ons are removed when Firefox restarts. For a permanent install, the extension must be signed via addons.mozilla.org.
- Node.js 20+
- npm
git clone https://github.com/your-username/tab-zero.git
cd tab-zero
npm installnpm test # run the Jest unit test suite
npm run lint # lint with ESLint
npm run lint:fix # auto-fix lint issues
npm run package # build tab-zero-extension.ziptab-zero-extension/ # the browser extension
manifest.json
background.js # service worker — keeps the badge in sync
popup.html / .css / .js # the popup UI
lib/
utils.js # pure functions shared between extension and tests
icons/ # 16 · 32 · 48 · 128 px PNGs
tests/
utils.test.js # escapeHtml, highlight
filter.test.js # filterTabs (title, URL, window label)
background.test.js # formatBadgeText, formatBadgeTitle
.github/
workflows/
ci.yml # lint → test → package artifact on every push
Every push triggers a GitHub Actions pipeline that lints the source, runs the full test suite, and publishes a release:
- Branch push → updates the rolling Latest Build pre-release with a fresh zip, so there is always a ready-to-install build on the Releases page
- Version tag (
v1.0.0,v1.2.3, …) → creates a proper versioned GitHub Release with auto-generated release notes
To cut a release, just push a tag: git tag v1.0.0 && git push --tags.
Pull requests are welcome. Please make sure npm test and npm run lint both pass before opening a PR.
This extension was developed with Claude by Anthropic — the code, tests, CI pipeline, and this README were all produced in a single collaborative session using Claude's Cowork mode.
MIT — © Martin Scharm
