ProjectsOpen-source developer tool

TabWise

A Chrome extension for organizing tabs, grouping them, and restoring a browsing session.

Type
Chrome extension
Status
Published
Context
Independent

Overview

TabWise is a published Chrome extension for tab grouping, search, and session management. It runs in the browser side panel, keeps data on the device, and is open source. I created it and I maintain it.

People use it to group tabs, save a session, and come back to that set of pages. The Chrome Web Store lists 700+ installs, about 45 weekly active users, and a Featured badge.

Problem

A working set of tabs grows until the browser stops helping. Related pages are scattered, a session from yesterday is gone, and nothing tells you when the pile has gotten too large.

Why I built it

I wanted the tool where the problem already is. A side panel can stay open while someone browses, group tabs, and restore a session without a separate account or a dashboard they have to remember to open.

My role

I design the product, write the extension, and publish it. TabWise is an independent project. I maintain the Chrome Web Store listing, the public site, and the open-source repository.

Technical architecture

The extension is not one React app with shared memory. The side panel and the service worker are separate runtimes and talk through messages.

Side panel (React, TypeScript)
        |  chrome.runtime messages
Manifest V3 service worker
        |  chrome.storage
Sessions, groups, and preferences
        (stored on the device)

Important engineering decisions

  • Manifest V3 and the Side Panel API, so the tool stays beside the tabs it manages.
  • Domain-based grouping as the default. Tabs that share a root domain land in one group, and manual groups cover the cases automation gets wrong.
  • A badge and a notification when a tab limit is reached, so the limit is visible without opening the panel.
  • Light and dark mode, including a theme that follows the system.
  • Local persistence only. There is no account and no server holding browsing history.

Challenges and trade-offs

  • A Manifest V3 service worker wakes for events and then stops. State that has to survive that cycle goes in chrome.storage, not in module memory.
  • Chrome will not restore chrome:// pages and some extension URLs. Session restore has to accept that limit.
  • Keeping activity metadata on the device is still a privacy decision. Nothing leaving the machine is not the same as collecting nothing.

Outcome

  • Shipped on the Chrome Web Store, with the Featured badge.
  • 700+ installs and about 45 weekly active users.
  • Open source, with a public site for the product.

What I learned

The first version was the smaller part of the work. After release, the questions were about discovery, which requests to build, documentation, and whether people trust an extension with their tabs.

Users describe the mess, not the feature. They say they cannot find a page. They do not ask for domain grouping.

Links

React · TypeScript · Manifest V3 · Tailwind CSS