Reclaim RAM by intelligently suspending inactive tabs. Per-domain rules, regex whitelists, battery-aware scheduling, smart usage learning, and a calm suspended page. Manifest V3, local-only, no telemetry.
publishing in progress
- Open
chrome://extensionsin Chrome / Edge / Brave / Arc. - Toggle Developer mode (top-right).
- Click Load unpacked and select the
tabzen/folder. - Pin the extension to your toolbar. Open the popup or right-click the icon → Options to configure.
Requires Chrome 116 or newer.
Most tab suspenders give you a single timeout and a whitelist. TabZen gives you a real configuration surface - every knob below is exposed, and they compose.
| Capability | The Great Suspender | Marvellous Suspender | Auto Tab Discard | TabZen |
|---|---|---|---|---|
| Configurable timer | ✓ | ✓ | ✓ | ✓ |
| Domain whitelist | ✓ | ✓ | ✓ | ✓ |
| Glob / regex match modes | - | - | partial | ✓ (5 modes) |
| Per-domain custom timer | - | - | - | ✓ |
| Per–tab-group custom timer | - | - | - | ✓ |
| In-popup idle tab triage list | - | - | - | ✓ |
| Snooze tab (auto-restore at time) | - | - | - | ✓ |
| Suspend all other tabs in this window | - | - | - | ✓ |
| Suspend all in other windows | - | - | - | ✓ |
| Time-of-day schedule | - | - | - | ✓ |
| Battery-aware timer | - | - | - | ✓ |
| Memory-pressure trigger | - | - | - | ✓ |
| Usage-frequency learning | - | - | - | ✓ |
| Form-input detection | ✓ | ✓ | ✓ | ✓ |
| Tab-group awareness | - | - | - | ✓ |
| Two suspend strategies (replace vs native discard) | - | - | partial | ✓ |
| Named session snapshots | ✓ | ✓ | - | ✓ |
| JSON config import / export | - | - | - | ✓ |
Open the toolbar popup and you see every idle tab in the current window, sorted oldest first, with the idle time shown next to each. One tap on the ⊘ icon suspends a single tab; one tap on Suspend all N suspends the whole list. Click anywhere else on a row to jump to that tab. Idle time is colour-coded - over an hour goes warm amber, over fifteen minutes goes lighter amber - so the targets for cleanup jump out at a glance. The current tab also gets a single contextual primary button: "Suspend this tab" or "Restore this tab" depending on its state, with an inline estimate of memory saved. A small star icon next to the current tab toggles domain protection without leaving the popup.
- Replace page (default) - swaps the tab to a calm placeholder page that shows favicon, title, and last-visited time. Click anywhere to restore. Frees the most memory.
- Native discard - uses Chrome's
tabs.discard(). Tab keeps its title and favicon in the strip; reloads from network when re-activated.
Compose any combination: pinned · audible · has form input · offline · last tab in window · only tab · on AC power · part of a tab group.
Every rule first picks a target:
- URL - match against the tab's full URL using one of the modes below.
- Tab group - match against the title of the Chrome tab group the tab belongs to. Useful for "Reading list" → never suspend, or "Research" → suspend after 6 hours.
URL modes:
- Domain -
github.commatchesgithub.comand*.github.com - Contains - substring against full URL
- Exact - full URL equality
- Glob -
https://*.notion.so/* - Regex - full JavaScript regex against the URL
Tab-group modes:
- Exact - group title equality (case-insensitive)
- Contains - substring against group title
Existing tab group titles auto-complete in the value field.
When enabled, TabZen tracks visit frequency per domain (locally, capped at 1000 entries) and stretches the timer for tabs you return to often, shortens it for ones you rarely revisit. Tunable bounds.
Different timers for work hours vs off hours, with a day-of-week selector. Useful if you want aggressive suspension during deep-work blocks and lazy suspension on weekends.
- Aggressive timer when on battery (configurable multiplier).
- Optional memory-pressure trigger: when system free RAM drops below your threshold, the next sweep suspends more eagerly.
| Action | Default |
|---|---|
| Suspend current tab | Alt+S |
| Restore current tab | Alt+R |
| Suspend all other tabs in window | Alt+Shift+S |
| Restore all suspended tabs | Alt+Shift+R |
| Whitelist current domain | Alt+W |
| Open TabZen options | Alt+O |
Rebind any of them at chrome://extensions/shortcuts.
Everything runs locally. No analytics, no remote config, no network requests other than the ones the browser makes for Google Fonts on the suspended page (you can self-host the fonts by editing suspended/suspended.css if that bothers you). Settings, statistics, sessions, and the usage table all live in chrome.storage.local on your machine.
tabzen/
├── manifest.json
├── background.js # service worker: alarms, decisions, messaging
├── content.js # form-input detector
├── icons/ # 16/32/48/128 px
├── popup/ # toolbar popup UI
├── options/ # full settings page
└── suspended/ # the placeholder page swapped in for suspended tabs
- MV3 service worker - no persistent background page; state rehydrates from
chrome.storageon each wake. - The activity ledger (
Map<tabId, lastActiveTimestamp>) is in-memory and reseeds fromchrome.tabs.queryafter wake; this is fine because the worst case is one extra full timer cycle. - Suspended URLs use the hash, not the query string, so the original URL is never sent anywhere -
chrome-extension://…/suspended/suspended.html#u=<original>&t=<title>&f=<favicon>&at=<lastActive>. - Form-input detection runs only on tabs that haven't been marked dirty yet, throttled via
requestAnimationFrame.
MIT.