Chrome extension tools

Manifest V2 to V3 Converter (MV2 to MV3)

Paste a Manifest V2 manifest.json and get the Manifest V3 version, a side-by-side diff of every change, and a checklist of the code changes a manifest can't make for you.

  • Free foreverNo trial, no paywall, no usage limits.
  • No sign-upOpen the page and start. We never ask for an email to use a tool.
  • PrivateEverything runs in your browser. Your input is never uploaded or stored on our servers.
  • Works offlineOnce the page has loaded, the tool keeps working without a connection.

Manifest V2

Paste your current manifest.json, drop the file here or open it.
Clear

Manifest V3

The converted manifest, keeping your key order. Copy it over your old manifest.json.
CopyDownload manifest.json
Paste a Manifest V2 manifest to convert it.

Need an extension built properly? Talk to our team

Quick answer

Manifest V2 extensions no longer run in Chrome: Chrome 138 was the last version that could load them, and the Chrome Web Store removed the remaining ones on August 31, 2026. Paste your MV2 manifest.json into Playxoft's free MV2 to MV3 Converter to get a Manifest V3 manifest with action, a background service worker, host_permissions and object-form resources and policy, plus a side-by-side diff and a checklist of the code changes you still need.

  • Instant MV2 to MV3 conversion
  • Side-by-side diff
  • Host permissions split out
  • Policy made MV3-safe
  • Service worker loader
  • Code change checklist

How to use the MV2 to MV3 Converter

  1. 1Paste your Manifest V2 manifest.json, drop the file on the editor, or click Load example.
  2. 2Copy or download the converted Manifest V3 manifest from the right-hand panel.
  3. 3Read What changed and the side-by-side diff to see every edit and why.
  4. 4If the converter created a service-worker.js loader, download it into your extension folder.
  5. 5Work through the code checklist: items marked for your extension are the ones its manifest says you need.
  6. 6Load the extension unpacked and test it, then check the result in the Manifest V3 validator.

When did Manifest V2 stop working?

Google phased Manifest V2 out over four years. Today no version of Chrome runs it:

DateWhat happened
January 2022Chrome Web Store stops accepting new public or unlisted MV2 extensions
June 2022No new private MV2 extensions
June 3, 2024Phase-out starts: warning banners, Featured badges removed
October 9, 2024MV2 extensions start being disabled in stable Chrome
March 31, 2025MV2 disabled by default on all channels, users can re-enable
July 24, 2025Chrome 138 disables MV2 everywhere; Chrome 139 drops the enterprise policy
August 31, 2026All remaining MV2 extensions removed from the Chrome Web Store

Existing installs on Chrome 138 or earlier keep running, but they can't be updated or reinstalled. Source: Chrome's Manifest V2 support timeline.

What does the converter change in manifest.json?

It applies every manifest change in Chrome's migration guide:

Manifest V2Manifest V3
"manifest_version": 2"manifest_version": 3
browser_action or page_actionaction
background.scripts or page, persistentbackground.service_worker (one file)
Host patterns in permissionshost_permissions
Host patterns in optional_permissionsoptional_host_permissions
web_accessible_resources as file pathsObjects with resources and matches
content_security_policy as a string{ "extension_pages": … }, unsafe sources removed
_execute_browser_action shortcut_execute_action
webRequestBlockingRemoved; use declarativeNetRequest

When your background page ran several scripts, the converter writes a service-worker.js that loads them in order with importScripts(). Paste the result into the Manifest V3 validator, or compare versions in the JSON diff.

What code changes does Manifest V3 need?

The manifest is the easy part. A service worker isn't a background page: it has no DOM, starts when an event arrives and stops when idle. The checklist covers each change, with links to Chrome's guide:

  • Move DOM and window work to an offscreen document.
  • Replace localStorage with chrome.storage, and global variables with stored state.
  • Register every listener at the top level, not inside callbacks.
  • Replace setTimeout and setInterval with chrome.alarms, and XMLHttpRequest with fetch().
  • Rename APIs: chrome.extension.getURL becomes chrome.runtime.getURL, and tabs.executeScript becomes scripting.executeScript.
