Fixture-driven MVP, built from the template library

Ship MV2 to MV3 migrations with proof, not guesswork.

mv3migrate scans a Chrome extension, rewrites the common MV2 patterns, flags the dangerous ones, and produces a report you can hand to a developer or use to keep moving locally.

Run locallySee validationGitHub
manifest rewriteJS codemodsrisk scannerHTML report

mv3migrate / demo output

$ node ./src/cli.js ./fixtures/webrequest-blocker --out ./out
✓ manifest_version 2 → 3
✓ browser_action → action
✓ background.scripts → service_worker
! webRequestBlocking needs declarativeNetRequest
✓ report written to mv3migrate-report.html

Manifest

Auto

Codemods

4+

Warnings

Explicit

Report

HTML

What it does not do

It does not pretend every MV2 extension is a safe auto-convert. When migration is ambiguous, it leaves a warning instead of hiding the risk.

Local validation

The current MVP is already testable on real sample extensions.

mv3migrate is not a promise of full automation. It is a narrow tool that is useful exactly where MV2 to MV3 migration usually slows down: common manifest edits, code-level API swaps, and transparent warnings for the hard parts.

Real fixtures

Validated against simple-popup, content-script-injector, and webrequest-blocker samples.

Automated tests

Node test coverage for manifest conversion, source scanning, codemod rewrites, and CLI output.

Clear warnings

Blocking webRequest listeners stay visible as critical findings instead of being hidden by a false success.

Built for migration work

Everything the first migration pass needs.

The product is intentionally narrow: automate the common parts, surface the risky parts, and give the user a report they can trust.

1

Manifest conversion

Moves the obvious MV2 fields to MV3: browser_action, page_action, background scripts, host permissions, WAR, and CSP.

2

JS rewrite

Updates common API calls like browserAction, pageAction, executeScript, insertCSS, and getBackgroundPage.

3

Risk scanner

Flags webRequestBlocking, eval, and non-trivial patterns that should not be silently “fixed”.

4

Readable output

Writes a JSON summary and an HTML report so a migration is easy to inspect, share, and review.

5

Fixture-first validation

Built around real sample extensions, not a toy input. The MVP already runs through three fixture classes.

6

Local-first workflow

No SaaS dependency required to get value. Run it on a repo, inspect the diff, and keep moving.

How it works

A migration flow you can verify step by step.

Every output can be inspected locally. No hidden service, no opaque upload, no false claim that the hard parts are “done”.

1

Scan the extension

Walk the tree, find manifest.json, detect MV2-only APIs, and map risky files before any rewrite happens.

2

Rewrite the obvious parts

Convert the manifest, replace the straightforward API calls, and keep the rest of the code untouched.

3

Review the report

Open the HTML report, inspect the critical items, and decide whether the output is ready or needs manual work.

Install

Start from a folder, not a blank page.

The CLI is local-first. Point it at a repo, get a transformed output directory, and inspect the report before you decide what to keep or change.

$ node ./src/cli.js ./my-extension --out ./my-extension-mv3
✓ manifest.json converted
✓ common JS API calls rewritten
! risk scan attached as HTML report
✓ output ready for load-unpacked validation

FAQ

The questions that decide whether this is worth using.

Who is this for?▾

Developers and maintainers who already have MV2 code and need a first-pass migration path instead of a blank template.

Does it solve every migration automatically?▾

No. It automates the common shape of the work and explicitly leaves ambiguous cases as warnings.

Why not just use the official converter?▾

The official tools help, but they do not complete the whole migration. This product is focused on the missing middle.

What can I verify locally?▾

Run the CLI on fixtures, inspect the transformed output, and confirm the report matches the files you expect to change.

mv3migrate

Chrome MV2 to MV3 migration CLI. It rewrites the common parts, flags the dangerous parts, and keeps the output readable enough for a real review.

GitHubmv3migrate@elolin.com

© 2026 mv3migrate