v0.21.0
wasp-lang/waspv0.21.0Feb 13, 2026by github-actions[bot]
AI Summary
Major release introducing significant architectural changes including new Vite configuration approach, React Router 7 migration, Tailwind CSS 4 support, and npm installation method.
Key Highlights
- Requires wasp() plugin in vite.config.ts - user-land Vite configuration
- React Router 7 migration (package renamed from react-router-dom to react-router)
- Tailwind CSS 4 support (v3 dropped)
- Wasp can now be installed through npm
- Removed .wasp/build directory - now uses .wasp/out only
Breaking Changes
- Requires wasp() plugin in vite.config.ts imported from wasp/client/vite
- User projects must provide their own public/manifest.json file
- Tailwind CSS v3 support has been dropped (v4 only)
- Uses Vitest 4 for testing (upgraded from previous version)
- Removed .wasp/build directory - now only uses .wasp/out for generated code
- Wasp SDK is now used as a workspace instead of a dependency
- Uses React Router 7 (imports changed from react-router-dom to react-router)
- No longer generates netlify.toml in .wasp/out/web-app dir
- Build client with npx vite build from project root instead of npm run build inside .wasp/out/web-app
- REACT_APP_API_URL environment variable deprecated - use --custom-server-url CLI option instead
New Features
- User-land Vite configuration - Vite runs in project root, vite.config.ts is source of truth
- wasp() plugin accepts options to customize @vitejs/plugin-react behavior
- Microsoft authentication support (consumer and Entra accounts)
- Wasp can now be installed through npm
- Tailwind CSS v4 support
- Ability to override built-in dependencies (advanced feature)
Full Release Notes
### ⚠️ Breaking Changes Remember to check out the [migration guide](https://wasp.sh/docs/migration-guides/migrate-from-0-20-to-0-21) for step-by-step documentation on how to upgrade. - Wasp now requires the `wasp()` plugin in your `vite.config.ts` file. You can import the plugin from `wasp/client/vite` and add it as the first plugin in your Vite configuration. ([#3652](https://github.com/wasp-lang/wasp/pull/3652)) - User projects must now provide their own `public/manifest.json` file. This file is no longer auto-generated by Wasp. ([#3652](https://github.com/wasp-lang/wasp/pull/3652)) - Wasp now has **Tailwind CSS 4** support, and v3 support has been dropped. ([#3571](https://github.com/wasp-lang/wasp/pull/3571)) - Wasp now uses **Vitest 4** for testing. ([#3580](https://github.com/wasp-lang/wasp/pull/3580)) - Removed the `.wasp/build` directory. Wasp now only uses `.wasp/out` for generated code, both in development and production mode. ([#3540](https://github.com/wasp-lang/wasp/pull/3540)) - The Wasp SDK is now used as a workspace instead of a dependency. This avoids dependency resolution issues and further improves reliability of Wasp projects. ([#3544](https://github.com/wasp-lang/wasp/pull/3544)) - Wasp now uses **React Router 7**. The package has been renamed from `react-router-dom` to `react-router`, so you'll need to update your imports. ([#3490](https://github.com/wasp-lang/wasp/pull/3490), [#3658](https://github.com/wasp-lang/wasp/pull/3658)) - Wasp no longer generates `netlify.toml` in the `.wasp/out/web-app` dir. If you're deploying to Netlify, you'll need to add it manually. ([#3665](https://github.com/wasp-lang/wasp/pull/3665)) - If you are manually deploying the client app, you now build it with `npx vite build` from the project root instead of running `npm run build` inside `.wasp/out/web-app`. The build output is still in `.wasp/out/web-app/build`. ([#3652](https://github.com/wasp-lang/wasp/pull/3652)) - The `REACT_APP_API_URL` environment variable is no longer supported for specifying a custom server URL during deployment. Use the new `--custom-server-url` CLI option instead. ([#3674](https://github.com/wasp-lang/wasp/pull/3674)) ### 🎉 New Features - **User-land Vite configuration**: Wasp runs Vite in your project root and no longer in `.wasp/out/web-app` dir. Your `vite.config.ts` is the source of truth for Vite configuration. ([#3652](https://github.com/wasp-lang/wasp/pull/3652)) - The `wasp()` plugin accepts options to customize the underlying `@vitejs/plugin-react` behavior. ([#3652](https://github.com/wasp-lang/wasp/pull/3652)) - Wasp apps can now offer login with Microsoft (both consumer and Entra accounts) (by @Pipboyguy). ([#3637](https://github.com/wasp-lang/wasp/pull/3637)) - Wasp can now be installed through `npm`. ([#3525](https://github.com/wasp-lang/wasp/pull/3525)) - Wasp now supports Tailwind CSS v4. ([#3571](https://github.com/wasp-lang/wasp/pull/3571)) - Wasp now allows you to override built-in dependencies (advanced, best-effort support only). ([#3643](https://github.com/wasp-lang/wasp/pull/3643)) ### 🐞 Bug fixes - Fixed an issue where if Wasp was installed from npm, `wasp new` would not work correctly. ([#3585](https://github.com/wasp-lang/wasp/pull/3585)) - Fixed an issue where the `Link` component might not update with the values of `search` and `hash` (by @Pipboyguy). ([#3633](https://github.com/wasp-lang/wasp/pull/3633)) - We now support Railway CLI v4.18.1 and greater on `wasp deploy railway`. ([#3667](https://github.com/wasp-lang/wasp/pull/3667)) - Wasp TS spec now validates declaration names. ([#3721](https://github.com/wasp-lang/wasp/pull/3721)) - Fixed Railway deployment failing when the project name contains special characters (e.g., `kitchen-sink-0.20.0`). ([#3673](https://github.com/wasp-lang/wasp/pull/3673)) ### 📖 Documentation - Upgraded the installation instructions throughout the docs to the new npm installation method. ([#3630](https://github.com/wasp-lang/wasp/pull/3630)) - The Wasp docs now include a "Guides" section, with step-by-step tutorials on how to use popular libraries and tools with Wasp. Check them out at https://wasp.sh/docs/guides! ([#3597](https://github.com/wasp-lang/wasp/pull/3597)) ### 🔧 Small improvements - We've unlinked Wasp from any specific Tailwind CSS version, so in the future you can adopt new Tailwind CSS versions at your own pace, independently of Wasp. ([#3571](https://github.com/wasp-lang/wasp/pull/3571)) - `wasp new` now shows a helpful message when the specified template has not been updated to the latest Wasp version. ([#3511](https://github.com/wasp-lang/wasp/pull/3511)) - Running a Wasp in development or production mode won't modify your `package-lock.json` file anymore. ([#3540](https://github.com/wasp-lang/wasp/pull/3540)) - We updated the `basic` starter template to the latest best practices for React 19 + TypeScript apps. This applies to new projects created with `wasp new -t basic`, and older projects are unaffected. ([#3572](https://github.com/wasp-lang/wasp/pull/3572)) - We updated the testing environment to JSDOM 27 for more up-to-date mocking. ([#3580](https://github.com/wasp-lang/wasp/pull/3580)) - We updated our API mocking to MSW 2 for better performance and reliability. ([#3580](https://github.com/wasp-lang/wasp/pull/3580)) - `wasp info` now tells you if the last compilation was done in development or production mode. ([#3612](https://github.com/wasp-lang/wasp/pull/3612)) - `wasp uninstall` now supports the npm installation method. ([#3620](https://github.com/wasp-lang/wasp/pull/3620)) - Added anonymous usage analytics to the npm package installer to help us understand how Wasp is being installed. You can disable this by setting `WASP_TELEMETRY_DISABLE=1`. ([#3619](https://github.com/wasp-lang/wasp/pull/3619)) - Improved error messages when using dependencies that are incompatible with internal Wasp dependencies. ([#3655](https://github.com/wasp-lang/wasp/pull/3655)) - Removed a Rollup version override, since the upstream Rollup issue has been fixed. ([#3654](https://github.com/wasp-lang/wasp/pull/3654)) - The dev compiler file watcher now ignores `.DS_Store` files, preventing unnecessary recompilations on macOS. ([#3734](https://github.com/wasp-lang/wasp/pull/3734)) - Added guardrails to avoid installing Wasp through the installer or npm methods when the other method is already being used. ([#3711](https://github.com/wasp-lang/wasp/pull/3711))