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
Remote Code Bundling (Google Analytics)
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. ↩︎ ↩︎ ↩︎ ↩︎