$ cd ~/posts
product4 min read · Jul 8, 2026

TabRack: A Privacy-First Tab Manager Where the Network Is Opt-In

by Ashish Choubey

🔗 Live: tabrack.com — the extension this post describes.

I open too many tabs. Most days I have three windows of things I was "about to read," a dozen half-finished purchases, and a couple of docs I'm afraid to close. Every tab manager I tried fixed that the same way: ship the full list of everything you have open to somebody else's server so it can sort it for you.

TabRack is my answer to the same problem with the opposite default. It's a browser extension that helps you triage, file, and revive tabs — and by design, the core of it never talks to the internet at all. This is what it is and, in broad strokes, what went into building it.


What it actually is

TabRack is a Chromium extension (Chrome, Edge, Brave, Arc) for people whose tab bar has gotten out of hand. The everyday loop is: it shows you the tabs you've gone idle on, ranked by staleness, and lets you close a whole batch with one undo. Around that sit the features you reach for once you trust it:

  • Views — a Tree that shows which tab opened which (close a whole branch at once), a Browser view of your windows and groups, and a drag-to-reorder Grid.
  • Folders — live auto-grouping into Chrome tab groups by rules, plus saved folder trees you can drag tabs into so they survive closing.
  • Sessions & archive — save and restore whole windows; search a history of what you've closed.
  • Tab sleep — suspend heavy background tabs to win back memory; they wake on click.
  • Site blocker & focus mode — block distracting sites on a schedule, or stash the noise and bring it back when you're done.
  • Notes & screen time — jot a note on any URL that greets you next time you land there, and see per-domain time totals for the day.

None of that needs an account. You install it and it works, entirely on your machine.

The rule that shaped everything: local-first

The decision that drove the whole design was that your tab data never leaves your device for the core product. Titles, URLs, notes, sessions, folders, the archive — all of it lives in the browser's own storage. There's no sign-up wall, no telemetry on by default, and crucially no <all_urls> host permission, so the extension can't read the pages you visit.

That constraint is visible right down in the manifest. The permissions are the specific ones tab management needs — tabs, storage, tabGroups, bookmarks, declarativeNetRequest for the blocker — and nothing that would let it snoop. The only network host it's even allowed to reach is my own backend, and only the optional features touch it:

json
"host_permissions": ["https://api.tabrack.com/*"]

Everything else being local isn't a limitation I worked around — it's the feature.

The optional layer: AI, sync, and payments

On top of the local core, a free account unlocks the networked features — clearly labelled, and off until you ask for them:

  • Built-in AI. You can type a plain-language command ("group my shopping tabs") or ask for a page summary. When you do, the relevant tab titles/URLs (or that one page's text, for a summary) go to my backend, which relays the request to an AI provider. The key detail: the API key lives only on the server — the extension never ships one. That backend runs on the same self-hosted Raspberry Pi I've written about, alongside my other little services.
  • Account sync. Your settings, sessions, notes, and folders can sync through your browser's own sync, or as a single document on the managed backend if you want it across machines.
  • Payments. There's a Pro tier — a one-time payment through Razorpay, no auto-renewal — that raises the AI allowance and unlocks unlimited sync. I never see card details; that's Razorpay's job.

To make all of this switchable, I built a feature-gating layer up front — entitlements that are paywall-ready with a single flag — so the extension shipped free while the billing path sat wired but dormant behind it.

The part nobody sees

A fair amount of the work was plumbing that never shows up in a screenshot. It's a Manifest V3 extension, which means the background logic is a service worker that can't hold timers — so anything periodic (idle checks, auto-sleep) rides on Chrome's alarms instead. The build is esbuild into a dist/ folder, with an e2e suite in Playwright driving a real browser.

The piece I'm happiest with is that the AI is driven by a single schema. Every action the AI can take and every setting it can change is declared once, and the natural-language parser and the prompt are generated from it. The rule I hold myself to: any new feature that acts on tabs has to be wired into that schema, so it's automatically drivable in plain language rather than bolted on afterward.

If you want the full picture — features, privacy policy, pricing — it's all at tabrack.com. It's the kind of project I like most: small enough to own end to end, opinionated about privacy, and shipped.


← all posts