// Manifest V2
chrome.tabs.executeScript(tabId, { file: "content.js" });

// Manifest V3: add the "scripting" permission
chrome.scripting.executeScript({ target: { tabId }, files: ["content.js"] });

What replaces webRequestBlocking in Manifest V3?

The declarativeNetRequest API. Instead of a listener that decides about each request, you describe rules and Chrome applies them, without your code seeing the traffic. Blocking needs only the declarativeNetRequest permission, which shows "Block content on any page".

[
  {
    "id": 1,
    "priority": 1,
    "action": { "type": "block" },
    "condition": { "urlFilter": "||example.com", "resourceTypes": ["main_frame"] }
  }
]

Only extensions installed by enterprise policy can still use webRequestBlocking in Manifest V3. See replacing blocking web requests.

Can Manifest V3 extensions load remote code?

No. All logic must ship in the package: no scripts from your server or a CDN, no eval() or new Function() on fetched strings. The extension_pages policy may only allow 'self', 'none', 'wasm-unsafe-eval' and, while unpacked, localhost. The converter removes everything else and lists what it took out.

You can still fetch data and configuration, and sandboxed pages may evaluate code. The Chrome Web Store allows remote logic only through the Debugger and User Scripts APIs. Bundle libraries you used to load from a CDN. Once your extension is ready, it needs a privacy policy if it handles user data: the privacy policy generator for Chrome extensions covers the Chrome Web Store's requirements.

Frequently asked questions

The manifest, yes: the converter applies every manifest change in Chrome's migration guide. The code needs manual work, because a service worker has no DOM, stops when idle and uses different APIs. The checklist lists those changes for your extension. Google's own Extension Manifest Converter, a Python command-line tool, is archived.
It already has. By July 24, 2025, Chrome 138 had disabled Manifest V2 extensions for all users, and Chrome 139 removed the enterprise policy that kept them running. The Chrome Web Store removed the remaining Manifest V2 extensions on August 31, 2026.
An extension service worker, declared as background.service_worker with a single JavaScript file. It runs only when events arrive, so keep state in chrome.storage, register listeners at the top level and use chrome.alarms instead of timers. Add type module to use import statements.
The action key and the chrome.action API replace both browser_action and page_action. Rename the manifest key, change chrome.browserAction calls to chrome.action, and use action.enable and action.disable per tab where you used page actions' show and hide.
Usually the file named in background.service_worker is missing or misspelled, or the script throws an error while it starts, often because it touches window or document. Using importScripts in a worker declared with type module also fails. Open the extension's errors on chrome://extensions to see the cause.
No. The conversion, diff and checklist are computed in your browser, and nothing you paste leaves your device.

Last updated by the Playxoft engineering team.

From developers who publish Chrome extensions

Want your extension approved the first time?

Chrome Web Store reviews reject extensions for broad permissions, missing privacy disclosures and remote code. We design, build and publish Manifest V3 extensions that pass review and stay fast. Tell us what yours should do and get a free consultation.

More free tools

See all tools

Chrome Extension Manifest Generator

New

Build a Manifest V3 manifest.json, preview install warnings and download a starter project.

Open tool

Manifest V3 Validator

New

Check a Chrome extension manifest.json: errors by line, MV3 rules, install warnings, review risk.

Open tool

Privacy Policy Generator

New

Draft a privacy policy for your app, website, extension or game, with GDPR and SDK clauses.

Open tool

Privacy Policy Generator for Apps

New

Write the privacy policy the App Store and Google Play require, with your SDKs disclosed.

Open tool

Privacy Policy Generator for Websites

New

Create a website privacy policy covering forms, cookies, analytics, ads and embedded content.

Open tool

Terms and Conditions Generator

New

Draft terms and conditions for your website, app or SaaS: accounts, payments, content and liability.

Open tool