<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>PlugThis Blog</title>
    <link>https://plugthis.ai/blog</link>
    <atom:link href="https://plugthis.ai/blog/rss.xml" rel="self" type="application/rss+xml" />
    <description>Tutorials, fundamentals, deep dives, and opinion on building Chrome extensions with AI.</description>
    <language>en-us</language>
    <lastBuildDate>Fri, 15 May 2026 08:10:26 GMT</lastBuildDate>
    <item>
      <title>Manifest V3 Explained: What Changed and Why It Matters</title>
      <link>https://plugthis.ai/blog/manifest-v3-explained</link>
      <guid isPermaLink="true">https://plugthis.ai/blog/manifest-v3-explained</guid>
      <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
      <description>Manifest V3 is the current Chrome extension standard. Here&apos;s what changed from V2, why Google made the switch, and what it means for extensions you build today.</description>
      <author>Udaya</author>
      <content:encoded><![CDATA[
Every Chrome extension built today uses Manifest V3. If you read tutorials or documentation older than 2024, you'll see references to Manifest V2 — and most of those examples won't run anymore. This post explains what Manifest V3 is, what changed from V2, and why the change matters for extensions you build today.

## What is a manifest file?

Every Chrome extension has a `manifest.json` file at its root. The manifest tells Chrome:

- The extension's name and version
- What permissions it requires
- Which scripts run, where, and when
- What UI elements (popup, options page, etc.) the extension provides

The manifest is the contract between your extension and Chrome. The format version of that contract is the "manifest version."

## What changed in V3

Three changes matter more than the rest:

**1. Service workers replaced background pages.** In V2, an extension could keep a persistent background page running indefinitely. In V3, background logic runs in service workers — which Chrome can shut down when idle and wake up when needed. The practical effect: extensions consume far less memory.

**2. `chrome.scripting` replaced `chrome.tabs.executeScript`.** Programmatic content script injection got a more capable API. You can inject CSS, JavaScript, or both, scoped to specific frames, with cleaner error handling.

**3. Stricter content security policy.** Remote code execution is largely banned. Extensions can no longer load JavaScript from external servers and run it. This closes a major attack vector (and breaks some extension patterns, especially those that used to fetch and eval third-party scripts).

## Why Google made the switch

Two reasons:

**Security.** V2's permissive model meant a single compromised extension could exfiltrate huge amounts of user data. V3's stricter model significantly reduces what a malicious or compromised extension can do.

**Performance.** Persistent background pages were a major source of Chrome memory bloat. Service workers reduce overall memory consumption across the browser.

Critics argue V3 also conveniently makes ad-blockers less powerful (the `declarativeNetRequest` API replaces `webRequest.blocking`, which had been the foundation of uBlock Origin's matching engine). Google's official position is that V3 is about security; the ad-blocking implication is a side effect, not a goal. Reasonable people disagree.

## What this means for extensions you build today

If you're using [PlugThis](/) or any other current builder, you're building V3 extensions by default. The output is Manifest V3 compliant, uses service workers, and respects the new CSP rules. You don't have to think about manifest versions — the tooling handles it.

The only place you might run into V2 references is in old tutorials. If you find a tutorial that talks about "persistent background pages" or "browser_action," it's outdated. Look for content from 2024 onward.

## When will V3 change again?

There's no announced V4. Chrome typically holds extension API contracts stable for years between major versions. V3 was announced in 2018 and only became mandatory in 2024. If V4 ever arrives, expect a similar multi-year deprecation period for V3.

In the meantime, V3 is the foundation. Every extension [in our catalog](/extensions) uses it. Every [competitor we've rebuilt](/alternatives) uses it. The format isn't going anywhere soon.
]]></content:encoded>
    </item>
  </channel>
</rss>