JavaScript Frameworks Release Notes
Release notes for JavaScript and web frameworks, bundlers and static site generators
Products (10)
Latest JavaScript Frameworks Updates
- Jul 9, 2026
- Date parsed from source:Jul 9, 2026
- First seen by Releasebot:Jul 10, 2026
8.1.4 (2026-07-09)
Vite releases a maintenance update with a new legacy minifier preference for oxc, plus build, SSR, HTML, optimizer, and CSS chunk import fixes. It also updates dependencies, refines docs, and cleans up build system warnings and logging.
Features
- legacy: prefer oxc as minifier (fix #21973) (#22468) (ab5dafa)
Bug Fixes
- build: add workaround for building on stackblitz (#22840) (575c32c)
- build: keep import.meta.url in preload function as-is (#22839) (f1f90ed)
- deps: update all non-major dependencies (#22865) (d4295a9)
- deps: update rolldown-related dependencies (#22866) (7cf07e4)
- html: avoid backtracking in import-only check (#22848) (b5868c0)
- optimizer: avoid optimizer run for transform request before init (#22852) (72a5e21)
- ssr: align named export function call stacktrace column with Node (#22829) (173a1b6)
- strip pure CSS chunk imports when chunkImportMap is enabled (#22841) (648bd04)
Documentation
- fix incorrect @default for server.cors (#22859) (70435b2)
Miscellaneous Chores
- deps: update dependency postcss-modules to v9 (#22867) (a9539d6)
Code Refactoring
- eliminate ineffectiveDynamicImport warn (#22876) (ea22fb3)
Tests
- avoid warnings (#22851) (af21ab6)
Build System
- remove the custom onLog function (#22878) (2c4a217)
- replace deprecated onwarn with onLog (#22741) (c581b55)
- Jul 8, 2026
- Date parsed from source:Jul 8, 2026
- First seen by Releasebot:Jul 10, 2026
v8.2.0
React Router adds a Web Streams default server entry for non-Node Framework mode apps, with an opt-in flag for Node apps, and improves routing, param handling, blockers, and Vite 8+ config detection while also fixing URL encoding and route ranking issues.
What's Changed
Web Streams Default Server Entry
Non-Node runtime Framework Mode apps no longer need a custom
entry.server.tsxfile using React'srenderToReadableStreamAPI. Apps with@react-router/{node,express,serve}dependencies will continue to default torenderToPipeableStream, while non-Node apps default torenderToReadableStream.Because Web Streams are stable in Node 22+, Node apps can also opt-into the Web Streams default entry with the new
future.unstable_enableNodeReadableStreamflag:import type { Config } from "@react-router/dev/config"; export default { future: { unstable_enableNodeReadableStream: true, }, } satisfies Config;This flag has no effect if you have a custom
entry.server.tsxkeep using their custom entry file. It only applies to the default entry used if one doesn't exist.Node apps opting-into the Web Streams API might even see a small performance boost because React Router already uses Web Streams internally, so this avoids additional conversions between Web/Node streams. If you see perf changes one way or another upon adopting this flag, please let us know!
Minor Changes
@react-router/dev- Add a Web Streams default server entry for non-Node Framework mode apps (#15290)- Apps using
@react-router/node,@react-router/express, or@react-router/servecontinue to use therenderToPipeableStreamdefault server entry - Apps without those Node server adapter dependencies use a
renderToReadableStreamdefault server entry - Non-Node apps with their own
entry.server.tsxmay be able to remove it in favor of the default if it is not doing anything custom
- Apps using
@react-router/dev- Detectnubas a supported package manager when installing framework dependencies (#15276)create-react-router- Detectnubas a supported package manager when creating new projects (#15276)
Patch Changes
react-router- Fixhref()to properly stringify and URL-encode param values, matchinggeneratePath()(#15277)- splat params preserve path separators while encoding each segment individually
react-router- Fix dynamic param extraction for routes with optional static segments (#15200)- When a route path contains optional static segments (e.g.
/school?/user/:id), the internal regex's incorrectly shifted parameter indices resulting in incorrect parameter extraction - Consecutive optional static segments (e.g.
/one?/two?) were only partially handled
- When a route path contains optional static segments (e.g.
react-router- Preserve navigation blocker state through a revalidation (#15246)react-router- Fix route ranking for dynamic parameters with static extension suffixes (#15273)- These were not being detected as dynamic param segments and instead got incorrectly scored higher as a static segment
- This meant they could potentially tie truly static routes like
/sitemap.xmland outrank them based on definition order - These are now correctly identified as dynamic parameter segments and scored correctly
react-router- Use ReactFormState types instead of unknown (#15263)@react-router/dev- Detect userrolldownOptionsconfig in Vite 8+ (#15278)
Unstable Changes
β οΈ Unstable features are not recommended for production use
@react-router/dev- Add thefuture.unstable_enableNodeReadableStreamflag to opt Node Framework mode apps into usingrenderToReadableStreaminstead ofrenderToPipeableStream(#15290)- This flag has no effect if you have your own
entry.server.tsx
- This flag has no effect if you have your own
Full Changelog:
Original sourcev8.1.0...v8.2.0 All of your release notes in one feed
Join Releasebot and get updates from Vite and hundreds of other software products.
- Jul 8, 2026
- Date parsed from source:Jul 8, 2026
- First seen by Releasebot:Jul 9, 2026
v8.2.0
React Router ships Web Streams defaults for non-Node Framework mode apps, adds an opt-in flag for Node apps, and improves route matching, navigation blockers, and param handling. It also adds package manager detection updates and several developer experience fixes.
What's Changed
Web Streams Default Server Entry
Non-Node runtime Framework Mode apps no longer need a custom entry.server.tsx file using React's renderToReadableStream API. Apps with @react-router/{node,express,serve} dependencies will continue to default to renderToPipeableStream, while non-Node apps default to renderToReadableStream.
Because Web Streams are stable in Node 22+, Node apps can also opt-into the Web Streams default entry with the new future.unstable_enableNodeReadableStream flag:
import type { Config } from "@react-router/dev/config"; export default { future: { unstable_enableNodeReadableStream: true, }, } satisfies Config;This flag has no effect if you have a custom entry.server.tsx keep using their custom entry file. It only applies to the default entry used if one doesn't exist.
Node apps opting-into the Web Streams API might even see a small performance boost because React Router already uses Web Streams internally, so this avoids additional conversions between Web/Node streams. If you see perf changes one way or another upon adopting this flag, please let us know!
Minor Changes
- @react-router/dev - Add a Web Streams default server entry for non-Node Framework mode apps (#15290)
- Apps using @react-router/node, @react-router/express, or @react-router/serve continue to use the renderToPipeableStream default server entry
- Apps without those Node server adapter dependencies use a renderToReadableStream default server entry
- Non-Node apps with their own entry.server.tsx may be able to remove it in favor of the default if it is not doing anything custom
- @react-router/dev - Detect nub as a supported package manager when installing framework dependencies (#15276)
- create-react-router - Detect nub as a supported package manager when creating new projects (#15276)
Patch Changes
- react-router - Fix href() to properly stringify and URL-encode param values, matching generatePath() (#15277)
- splat params preserve path separators while encoding each segment individually
- react-router - Fix dynamic param extraction for routes with optional static segments (#15200)
- When a route path contains optional static segments (e.g. /school?/user/:id), the internal regex's incorrectly shifted parameter indices resulting in incorrect parameter extraction
- Consecutive optional static segments (e.g. /one?/two?) were only partially handled
- react-router - Preserve navigation blocker state through a revalidation (#15246)
- react-router - Fix route ranking for dynamic parameters with static extension suffixes (#15273)
- These were not being detected as dynamic param segments and instead got incorrectly scored higher as a static segment
- This meant they could potentially tie truly static routes like /sitemap.xml and outrank them based on definition order
- These are now correctly identified as dynamic parameter segments and scored correctly
- react-router - Use ReactFormState types instead of unknown (#15263)
- @react-router/dev - Detect user rolldownOptions config in Vite 8+ (#15278)
Unstable Changes
β οΈ Unstable features are not recommended for production use
- @react-router/dev - Add the future.unstable_enableNodeReadableStream flag to opt Node Framework mode apps into using renderToReadableStream instead of renderToPipeableStream (#15290)
- This flag has no effect if you have your own entry.server.tsx
Full Changelog: v8.1.0...v8.2.0
Original source - Jul 8, 2026
- Date parsed from source:Jul 8, 2026
- First seen by Releasebot:Jul 9, 2026
[1.1.5] - 2026-07-08
Rolldown adds new plugin API metadata, a native config loader option, sourcemap filename support, and stronger tree-shaking and reachability handling. This release also improves dev and HMR reliability, sharpens error messages, and includes performance gains, docs updates, and bug fixes.
π Features
- detect top-level import-binding reads as execution-order sensitive (#10180) by @hyf0
- sourcemap_filenames: add a sourcemapFileNames option (#9271) by @V1OL3TF0X
- binding: record plugin hook result kind in tracing spans (#10154) by @IWANABETHATGUY
- linking: skip side-effect-free modules in per-entry reachability (#10111) by @IWANABETHATGUY
- improve error message for unresolved virtual imports (#10156) by @sapphi-red
- add descriptive metadata to plugin API (#10106) by @sapphi-red
- add
--configLoader=nativeoption (#10118) by @sapphi-red
π Bug Fixes
- improve invalid annotation warnings (#10185) by @hyf0
- keep deduplicated asset filenames stable once they can be observed (#10191) by @shulaoda
- sourcemap_filenames: use public option name in pattern errors (#10188) by @IWANABETHATGUY
- sourcemap_filenames: hash prepared sourcemap content (#10178) by @hyf0
- tree-shake unused circular declarators exported via export list (#10166) by @IWANABETHATGUY
- dev: don't panic when an HMR rebuild hits an unresolved import (#10162) by @shulaoda
- propagate errors from output.globals function (#9880) by @shulaoda
- dev: revert cache mutations when a partial scan fails (#10110) by @shulaoda
- dev: update importer relationships of cached modules in incremental build (#10107) by @shulaoda
- hmr: fall back to full reload when a changed module is not registered as executed (#10132) by @shulaoda
- chunk-optimizer: follow entry facade edges in runtime placement cycle check (#10101) by @hyf0
- dev: ignore watcher events after close (#10113) by @hyf0
- emit async wrapper for TLA modules under onDemandWrapping (#10086) by @IWANABETHATGUY
- gate sideEffects:false modules' side effects on body demand (#10080) by @IWANABETHATGUY
- rolldown_plugin_vite_resolve: return empty object for
browser: falsemapped modules (#10082) by @sapphi-red - reset the word-boundary state on newline in Hires::Boundary sourcemaps (#10025) by @shulaoda
- trim an emptied chunk's outro/intro instead of skipping past it (#10029) by @shulaoda
- test each edited chunk's own start against indent exclude ranges (#10026) by @shulaoda
- preserve sourcemap mappings for indented lines when a CJS module shares the chunk (#10074) by @hyf0
π Refactor
- separate tree-shaking side effects from execution order sensitivity (#10168) by @hyf0
- type construct_vite_preload_call to take an ObjectPattern (#10135) by @shulaoda
- treeshake: single-source the own-export classification shared with the lazy-barrel loader (#10098) by @IWANABETHATGUY
- dev: reuse Vite's bundledDev server (#10081) by @h-a-n-a
- clippy: ban std HashMap/HashSet in favour of FxHashMap/FxHashSet (#10108) by @Boshen
- treeshake: make body demand a second module bit instead of a stmt multimap (#10097) by @IWANABETHATGUY
- seal used_symbol_refs by construction after its last writer (#10091) by @hyf0
- treeshake: replace inclusion mutual recursion with a worklist engine (#10096) by @IWANABETHATGUY
- treeshake: split include_statements.rs into focused modules (#10095) by @IWANABETHATGUY
- drop redundant is_user_defined filter on partitioned entries (#10050) by @shulaoda
- project the retained export interface out of used_symbol_refs (#10089) by @hyf0
- track used external symbols separately from used_symbol_refs (#10088) by @hyf0
- make module namespace inclusion an explicit linking metadata field (#10087) by @hyf0
- rename statement evaluation metadata (#10078) by @hyf0
π Documentation
- virtual modules user-facing id convention (#10155) by @sapphi-red
- cli: clarify disabling boolean/object flags like codeSplitting (#10153) by @IWANABETHATGUY
- chore: remove Vite+ alpha banner (#10105) by @mdong1909
- write down the used_symbol_refs contract (#10090) by @hyf0
- dev/lazy: update design and implementation (#10079) by @h-a-n-a
β‘ Performance
- ast_scanner: stop order-sensitivity checks once a module is flagged (#10190) by @IWANABETHATGUY
- return impl ExactSizeIterator from slice-backed accessors (#10133) by @Boshen
- binding: box dev and watcher napi futures (#10103) by @Boshen
π§ͺ Testing
- move string_wizard replace unit tests to the JS magic-string suite (#10176) by @IWANABETHATGUY
- dev: assert incremental scan state matches a fresh full build after each HMR step (#10115) by @shulaoda
- dev: restore runtime assertions of delete_file_not_used_anymore (#10112) by @shulaoda
- dev: fix flaky dev server tests in CI (#10152) by @h-a-n-a
- add regression test for #10099 (lazyBarrel drops default-import binding but keeps its property reads) (#10109) by @IWANABETHATGUY
βοΈ Miscellaneous Tasks
- deploy website to Void via GitHub OIDC (#10192) by @Boshen
- deps: update oxc to 0.139.0 (#10161) by @shulaoda
- deps: update test262 submodule for tests (#10160) by @rolldown-guard[bot]
- rolldown_plugin_utils: remove dead asset-url and css scaffolding (#10131) by @shulaoda
- deps: revert vite-plus to v0.2.1 (#10148) by @shulaoda
- deps: update github actions (#10141) by @renovate[bot]
- deps: update dependency rust to v1.96.1 (#10145) by @renovate[bot]
- deps: update npm packages (#10142) by @renovate[bot]
- deps: update rust crates (#10143) by @renovate[bot]
- deps: update napi to v3.10.3 (#10121) by @renovate[bot]
- rolldown_utils: remove unused time module (#10138) by @shulaoda
- remove dead CopyModulePlugin::is_active method (#10129) by @shulaoda
- remove dead LazyCompilationContext::is_lazy_module method (#10128) by @shulaoda
- remove dead BuildDiagnostic::downcast_ref method (#10127) by @shulaoda
- deps: update dependency vite-plus to v0.2.2 (#10084) by @renovate[bot]
- deps: update rust crate oxc_sourcemap to v8.1.0 (#10122) by @renovate[bot]
- deps: update crate-ci/typos action to v1.48.0 (#10124) by @renovate[bot]
- enable more clippy restriction lints (#10114) by @Boshen
- deps: update rust dependencies (#10100) by @Boshen
- deps: update oxc resolver to v11.23.0 (#10083) by @renovate[bot]
βοΈ Revert
- Revert "chore(deps): revert vite-plus to v0.2.1" (#10157) by @h-a-n-a
- "fix(hmr): fall back to full reload when a changed module is not registered as executed (#10132)" (#10151) by @shulaoda
β€οΈ New Contributors
- @V1OL3TF0X made their first contribution in #9271
- Jul 6, 2026
- Date parsed from source:Jul 6, 2026
- First seen by Releasebot:Jul 7, 2026
v0.164.0
Hugo adds Chroma dark and light highlighter styles, new template and crypto helpers, Pandoc citation support, and a new markup.rst.syntaxHighlight option. It also improves Page.Render layout handling and fixes a performance regression for larger sites.
Notable new features in this release are:
- The Chroma highlighter styles now introduces dark/light pairs. See also the new flags on the hugo gen chromastyles command.
- New template funcs encoding.HexEncode, encoding.HexDecode, and crypto.Hash.
- New markup.rst.syntaxHighlight option.
- We added Pandoc citation support.
- We now spport sub paths in layouts passed to Page.Render.
- This release also fixes a performance regression introduced in Hugo v0.128.0. This should mostly be prominent in bigger sites. See this discussion for some background.
Notes
- tpl/resources: Deprecate resources.PostProcess in favour of templates.Defer 29ed932 @bep #15086
Changes
- all: Rewrite deprecated constructs in tests 5a5f4a5 @bep
- tpl/tplimpl: Support sub paths in layouts passed to .Render d83ce27 @bep #15056
- Add markup.rst.syntaxHighlight option c6acc24 @bep #5349
- tpl/resources: Deprecate resources.PostProcess in favour of templates.Defer 29ed932 @bep #15086
- tpl/collections: Include key in IsSet unsupported-type warning 671897a @bejaratommy #11794
- create: Keep new content placeholders buildable 499794d @sjh9714 #15078
- hugio: Speedup hasBytesWriter 65c8217 @bep
- tpl/crypto: Add crypto.Hash dfb35dc @bep #15072
- Add encoding.HexDecode/Encode a5ec542 @bep #15068 #15060
- tpl/tplimpl: Make template name lookup case-insensitive e46d37a @jmooring #15057
- hugolib: Return error from .Render when template not found fe06735 @jmooring #15052
- markup/pandoc: Add citation support 128fb17 @jmooring #15062
Dependency Updates
- build(deps): bump github.com/JohannesKaufmann/html-to-markdown/v2 921db7b @dependabot [bot]
- build(deps): bump golang.org/x/tools from 0.45.0 to 0.47.0 786ce71 @dependabot [bot]
- build(deps): bump golang.org/x/image from 0.42.0 to 0.43.0 5ad2846 @dependabot [bot]
- build(deps): bump golang.org/x/net from 0.55.0 to 0.56.0 36ad9f5 @dependabot [bot]
- build(deps): bump github.com/pelletier/go-toml/v2 from 2.4.2 to 2.4.3 7c0a0bc @dependabot [bot]
- build(deps): bump github.com/getkin/kin-openapi from 0.139.0 to 0.140.0 a879ebf @dependabot [bot]
- build(deps): bump golang.org/x/mod from 0.36.0 to 0.37.0 332d5ec @dependabot [bot]
- build(deps): bump github.com/pelletier/go-toml/v2 from 2.3.1 to 2.4.2 212cc11 @dependabot [bot]
- deps: Upgrade github.com/evanw/esbuild v0.28.0 => v0.28.1 884439b @bep #15033
- deps: Add Chroma dark/light mode support 790a8aa @bep #15017
- Jul 5, 2026
- Date parsed from source:Jul 5, 2026
- First seen by Releasebot:Jul 5, 2026
v5.10.0
Fastify ships v5.10.0 with a new log controller layer, faster request lifecycle performance, and fixes for reply handling, JSON content detection, and request host and port behavior. The release also updates docs and drops Marko support in @fastify/view engines.
What's Changed
- docs(type-providers): clarify as const usage by @smith558 in #6772
- docs: fix broken and redirected links by @Eomm in #6817
- docs: remove marko from @fastify/view engines (support dropped) by @EduardF1 in #6821
- fix: clear socket._meta on reply.hijack() when onTimeout is registered by @nerkoux in #6810
- docs: fix duplicate routeOptions entries in Request.md example by @thePranav-kpk in #6824
- chore: Bump @types/node from 25.9.4 to 26.0.1 in the dev-dependencies-typescript group by @dependabot[bot] in #6829
- docs(ecosystem): add @stitchapi/fastify to Community plugins by @rejifald in #6820
- feat: introduce log controller layer by @Eomm in #6580
- fix: use ContentType to detect json and charset in reply.send by @climba03003 in #6830
- docs: fix incorrect defaults and code examples in Server.md by @Adit-Jain-srm in #6805
- docs: fix incorrect hook count in Hooks.md by @thePranav-kpk in #6825
- chore: Bump fast-json-stringify from 6.4.0 to 7.0.0 in the dependencies group across 1 directory by @dependabot[bot] in #6800
- perf: reduce per-request overhead in the request lifecycle by @mcollina in #6831
- fix: derive request.port from request.host by @mcollina in #6680
- docs: update Logging.md with per-route log level info by @asppsa in #6627
- docs(type-providers): update import for article consistency by @smith558 in #6771
New Contributors
- @EduardF1 made their first contribution in #6821
- @thePranav-kpk made their first contribution in #6824
- @rejifald made their first contribution in #6820
- @Adit-Jain-srm made their first contribution in #6805
- @asppsa made their first contribution in #6627
Full Changelog: v5.9.0...v5.10.0
Original source - Jul 2, 2026
- Date parsed from source:Jul 2, 2026
- First seen by Releasebot:Jul 2, 2026
8.1.3 (2026-07-02)
Vite fixes CSS injection, nested dynamic import preload, SSR stacktrace columns, and updates es-module-lexer.
Bug Fixes
- css: inject inlined CSS after the shebang line (#22717) (1534d36)
- deps: bump es-module-lexer to 2.3.0 (#22838) (7103c3a)
- preload css for nested dynamic imports (#22759) (2c53054)
- ssr: correct stacktrace column position for first line (#22828) (c4acd69)
- Jul 1, 2026
- Date parsed from source:Jul 1, 2026
- First seen by Releasebot:Jul 3, 2026
Whatβs new in Svelte: July 2026
Svelte brings a major SvelteKit and tooling update with config now supported in vite.config, preview explicit environment variables, remote function and query improvements, and broader support for new {const ...} declaration tags across the CLI and language tools.
SvelteKit config in vite.config, explicit env vars and new declaration tag support across the toolchain
This month brought a real shift in how SvelteKit projects are configured. You can now define your SvelteKit config directly inside vite.config.js and skip svelte.config.js entirely. We also got the first preview of explicit environment variables, which will eventually replace $env/* modules in SvelteKit 3.
On top of that, the language tools and the sv CLI both caught up with Svelte's new {const ...} declaration tags, so the whole toolchain is now in sync.
Let's dive in!
What's new in SvelteKit permalink
What's new in SvelteKit
- You can now pass your SvelteKit config directly to the Vite plugin, so a separate svelte.config.js is no longer required, as a preview of how Kit 3 will require config to live in vite.config.js (2.62.0, Docs, #15944)
- Experimental explicit environment variables let you declare and type your env vars in one place, as a preview of how $env/* will work in SvelteKit 3 (2.63.0, Docs, #15934)
- Remote function commands can now receive File objects directly, so you can upload files without manually wrapping them in FormData (2.64.0, Docs, #15978)
- Remote queries can now refresh other queries, making it easier to invalidate related data after a mutation (2.65.0, Docs, #16012)
- Prerendered .md and .mdx files are now precompressed alongside HTML, JS and CSS for faster delivery (2.66.0, Docs, #15893)
- SvelteKit now warns when boolean fields in remote form schemas are not marked optional, which is a common cause of silent submit failures (2.66.0, Docs, #15804)
- The new prerender.handleInvalidUrl option lets you customize how invalid URLs found during crawling are reported (2.67.0, Docs, #16088)
- RemoteFormEnhanceInstance and RemoteFormEnhanceCallback are now exported types, so you can type your custom enhance callbacks directly (2.68.0, Docs, #15816)
- Submitted submit fields now keep their value in the form action payload, which makes multi-button forms easier to handle on the server (2.68.0, Docs, #15979)
For all the features and bugfixes that landed this month, check out the SvelteKit / Adapter CHANGELOGs.
What's new in the Svelte CLI and Language Tools permalink
What's new in the Svelte CLI and Language Tools
- The Svelte CLI demo template now uses the new {const ...} declaration tag, so newly created projects show off the latest Svelte syntax ([email protected], #1110)
- sv create now scaffolds projects against @sveltejs/kit ^2.62.0 and moves the Svelte config into the Vite plugin by default ([email protected], #1119)
- A new experimental add-on lets you toggle experimental flags and opt into @next versions directly from the CLI ([email protected], #1121)
- The drizzle and better-auth add-ons now support SvelteKit's new explicit environment variables ([email protected], #1122)
- New defineEnv and svelteConfig helpers in @sveltejs/sv-utils make it easier to read and edit a project's Svelte config from add-ons ([email protected])
- The Svelte language server, svelte-check, and svelte2tsx now understand Svelte 5's {const ...} declaration tags ([email protected]/[email protected]/[email protected], #3033)
- CSS completions now work inside nested
- Jul 1, 2026
- Date parsed from source:Jul 1, 2026
- First seen by Releasebot:Jul 3, 2026
[1.1.4] - 2026-07-01
Rolldown releases a broad update that makes lazy barrel handling safer by default, improves dev-mode error handling, boosts tree-shaking and JSON module behavior, and adds performance wins across parsing, sourcemaps, and symbol handling.
π Features
- disable
experimental.lazyBarrelby default (#10071) by @shulaoda
π Bug Fixes
- dev: disable lazy barrel in dev mode (#10060) by @shulaoda
- generate: keep full JSON interface under preserveModules namespa⦠(#10056) by @IWANABETHATGUY
- check finalize_other_specifiers in its own Debug attribute (#10032) by @shulaoda
- serialize the KeepAssign unused minify option as "keep_assign" (#10031) by @shulaoda
- keep fragments after the newline fragment in MagicString::last_line (#10023) by @shulaoda
- generate: undeclared JSON named exports under preserveModules (#10020) (#10027) by @IWANABETHATGUY
- deconflict: rename CJS-wrapped locals that shadow chunk-root bindings (#9921) by @IWANABETHATGUY
- rolldown: keep entry facade when a shared chunk holds another entry's module (#9997) by @hyf0
- treeshake: also bail JSON default split when the object escapes (#9996) by @IWANABETHATGUY
- don't classify await in a strict-mode function as top-level await (#9987) by @shulaoda
- avoid spurious leading newline in addon hooks (banner/footer/intro/outro) (#9989) by @shulaoda
- handle JSON default mutation bailouts (#9972) by @TheAlexLichter
- plugin: make lazy hook metadata enumerable (#9991) by @TheAlexLichter
- dev: make init errors in lazy-compiled modules catchable (#9981) by @h-a-n-a
- treeshake: keep computed-key side effects on namespace member access (#9986) by @shulaoda
- binding: validate replace plugin delimiters length instead of panicking (#9984) by @shulaoda
- reconstruct nested rest patterns in into_expression (#9980) by @IWANABETHATGUY
- reconstruct rest patterns as spread in into_expression (#9976) by @shulaoda
- preserve export keyword on multi-declarator exports under keepNames (#9974) by @shulaoda
- deterministically keep the shortest name for deduplicated assets (#9948) by @x1024
- treeshake: apply @NO_SIDE_EFFECTS to cross-chunk namespace calls (#9960) by @IWANABETHATGUY
π Refactor
- drop redundant program scope enter/leave in finalizer (#10049) by @shulaoda
- deconflict: extract collect_chunk_scope_captured_names (#10006) by @IWANABETHATGUY
- unify pre-scan multi-declarator split into one decision site (#9982) by @IWANABETHATGUY
- common: return bool from SymbolRef::is_not_reassigned (#9962) by @IWANABETHATGUY
π Documentation
- rolldown: remove outdated comment for removing parenthesized expression (#10062) by @Dunqing
- use GitHub-flavored alert for Etiquette note in contribution guide (#10012) by @IWANABETHATGUY
- replace: explain the delimiters left and right boundaries (#9985) by @shulaoda
- ast-mutation: remove stale Address Use section after pre-scan refactor (#9983) by @IWANABETHATGUY
- remove fathom (#9968) by @mdong1909
- contribution-guide: code-format main branch references (#9966) by @IWANABETHATGUY
- contribution-guide: fix stale REPL note and tidy wording (#9957) by @hyf0
- contribution-guide: clarify when to discuss before opening a PR (#9955) by @hyf0
β‘ Performance
- disable preserve_parens across all parse paths (#10057) by @Dunqing
- common: inline declared_symbols with SmallVec (#9920) by @IWANABETHATGUY
- common: pack TaggedSymbolRef into 8 bytes (#9919) by @IWANABETHATGUY
- sourcemap: skip newline scan on the no-sourcemap join fast path (#9936) by @Boshen
π§ͺ Testing
- dev: error in lazy module should be catchable (#9975) by @sapphi-red
- dev: reject unknown lazy compile modules (#9969) by @sapphi-red
βοΈ Miscellaneous Tasks
- deps: update actions/cache action to v6 (#10001) by @renovate[bot]
- trigger vite ecosystem-ci from PR comments (#10058) by @shulaoda
- deps: update napi to v3.10.0 (#10063) by @renovate[bot]
- remove unused From impl for RolldownLabelSpan (#10055) by @shulaoda
- remove dead Diagnostic::with_kind method (#10054) by @shulaoda
- remove unused StatementExt methods (#10053) by @shulaoda
- remove unused ExpressionExt methods (#10052) by @shulaoda
- remove commented-out re_export_all_names field (#10051) by @shulaoda
- deps: update pnpm to v11.9.0 (#10047) by @renovate[bot]
- remove the unused BindingGenerateHmrPatchReturn napi type (#10034) by @shulaoda
- remove the dead inline_entry_chunk_wrapping scaffolding (#10037) by @shulaoda
- deps: bump oxc_resolver to 11.22.0 (#10045) by @Boshen
- remove never-constructed MatchImportKind::_Ignore variant (#10041) by @shulaoda
- remove the unused ScheduledBuild napi struct (#10033) by @shulaoda
- remove dead compute_hmr_update_single method (#10040) by @shulaoda
- drop the redundant visited.insert in manual code splitting (#10038) by @shulaoda
- remove the dead output_assets vector in render_chunk_to_assets (#10036) by @shulaoda
- remove the unused From/Display impls for BindingLogLevel (#10035) by @shulaoda
- deps: upgrade oxc to 0.138.0 and migrate to per-type AST construction (#10018) by @shulaoda
- deps: update rust crates (#9911) by @renovate[bot]
- deps: update test262 submodule for tests (#10016) by @rolldown-guard[bot]
- deps: update github actions (#9999) by @renovate[bot]
- deps: update npm packages (#10000) by @renovate[bot]
βοΈ Revert
- "fix(plugin): make lazy hook metadata enumerable (#9991)" (#10005) by @shulaoda
β€οΈ New Contributors
- @x1024 made their first contribution in #9948
- Jul 1, 2026
- Date parsed from source:Jul 1, 2026
- First seen by Releasebot:Jul 2, 2026
v16.2.10
Next.js republishes @next/swc-wasm-web, fixing a package that was missed since 16.2.4.
Contains no changes except publishing @next/swc-wasm-web which was accidentally not published since 16.2.4.
Original source