DEV Community

taewoo
taewoo

Posted on

I built Tabby, a privacy-first Chrome extension to tame tab chaos

Disclosure: this is a promotional post. Tabby is my own extension. It's free, with an optional Pro tier coming later.

The problem

You know the feeling: 60+ tabs open, half from a bug you fixed last week, half from a project you'll "get back to". You don't close them because closing feels like losing them.

I wanted a tool that makes closing tabs feel safe. So I built Tabby.

What it does

🗂 Spaces: switch projects, not windows

Each space keeps its own open tabs. Switch spaces and your window swaps to that project's tabs, while the old ones are saved automatically. Pinned tabs (mail, chat) stay in every space, and tabs reopen unloaded, so even a 100-tab project switches instantly.

⌨️ Tidy up in a minute

Go through your open tabs one at a time, oldest first:

Key Action
K Keep
X Close
S Save to Inbox
Z Undo

Duplicates and links you've already saved are flagged while you decide.

🔍 ⌘K / Ctrl+K search

One search box for saved links, collections and open tabs. It stays fast with thousands of links.

✂️ Smart titles

fix: retry webhooks · Pull Request #4821 · GitHub becomes fix: retry webhooks · #4821. Small thing, but your saved lists become readable.

🛟 Never lose a tab

Automatic session backups, undo on every delete, a restorable Trash, and export to JSON or bookmarks anytime.

Privacy by design

No account. No tracking. No ads. Your tabs and links are stored only on your device and never sent anywhere.

Coming from Toby or OneTab?

Tabby imports Toby JSON exports, OneTab lists and browser bookmarks from Settings.

How it's built

Try it

👉 Tabby on the Chrome Web Store

It's v1.0, my first published extension, so feedback, bug reports and feature ideas are very welcome in the comments.

Top comments (2)

Collapse
 
launchgatecheck profile image
Launch Gate •

The "Never lose a tab" promise makes the space-switch interruption case worth testing: start with distinct tabs in space A and B, switch A to B, then restart the browser at different points between saving A, closing its tabs, and restoring B.

After recovery, I'd compare the saved spaces and live window with the original URLs, including duplicate URLs and pinned tabs. A backup that exists but already contains a half-switched window wouldn't establish recovery. I haven't run Tabby; this is a fixture suggested by the automatic-save/window-swap design, not a bug report. If only the last completed backup can be restored, showing its time would give "safe to close" a clearer boundary.

Collapse
 
taewoo profile image
taewoo •

Thanks, this was a great fixture. I built it as an automated test and it found a real bug.

The test: space A has two tabs on the same URL, one other tab and a pinned tab; space B has one tab. It switches A to B and quits the browser at each of 5 points:

  • after the window is detached from A
  • after A is saved
  • partway through opening B's tabs
  • after B's tabs open, before A's close
  • after A's tabs close, before the window is attached to B

Then it restarts with the last session restored. It checks the saved spaces against the original URLs (duplicates included), checks that the pinned tab is still open and pinned, and checks that the window still holds all of A or all of B.

What it found: quitting mid-swap left a window with tabs from both spaces. On restart, Tabby matched that window to A because they shared most URLs. Autosave then wrote B's tab into A. Nothing was lost, but A was saved with a tab that wasn't its own, which is the half-switched backup you described.

The fix: Tabby now records a switch in progress in storage that survives a restart, and clears the record when the switch finishes. If the record is still there at startup, those two spaces only re-attach to a window whose URLs match theirs exactly. A half-switched window stays open but detached, so it never overwrites either space. All 5 quit points pass now, and the test runs with the rest of the suite. The fix will be in the next store update.

One limit: Chrome writes its session every few seconds, so a tab opened just before a quit may not come back as an open tab. It's still saved in its space.

I haven't built your suggestion to show the time of the last completed save yet, but I agree it would make "safe to close" clearer.