← Back to archive

Repo of the Day

wxt-dev/wxt

Published: Nov 19, 2024

Open repository ↗

Next-gen Web Extension Framework

Summary

WXT is a TypeScript framework for building web extensions, described in its README as "Nuxt for Web Extensions." It bundles project scaffolding, a dev server with hot module replacement, and publishing tooling into a single toolkit. The project is MIT-licensed and primarily written in TypeScript.

What it is useful for

WXT addresses the boilerplate pain of building extensions across browsers. The README states it supports all major browsers and both Manifest V2 and Manifest V3, so a team can write one codebase and target multiple extension stores instead of maintaining separate toolchains per browser.

The framework is useful when you want a modern dev workflow for extension work. Documented capabilities include dev mode with HMR and fast reload, file-based entrypoints, auto-imports, and first-class TypeScript. WXT is frontend-framework agnostic and works with Vue, React, Svelte, or other UI libraries, so you can reuse existing component code in popup or options pages.

It is also useful for teams managing multiple extensions. The module system is designed for reusing code between extensions, automated publishing reduces release friction, and bundle analysis helps track package size, which matters because extension stores enforce size limits.

How engineers can use it

The README documents bootstrapping a new project with three package-manager commands:

npx wxt@latest init
pnpm dlx wxt@latest init
bunx wxt@latest init

After scaffolding, engineers add entrypoints as files in the project, choose between MV2 and MV3, and start the dev server to get HMR during development. The publishing automation handles packaging for browser stores.

A note on scope: the README itself only documents the init bootstrap commands and links out for installation, configuration, examples, and changelog details. Engineers should consult those linked guides for entrypoint conventions, manifest customization, and module authoring. The README does not document minimum supported browser versions or list specific limitations, so those details are not available from the supplied source. The repository is not archived and is actively maintained by @aklinker1 and community contributors.