extension-migrationlisted
Install: claude install-skill andrewr303/claude-codex-plugin-lab
# Extension Migration (MV2 → MV3)
Official migration guide: https://developer.chrome.com/docs/extensions/develop/migrate
> **Consider framework adoption**: When migrating MV2→MV3, consider adopting [WXT](https://wxt.dev/) or [Plasmo](https://docs.plasmo.com/) for built-in MV3 support, auto-manifest generation, and modern tooling.
## Workflow Overview
1. Audit existing MV2 extension (APIs, permissions, background scripts)
2. Update `manifest_version` to 3
3. Convert background page → service worker
4. Replace deprecated APIs (see Quick Reference below)
5. Update permissions, CSP, web_accessible_resources format
6. Migrate webRequest → declarativeNetRequest (if blocking)
7. Bundle any remote code locally
8. Test all functionality across Chrome versions
9. Submit to Chrome Web Store
## Key Breaking Changes
| Area | MV2 | MV3 |
|------|-----|-----|
| Background | `background.scripts/page` | `background.service_worker` |
| Browser action | `browser_action` / `page_action` | `action` |
| Network blocking | `webRequest` (blocking) | `declarativeNetRequest` |
| Script injection | `tabs.executeScript(string)` | `scripting.executeScript({func/files})` |
| Remote code | CDN scripts allowed | Must bundle locally |
| CSP | String value | Object `{extension_pages: "..."}` |
| Web accessible | `string[]` | `object[]` with `matches` field |
| Host permissions | In `permissions` array | Separate `host_permissions` array |
| URL helper | `chrome.extension.getURL` | `chrome.runtime.getURL