scalpel@labs: ~/glossary/native-tab-discard.mdx5 sections

Native Tab Discard: Why It Beats a Placeholder Page

Native tab discard is Chrome's own way to suspend a tab, exposed through `chrome.tabs.discard()`. It frees the page's memory while keeping the real URL in the tab, so uninstalling or disabling the extension can never strand or lose a tab.

extension: Scalpel Tab Suspenderupdated: 2026-08-14read_time: 2 min
less native-tab-discard.mdx

Why it matters

There's a critical difference between how Scalpel suspends tabs and how some other extensions used to do it. The Great Suspender, which was popular for years, would rewrite every tab's URL to point to an internal chrome-extension://... page. When that extension was updated or removed, every tab was orphaned; users lost access to their own pages.

Scalpel uses Chrome's native discard API instead. The tab's real URL stays in the tab bar. If you uninstall Scalpel, your tabs are still yours.

How it works

Chrome's chrome.tabs.discard() API does exactly what you'd hope: it tells Chrome to tear down the tab's renderer process (freeing its memory) while keeping the tab entry itself. The tab holds its URL, title, favicon, and scroll position. Nothing is rewritten or redirected.

When you click the tab again, Chrome reloads the real page from the network, using the URL that was there all along. The user sees a brief reload flash; the page is fresh.

This is why unsaved form input is a risk (the reload loses typed text) and why Scalpel has an exclusion for that. But the safety benefit is clear: your tab can't be orphaned by an extension update, unlike placeholder-based systems.

What does not matter

Native discard doesn't mean Scalpel is using some secret API. chrome.tabs.discard() is fully documented and available to any extension. The "native" part just means it's built into Chrome, not invented by the extension.

You don't see any visual difference between a native discard and a placeholder-based suspension. Both show a reloaded page. The difference is invisible but critical: one is always yours, the other depends on the extension staying installed.

The memory saving is exactly the same whether the extension uses native discard or a placeholder. Native discard isn't slower or faster; it's just safer.

Code example

Here's how Scalpel discards a tab using the native API:

// Suspend a single tab
await chrome.tabs.discard(tabId);

// Suspend multiple tabs
const tabIds = [10, 11, 12];
for (const id of tabIds) {
  await chrome.tabs.discard(id);
}

// Check if a tab is already discarded
const tab = await chrome.tabs.get(tabId);
if (tab.discarded) {
  console.log(`Tab is suspended and its memory is freed`);
}

The tab object's discarded boolean tells you whether the tab is currently suspended.

How Scalpel shows it

You won't see this mechanism directly in Scalpel's interface. It's an internal choice. What you'll notice is that your tabs stay clickable and have their original URLs in the tab bar, even when they're suspended.

You can verify this yourself: open Chrome's Task Manager (Shift+Esc), suspend a tab with Scalpel, and watch the tab's memory drop to zero. The tab is still there, still has its title and URL, and still reloads when you click it. That's native discard at work.

The tabs still appear in Chrome's History and can be restored by hand if they're closed by accident. With a placeholder-based approach, they'd be history entries pointing to an internal Chrome extension URL, not the real page.

Sources