
Alain PicardI built a Chrome extension to track where Chrome's RAM actually goes. Chrome uses a lot of memory. We...
I built a Chrome extension to track where Chrome's RAM actually goes.
Chrome uses a lot of memory. We all know this. But when I actually tried to figure out which tabs were eating my RAM, I realized Chrome doesn't make it easy.
Task Manager gives you raw process IDs. chrome://memory-internals is a wall of text. Neither tells you "your 12 active tabs are using ~960 MB and your 2 YouTube tabs are using ~300 MB."
So I built ChromeFlash — a Manifest V3 extension that estimates Chrome's memory by category and gives you tools to reclaim it.
The popup shows a breakdown of Chrome's estimated RAM:
A stacked color bar visualizes the proportions at a glance.
Chrome's extension APIs in Manifest V3 don't expose per-tab memory. The chrome.processes API exists but is limited to dev channel. So these are estimates based on real-world averages — not exact measurements.
If you know a better approach, I'd genuinely love to hear it.
The biggest win. Calling chrome.tabs.discard() on an inactive tab drops it from ~80 MB to ~1 MB. The tab stays in your tab bar, and when you click it, Chrome reloads it.
ChromeFlash lets you:
The auto-suspend runs via chrome.alarms since MV3 service workers can't use setInterval.
// The core of tab suspension
chrome.alarms.create('tab-audit', { periodInMinutes: 5 });
chrome.alarms.onAlarm.addListener(async (alarm) => {
if (alarm.name === 'tab-audit') {
const tabs = await chrome.tabs.query({});
for (const tab of tabs) {
if (shouldDiscard(tab)) {
await chrome.tabs.discard(tab.id);
}
}
}
});
Four presets that configure tab suspension + Chrome settings in one click:
| Profile | Suspend | Services Off | Est. RAM Saved |
|---|---|---|---|
| Gaming | 1 min | 5 (DNS, spell, translate, autofill, search) | ~500–2000 MB |
| Productivity | 15 min | 0 | ~200–600 MB |
| Battery Saver | 5 min | 4 (DNS, spell, translate, search) | ~400–1500 MB |
| Privacy | 30 min | 7 (+ Topics, FLEDGE, Do Not Track ON) | ~150–400 MB |
Each profile shows the exact numbers and what changes — no vague "optimizes your browser" marketing.
Chrome exposes several settings through the chrome.privacy API that most users never touch:
// Toggle DNS prefetching
chrome.privacy.network.networkPredictionEnabled.set({ value: false });
// Disable cloud spell check
chrome.privacy.services.spellingServiceEnabled.set({ value: false });
// Disable Topics API (ad tracking)
chrome.privacy.websites.topicsEnabled.set({ value: false });
// Disable FLEDGE / Protected Audiences
chrome.privacy.websites.fledgeEnabled.set({ value: false });
The extension exposes 8 of these as toggle switches. Disabling background services like spell check and translation reduces both network calls and CPU usage — not dramatically, but it adds up.
Chrome flags (chrome://flags) can meaningfully improve performance, but extensions can't modify them programmatically — Chrome blocks this for security reasons.
So ChromeFlash includes a curated database of 21 performance-relevant flags:
Each flag shows a risk level, impact rating, and a button that opens it directly in chrome://flags/#flag-name.
ChromeFlash/
manifest.json
src/
background/service-worker.js # Alarms, tab audit, memory pressure
modules/
tab-manager.js # Suspend, discard, duplicates
memory-optimizer.js # Chrome RAM breakdown
network-optimizer.js # DNS prefetch toggle
privacy-optimizer.js # 8 privacy setting toggles
performance-monitor.js # CPU/memory stats, score
profiles.js # 4 profiles with detailed stats
flags-database.js # 21 curated flags
settings.js / storage.js # Persistence
popup/ # Main UI
pages/ # Dashboard + Flags Guide
No build step. No framework. No bundler. ES modules loaded natively by Chrome. The entire extension is under 50 KB.
MV3 service workers are stateless. Every alarm fires into a fresh context. You can't store state in module-level variables — it has to go in chrome.storage. This tripped me up early.
chrome.tabs.discard() is underrated. It's the single highest-impact thing an extension can do for memory. 85–92% reduction per tab with zero user friction — the tab just reloads when you click it.
chrome.privacy is powerful but underdiscovered. Most developers don't know you can programmatically toggle DNS prefetching, Topics API, or FLEDGE from an extension. The API surface is small but useful.
Flags can't be automated. I spent time looking for workarounds before accepting that chrome://flags is intentionally walled off. The guide approach works well enough.
ChromeFlash is free, open source, and collects zero data. No analytics, no remote servers, no tracking. Everything stays in chrome.storage.local