Table of Contents
1. What is CRXJS?
CRXJS is a Vite plugin that makes building Chrome extensions feel like building a modern web application. It handles the parts of Chrome extension development that are otherwise painful: manifest parsing, content script injection, Hot Module Replacement (HMR) across extension contexts, and the full build pipeline from source to a production-ready .zip.
Without CRXJS, building a Chrome extension with React or Vue means either wrestling with Webpack configs designed for websites, or giving up HMR entirely and reloading the extension manually after every change. CRXJS eliminates that friction.
With 3,500+ GitHub stars and thousands of extensions built on it, CRXJS has become the standard for modern Chrome extension development. We have been building on it since 2021 and contributing to it since 2024.
2. Three and a half years in beta
The Vite plugin for CRXJS first appeared under the @beta npm tag on December 16, 2021. For over three years, developers installed it with npm install @crxjs/vite-plugin@beta and built real production extensions on it - because there was nothing better.
During that beta period, the plugin survived the transition from Vite 3 all the way to Vite 6, adapted to Manifest V3 requirements, and grew a community of developers who depended on it daily. We were among them - building Panel Pro and other client extensions entirely on CRXJS through those beta years.
The beta label never reflected the quality of the plugin - it reflected the reality that open-source projects need time, maintainers, and infrastructure to reach stability. With a new maintainers team (us included) and the work described below, that bar has been cleared.
3. What's new in v2.0.0
The v2.0.0 release is not a single dramatic rewrite. It is the culmination of months of infrastructure work, bug fixes, and community building that made the plugin stable enough to drop the beta label. Here is what is in it:
Revamped README and setup instructions
The documentation has been rewritten to get new developers up and running faster. Clear, step-by-step setup instructions instead of the scattered notes that accumulated over three years of beta development.
npm scaffold template
New projects can now be bootstrapped with a single command: npm create crxjs@latest. The create-crxjs template gives you a working extension skeleton with React, TypeScript, and Manifest V3 configured out of the box.
Enhanced Svelte support
Svelte developers building Chrome extensions now get first-class support, including fixes for platform-sensitive snapshot behavior and HMR reliability that previously caused issues specifically with Svelte projects.
Windows CI and cross-platform stability
The project now runs its full test suite on Windows on every PR, catching platform-specific regressions before they reach developers. This was one of the biggest gaps in the beta period and is now closed.
End-to-end tests on every PR
E2E tests now run automatically on every pull request, catching regressions that unit tests miss. Combined with the Windows CI matrix, this gives the project a level of test coverage it never had during the beta period.
Active maintainers team
A new maintainers team is actively reviewing PRs, triaging issues, and shipping fixes. The project is no longer in maintenance mode.
Discord community
A Discord server is now the central place to get help, share extensions, and stay up to date with CRXJS releases.
New documentation website (coming soon)
A dedicated documentation website is in development. Proper docs have been one of the most requested improvements since the early beta days.
4. How we contributed to this release
We joined the CRXJS maintainers team in 2024. The work that got CRXJS to v2.0.0 stable was not glamorous - it was the kind of infrastructure and reliability work that open-source projects often postpone indefinitely.
Our biggest contribution was making CRXJS work on Windows. Before our work, the CI ran only on Ubuntu, path handling assumed Unix conventions, and Windows developers hit silent failures with no good workaround. We fixed that with PR #1008 - 6,110 lines added across 45 files, covering path normalization, HMR file-system event handling, snapshot scrubbing, and the Windows CI matrix itself.
Beyond Windows, we restructured the entire CI/CD pipeline to test across multiple Vite versions, added end-to-end tests on every PR, set up Discord release notifications, and contributed fixes for UnoCSS/TailwindCSS HMR, TypeScript type resolution, and Vite 7 (rolldown-vite) compatibility.
In total, the Optymized team contributed 27+ pull requests to CRXJS. You can read the full story of the Windows CI work in our earlier post, or browse all contributions on GitHub.
5. Getting started
If you have been building on @crxjs/vite-plugin@beta, now is the time to upgrade to the stable release. Check the official release notes for any breaking changes.
New project
npm create crxjs@latestUpgrade existing project
npm install @crxjs/vite-plugin@latestIf you run into issues or have questions, the CRXJS Discord is the best place to get help. The maintainers team is active.
Building a Chrome extension?
We have been building production Chrome extensions with CRXJS since 2021 and contributing to the project since 2024. If you need a team that knows the stack inside and out, let's talk.
