DEV Community

Cover image for How I built a privacy-first Chrome Extension to fix performance (Manifest V3)
SuperchargeBrowser
SuperchargeBrowser

Posted on

How I built a privacy-first Chrome Extension to fix performance (Manifest V3)

How I built a privacy-first Chrome Extension with React & Manifest V3

I’m the kind of person who opens Task Manager just to see what’s eating my CPU & RAM.

I like Chrome, but I’ve always hated how resource-heavy it gets. Even with a reasonable number of tabs, it starts to feel sluggish on laptops and the UI gets jittery surprisingly fast.

For a long time, I used a stack of different extensions to fix this. One for suspending tabs, another for blocking ads, another for privacy. But running 4-5 different background processes just to make the browser efficient felt counter-intuitive.

A messy, bloated solution to fix bloat.

So, I decided to build my own "local-first" toolkit to fix it properly.

It’s called SuperchargeBrowser.

Here is a look at the technical architecture and why I chose this specific stack to build a modern, privacy-focused extension.

The Tech Stack: DX vs. Performance

Building extensions in 2025 doesn't mean writing raw HTML/JS anymore. I wanted the DX of a modern web app, but the output needed to be tiny.

  • React 18: For the Popup and Options UI. It allows for a snappy, state-driven interface that feels native.
  • Vite: Used for the build pipeline. It handles Hot Module Replacement (HMR) during dev, which is a lifesaver for extension development.
  • Tailwind CSS: Keeps the CSS bundle size incredibly small by purging unused styles.
  • TypeScript: Essential for dealing with the complex chrome.* API typings.

The Architecture: Native APIs > Heavy Scripts

My main goal was Efficiency. I didn't want to inject heavy content scripts into every page unless absolutely necessary.

1. Memory Management (The tabs.discard API)

I used the native chrome.tabs.discard API. This tells Chrome: "Freeze this tab's memory, but keep the tab visible in the strip."
It recovers almost 100% of the RAM without breaking the user's flow or session state.

2. Ad Blocking (The Privacy Pivot)

The biggest challenge was ad blocking. The old way (webRequestBlocking) allowed extensions to see every URL you visited. That’s a privacy nightmare.

I migrated fully to Manifest V3 and declarativeNetRequest.
Instead of my extension "watching" your traffic, I bundle a set of rules (based on standard lists like OISD BASIC) and hand them to Chrome. The browser itself handles the blocking engine.

This means the extension technically cannot see your browsing history even if it wanted to. It’s privacy by design.

The Result (v1.0)

I finally shipped v1.0 to the store this week.

It combines intelligent suspension, native ad blocking, and script throttling into one package. It runs 100% locally. No analytics servers, no cloud processing, no data collection. Just a clean, fast browser.

If you’re a developer or just someone who hates bloat, I’d love for you to try it out and give me some feedback on the UI.

This also works on e.g. Brave and Chromium. Because the arhitecture is 100% local (uses storage.local instead of cloudsync), it plays nicely with Brave's built-in shields. Let me know if I should look into compability with other browsers!

Top comments (0)