Compare 
Lets compare the features of WXT vs Plasmo (another framework) and CRXJS (a bundler plugin).
Overview 
- ✅ - Full support
- 🟡 - Partial support
- ❌ - No support
| Features | WXT | Plasmo | CRXJS | 
|---|---|---|---|
| Maintained | ✅ | 🟡 [1] | 🟡 [2] | 
| Supports all browsers | ✅ | ✅ | 🟡 [3] | 
| MV2 Support | ✅ | ✅ | 🟡 [4] | 
| MV3 Support | ✅ | ✅ | 🟡 [4] | 
| Create Extension ZIPs | ✅ | ✅ | ❌ | 
| Create Firefox Sources ZIP | ✅ | ❌ | ❌ | 
| First-class TypeScript support | ✅ | ✅ | ✅ | 
| Entrypoint discovery | ✅ [5] | ✅ [5] | ❌ | 
| Inline entrypoint config | ✅ | ✅ | ❌ [6] | 
| Auto-imports | ✅ | ❌ | ❌ | 
| Reusable module system | ✅ | ❌ | ❌ | 
| Supports all frontend frameworks | ✅ | 🟡 [7] | ✅ | 
| Framework specific entrypoints (like Popup.tsx) | 🟡 [8] | ✅ [9] | ❌ | 
| Automated publishing | ✅ | ✅ | ❌ | 
| Remote Code Bundling (Google Analytics) | ✅ | ✅ | ❌ | 
| Unlisted HTML Pages | ✅ | ✅ | ✅ | 
| Unlisted Scripts | ✅ | ❌ | ❌ | 
| ESM Content Scripts | ❌ [10] | ❌ | ✅ | 
| Dev Mode | |||
| .envFiles | ✅ | ✅ | ✅ | 
| Opens browser with extension installed | ✅ | ❌ | ❌ | 
| HMR for UIs | ✅ | 🟡 [11] | ✅ | 
| Reload HTML Files on Change | ✅ | 🟡 [12] | ✅ | 
| Reload Content Scripts on Change | ✅ | 🟡 [12] | ✅ | 
| Reload Background on Change | 🟡 [12] | 🟡 [12] | 🟡 [12] | 
| Respects Content Script run_at | ✅ | ✅ | ❌ [13] | 
| Built-in Wrappers | |||
| Storage | ✅ | ✅ | ❌ [14] | 
| Messaging | ❌ [14] | ✅ | ❌ [14] | 
| Content Script UI | ✅ | ✅ | ❌ [14] | 
| I18n | ✅ | ❌ | ❌ | 
- Appears to be in maintenance mode with little to no maintainers nor feature development happening and (see wxt-dev/wxt#1404 (comment)) ↩︎ 
- As of - v2.0.0-beta.23, but v2 stable hasn't been released yet. ↩︎
- Entrypoint options all configured in - manifest.json. ↩︎
- Only React, Vue, and Svelte. ↩︎ 
- .html,- .ts,- .tsx. ↩︎
- .html,- .ts,- .tsx,- .vue,- .svelte. ↩︎
- WIP, moving very slowly. Follow wxt-dev/wxt#357 for updates. ↩︎ 
- React only. ↩︎ 
- ESM-style loaders run asynchronously. ↩︎ 
- There is no built-in wrapper around this API. However, you can still access the standard APIs via - chrome/- browserglobals or use any 3rd party NPM package. ↩︎ ↩︎ ↩︎ ↩︎