On this page
Overview
WXT is a framework for Web Extension development. It supports Manifest V2 and V3, multiple browsers, TypeScript, file-based entrypoints, HMR, and automatic manifest generation while remaining frontend-framework agnostic for React, Vue, Svelte, and other UI stacks.
Features and best fit
Based on official documentation; not hands-on tested · Content checked:
Key features
Generate manifests and bundles from project entrypoints
Background scripts, content scripts, popups, and other surfaces are organized as entrypoints, while wxt.config.ts and entrypoint metadata contribute to generated manifests and browser-targeted bundles under .output.
Best fit
Before adoption
WXT v0.21.4 requires Node.js 22 or newer
The v0.21.4 package metadata requires Node.js 22+, or Bun 1.2.0+ when Bun is used. Align local and CI runtimes before adopting it in an existing project.
Sources: [5]
Browser-specific permissions still require explicit handling
WXT can help translate manifest shapes between MV2 and MV3, but browser permission support differs. The official guide recommends returning only the permissions required by each target browser.
Sources: [4]
Official sources
- [1]wxt-dev/wxt repository(2026-09-30)
- [2]WXT README(2026-09-30)
- [3]WXT installation guide(2026-09-30)
- [4]WXT manifest configuration guide(2026-09-30)
- [5]WXT v0.21.4 package metadata(2026-09-30)
- [6]WXT v0.21.4 release(2026-09-30)
- [7]WXT MIT license(2026-09-30)
Supplemental curator note
WXT is particularly useful when a team needs to keep browser-extension entrypoints and manifest differences manageable across multiple targets. Permission compatibility still needs target-specific review rather than relying entirely on automatic conversion.
Try it in 3 steps
- 1
Bootstrap a WXT project
Run the official init command and choose a template and package manager from the prompts.
npx wxt@latest init - 2
Start development mode
Move into the generated project directory and run the dev script to open a browser with the extension installed.
npm run dev - 3
Create a production build
Generate the target-browser manifest and bundle under .output, then inspect permissions and entrypoints before packaging.
npm run build
Growth
Growth trends · Last 30 days
10,555 Stars
Trend data is still being collected.
Development activity
Last 90 days · weekly
- Commits (last 30 days)
- 5
- Open PRs
- 57
Development activity is still being collected.
Built with
Categories and tags
Categories
GitHub data
GitHub dataView detailed GitHub data
GitHub Topics
- build-tool
- dev-server
- hmr
- wxt
- chrome-extensions
- Stars
- 10,555
- Forks
- 569
- Watchers
- 25
- Open issues
- 166
- Contributors
- 282
- Owner type
- Organization
- Primary language
- TypeScript
- License
- MIT
- Repository last updated
- Sep 29, 2026
Related information
Write a related articleShare a guide or use case for this OSS in Markdown. Articles are published after administrator approval.
Explore next
- React Native126,751 Stars
2 shared tag(s) · 2 shared category(s)
native mobile UI with React, stable 0.87.1, and a framework-first path
C++ - Electron123,297 Stars
2 shared tag(s) · 2 shared category(s)
bundle Chromium and Node.js to build desktop applications for three major operating systems with HTML, CSS, and JavaScript
C++ - Tauri111,467 Stars
2 shared tag(s) · 2 shared category(s)
Combine a web frontend and Rust native layer into desktop and mobile apps using system WebViews
Rust - Angular101,027 Stars
2 shared tag(s) · 1 shared category(s) · Same language
Unify components, signals/DI, routing, forms, SSR/hydration, and CLI tooling in one TypeScript web application platform
TypeScript - Tailwind CSS97,733 Stars
2 shared tag(s) · 1 shared category(s) · Same language
Compose utility classes in HTML and components and generate the required CSS at build time
TypeScript - Playwright96,842 Stars
2 shared tag(s) · 1 shared category(s) · Same language
Drive Chromium, Firefox, and WebKit through one API and test runner for E2E, scripting, and agent browser automation
TypeScript
Report incorrect information
Tell us if any listing information is incorrect or outdated.