Co-authored-by: Aaron <aaronklinker1@gmail.com>
4.1 KiB
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 | ✅ | ✅ | ❌ |
| 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 | ✅ | ❌ | ❌ |
-
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. ↩︎ -
Either MV2 or MV3, not both. ↩︎
-
File based. ↩︎
-
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. ↩︎
-
Reloads entire extension. ↩︎
-
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. ↩︎