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))