🌟 Highlights (since alpha.0)
- Fully supporting rolldown and rolldown-vite
- Even smaller: install size is down to 9MB with ongoing efforts to reduce more
- Runtime performance can get close to 98% of native performances (tested with standard preset on Bun)
- We have bunch of fresh examples
- Removed lots of old hacks, fixed stability issues
- Vite plugins can extend Nitro
Join Nitro Discord Server if you have feedbacks and ideas!
🚀 Enhancements
- vite: Support
?assetsimport (#3662) - vercel: Support Bun runtime (#3678)
- vite: HMR client when server routes change (#3700)
- vercel: Add back node handler format under a flag (#3709)
- vite: Interoperability between nitro modules and vite plugins (#3712)
- Support
nodehandler format (#3717) routesconfig (#3718)- Opt-in filesystem routing using
serverDirconfig (#3719) - vite:
rolldown-vitesupport (#3723) - routing: Use
baseURLconfig (#3724) - Export
defineConfigand runtime utils from"nitro"(#3726) - Server fetch utils (#3731)
- vite: Load dot env in preview mode (#3735)
- Improve build info loading (#3743)
- vercel: Switch to node compat if one handler format is node (#3749)
- Automatically detect deno and bun as preset (#3750)
nitro/tsconfigpreset (#3754)- core: Autoload project
tsconfig.jsonfor aliases and JSX options (#3757) - ⚠️ Migrate to
oxc-transformandoxc-minify(#3763) renderer.staticconfig (#3765)- Websocket Support (#3766)
- cloudflare: Enable
nodeCompatanddeployConfigby default (#3768) - Auto detect builder (making rollup optional) (#3769)
- Improve sourcemap support (disabled by default) (2753e1cf)
- cloudflare: Enable
no_bundleby default (6d7c4b0f) - cli: Support
nitro build --builder(07b725f5)
🔥 Performance
- Upgrade hookable (#3684)
- app: Tree-shake extra routing logic when not needed (#3685)
- Reduce error handler bundle impact (af7f1565)
- app: Tree-shake extra condition (74134d25)
- standard: Only accept standard
req(6420d784) - app: Directly passthrough
req(13f66ac2) - Tree-shake plugins and hooks when not used (#3698)
- Reduce
nitroApp.fetch()overhead (#3699)
🩹 Fixes
- vite: Skip pre nitro middleware if path has extension (#3649)
- cloudflare: Properly resolve dev plugin (3afbc402)
- vite: Remove
noExternal: truefrom each service build (#3665) - build: Avoid replacing unexpected words (#3671)
- cloudflare: Add
cloudflare:workersalias in dev (#3663) - Support
autoimportstypeFrom property for declaration gen (#3670) - vite: Call
rollup:beforehook in dev mode for compatibility (2d199369) - vite: Consistently call
rollup:before. after resolving config (aec6dd26) - Add hookable sub-dep to
runtimeDependencies(5349f852) - rolldown: Pass
minifyoption (264ba29b) - vite: Always enable
noExternalfor prod (cdeb667d) - Automatically add
bunanddenoexport conditions (#3695) - vercel: Move bun detection to earlier stage (b34f0492)
- vite: Disable cors in dev (#3692)
- app: Unwrap
_requestwithout in operator (7fcd1568) - Handle sync callHook value (d3b720f0)
- Improve internal dependency resolution (#3702)
- node, bun, deno: Add back unhandled error/rejection traps (#3710)
- vite: Improvements on #3712 (#3712)
- dev: Trap unhandled errors (#3710)
- routing: Normalize and resolve handlers (15669702)
- routing: Filter invalid final handlers (c1a3be05)
- vite: Ignore invalid SSR env without entry (aefcdb31)
- config: Resolve
errorHandlerconfig (16b10fb0) - rolldown, vite: Escape non-safe chars from
chunkFileNames(491dc128) - vite: Set correct builder (fa27a9a2)
- Retry last-build link once (25fa2e9e)
- vite: Only pass
transformoptions in rolldown mode (737f4e6e) - vite: Use
configEnv.commandto determine dev mode (#3730) - vite: Send full-reload to server (#3732)
- vite: Update
<!--ssr-outlet-->for prod (ebb040f3) - Apply
baseURLto production assets (#3734) - vercel: Properly parse
x-now-route-matchesheader (c0ee44bf) - cloudflare: Workround for rolldown minify issue (#3748)
- Standard preset aliases (5419b335)
- node, bun, deno: Use static import only (#3751)
- vite: Use
noExternallist for dev (#3761) - Resolve full path of strings in
modules: [](23f7bea2) - Add
buildDirtonoExternal(c21a33ba) - cloudflare: Push unenv externals preset to resolved config (5faf0f5e)
- Make nitro/meta side-effect free (2292c661)
- cloudflare: Only enable
no_bundlefor workers (not pages) (409ecf3c) - vite: Add route rules only if
assetsDirgenerated (#3774)
💅 Refactors
- vite: Avoid empty lines in CI and test (44b2f091)
- vite: Show original plugin name/hook when failed (b0a49d41)
- vite: Overhaul plugin setup (#3676)
- vite: Enable back nf3 (57503e42)
- vercel: Rename
__fallbackto__server(4aad3595) - rollup: Hide
THIS_IS_UNDEFINEDwarn (5f6da290) - rolldown: Update transform config (3be802f2)
- ESM imports with erasable syntax (#3704)
- ⚠️ Cleanup deno, bun and node presets (#3705)
- ⚠️ Remove
defineRenderutil (#3706) - vite: Remove
__VITE_MANIFEST__(#3714) - ⚠️ Register
server.tsas/**route (#3716) - cloudflare: Remove old
esbuildtarget (18820e2a) - Remove specific delimiters (#3725)
- dev: Use
h3.serverStatic(#3728) - dev: Improve
serveStaticDirwith compression and streaming (9ee9f218) - core: Use native import for loading modules (#3729)
- Use
node_modules/.nitrofor buildDir and rely less on it (#3745) - vite: Allow directly passing nitro options to
nitro({})plugin (#3746) - rollup, rolldown: Better info logs (3bbeb5f0)
- ⚠️ Rename
renderer.entrytorenderer.handler(#3752) - ⚠️ Remove build time storage and mounts (#3753)
- Better serverDir config DX (#3755)
- ⚠️ Overhaul runtime exports and avoid barrel exports (#3760)
- Rewrite
node-clusterpreset (#3762) - ⚠️ Remove default auto imports (#3764)
- ⚠️ Disable unenv npm shims (#3767)
- rollup, vite: Remove CommonJS option overrides (#3770)
- Only allow strict raw: imports (#3772)
- ⚠️ Only replace
import.meta.*(notprcoess.env.*) (#3773) - Disable sourcemaps by default for now (fc0ccfae)
📖 Documentation
- configuration: Fix typo (#3693)
- cloudflare: Add wrangler.json examples (#3380)
- Add note about nightly channel usage (#3739)
- config: Remove legacyExternals (#3744)
📦 Build
❤️ Contributors
- Pooya Parsa (@pi0)
- Btea (@btea)
- Liaoyinglong (@liaoyinglong)
- Vida Xie (@9romise)
- Abeer0 (@iiio2)
- Marco (@Marcoru97)
- Ross Robino (@rossrobino)
- Kricsleo (@kricsleo)
- Tom Lienard (@QuiiBz)
- Hiroshi Ogawa (@hi-ogawa)
- Octavio Araiza (@8ctavio)
- Rihan Arfan (@RihanArfan)
- Caleb Brown
- @productdevbook
- Henning