Skip to content

Compare ​

Lets compare the features of WXT vs Plasmo (another framework) and CRXJS (a bundler plugin).

Overview ​

  • ✅ - Full support
  • 🟡 - Partial support
  • ❌ - No support
FeaturesWXTPlasmoCRXJS
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✅✅❌
Unlisted HTML Pages✅✅✅
Unlisted Scripts✅❌❌
ESM Content Scripts❌ [10]❌✅
Dev Mode
.env Files✅✅✅
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✅❌❌

  1. Appears to be in maintenance mode with little to no maintainers nor feature development happening and (see wxt-dev/wxt#1404 (comment)) ↩︎

  2. See crxjs/chrome-extension-tools#974 ↩︎

  3. As of v2.0.0-beta.23, but v2 stable hasn't been released yet. ↩︎

  4. Either MV2 or MV3, not both. ↩︎ ↩︎

  5. File based. ↩︎ ↩︎

  6. Entrypoint options all configured in manifest.json. ↩︎

  7. Only React, Vue, and Svelte. ↩︎

  8. .html, .ts, .tsx. ↩︎

  9. .html, .ts, .tsx, .vue, .svelte. ↩︎

  10. WIP, moving very slowly. Follow wxt-dev/wxt#357 for updates. ↩︎

  11. React only. ↩︎

  12. Reloads entire extension. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  13. ESM-style loaders run asynchronously. ↩︎

  14. There is no built-in wrapper around this API. However, you can still access the standard APIs via chrome/browser globals or use any 3rd party NPM package. ↩︎ ↩︎ ↩︎ ↩︎