A local-first tab workspace manager for Chrome. Save messy browser sessions, sort them into color-coded spaces, and free up RAM, all without sending a single byte to any server.
TabZen turns the new-tab page and the Chrome side panel into a calm place to manage open tabs. Instead of hoarding 60 live tabs across windows, you snapshot a set of them into a session, file sessions into spaces (Dev, Media, Work, and so on), and reopen them later in one click. Tabs you are not using can be put to sleep to reclaim memory, and the ones you care about can be locked so they never get closed by accident.
It is a personal productivity tool, built from scratch, with one hard rule: your data never leaves your machine. There is no account, no sync server, and no network request. Everything lives in chrome.storage.local, and you can export or import all of it as a single JSON file at any time.
Spaces and sessions
- Color-coded spaces to separate contexts (work, media, learning, personal).
- Save the current window as a session in one action.
- Save by existing Chrome tab groups, keeping each group as its own session.
- Save and close everything at once to clear the window without losing it.
- Sessions hold named groups of tabs; drag tabs between groups, sessions, and spaces.
Sorting
- Smart auto-classify files open tabs into the right space using a local keyword heuristic (no AI service, no network).
- Sort by domain buckets a noisy window into one session per site.
- Duplicate detection prevents saving the same URL into a session twice.
Tab memory tools
- Put idle tabs to sleep, or suspend all background tabs at once, with an estimate of the RAM reclaimed.
- Merge duplicate open tabs and keep only one.
- Lock important tabs to protect them from being closed or suspended.
Views
- Now: live list of open tabs plus your saved spaces and sessions.
- Stats: weekly metrics and a 7x24 activity heatmap, built from a local event log.
- Archive: sessions you have not touched in a while move here automatically and can be restored.
- Command palette on
⌘K/Ctrl+Kfor fast navigation. - Seven themes, from warm dark to OLED black to paper light.
Your data, your control
- Export all spaces, sessions, and settings to a timestamped JSON backup.
- Import a backup to restore everything on a new machine.
TabZen shows up in four places, all backed by the same data:
| Surface | What you get |
|---|---|
| New tab | The full dashboard replaces the default new-tab page |
| Side panel | The dashboard docked beside any page |
| Toolbar popup | A compact quick-save panel |
| Context menu | Right-click to open TabZen in the side panel |
TabZen is a Vite-built extension, so you build it once and load the output folder.
git clone https://github.com/karpovantonme/tabzen.git
cd tabzen
npm install
npm run build # produces the loadable extension in dist/Then in Chrome:
- Open
chrome://extensions. - Turn on Developer mode (top right).
- Click Load unpacked and select the
dist/folder. - Open a new tab, or pin TabZen and click the icon.
To update after pulling changes, run npm run build again and hit the reload icon on the extension card.
npm run dev # Vite dev server for fast UI iteration
npm run build # bundle into dist/ for loading into Chrome
npm run preview # preview the production buildThe UI runs in a normal browser tab during npm run dev. The Chrome APIs (tabs, storage, tab groups, side panel) are guarded, so the app degrades gracefully outside the extension context, which keeps iteration fast. Reload the unpacked extension to test the real Chrome integrations.
TabZen requests only the permissions it needs to do its job, and nothing that touches the network:
| Permission | Why |
|---|---|
tabs |
Read and act on open tabs (save, close, focus, sleep) |
storage |
Persist your spaces and sessions in chrome.storage.local |
tabGroups |
Save sessions grouped by your existing Chrome tab groups |
sidePanel |
Show the dashboard in Chrome's side panel |
contextMenus |
Right-click entry to open the side panel |
There are no host permissions, no fetch calls, and no analytics. The "stats" you see are computed locally from an event log that also stays in local storage.
- React 19 with hooks
- Zustand for state, persisted to
chrome.storage.local - Vite 8 build, two entry points (dashboard and popup)
- Tailwind CSS v4 with a CSS-variable theme system
- nanoid for ids
- Chrome Manifest V3, service worker background script
Personal project, currently at extension version 0.2.0. It is used daily and built entirely by hand. Issues and ideas are welcome.
The interface is currently in Russian. The codebase, this README, and all docs are in English, and the architecture is ready for full i18n.
MIT © 2026 Anton Karpov
Built by Anton Karpov. Website: karpovanton.com
