# rolldown changelog > rolldown release notes. - Vendor: rolldown - Category: Developer Tools - Official site: https://rolldown.rs/ - Tracked by: What's New (https://whatsnew.fyi/product/rolldown) - Harvested from: GitHub (rolldown/rolldown) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### v1.2.0 - Date: 2026-07-15 - Version: v1.2.0 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.2.0 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.2.0 - **added** — Skip shipping factories for newly imported top-level modules in dev mode - **added** — Per-client ship map for HMR patch sizing in dev mode - **added** — Client-side HMR - **added** — Send a full-reload update to clients when a tsconfig changes - **added** — Treat import.meta['url'] and import.meta['ROLLUP_FILE_URL_*'] as side-effect free - **added** — Rewrite import.meta['url'] - **added** — Add FILE_NOT_FOUND error - **added** — Treat import.meta.ROLLUP_FILE_URL_* as side-effect free - **fixed** — Preserve unmapped boundaries during sourcemap composition - **fixed** — Use es instead of esm for [format] in *FileNames option for ESM format - **fixed** — Preserve coarse mappings during sourcemap composition - **fixed** — Support tsconfig paths with import.meta.glob in rolldown_plugin_vite_import_glob - **fixed** — Clear tsconfig caches for bare full builds in dev mode - **fixed** — Force a full rebuild when a tsconfig changes in dev mode - **fixed** — Treat rooted drive-less module ids as absolute in preserveModules naming - **fixed** — Rebuild when tsconfig files change in watch mode - **fixed** — Drop tsconfig-merged transform options on each rebuild in watch mode - **fixed** — Fix incorrect EMPTY_IMPORT_META warning for import.meta.ROLLUP_FILE_URL_* for CJS output - **fixed** — Rename CJS locals shadowing wrapped-ESM namespace objects in deconflict - **fixed** — Tree-shake destructured dynamic import namespace bindings ##### [1.2.0] - 2026-07-15 ###### 🚀 Features - dev: skip shipping factories for newly imported top-level modules (#10223) by @h-a-n-a - dev: per-client ship map for HMR patch sizing (#10208) by @h-a-n-a - dev: client-side HMR (#10164) by @h-a-n-a - dev: send a full-reload update to clients when a tsconfig changes (#10262) by @shulaoda - treat `import.meta['url']` and `import.meta['ROLLUP_FILE_URL_*']` as side-effect free (#10267) by @sapphi-red - rewrite `import.meta['url']` (#10251) by @sapphi-red - add `FILE_NOT_FOUND` error (#10220) by @sapphi-red - treat `import.meta.ROLLUP_FILE_URL_*` as side-effect free (#10217) by @sapphi-red ###### 🐛 Bug Fixes - sourcemap: preserve unmapped boundaries during composition (#10254) by @hyfdev - `[format]` in `*FileNames` option for ESM format should be `es` instead of `esm` (#10214) by @sapphi-red - sourcemap: preserve coarse mappings during composition (#10249) by @hyfdev - rolldown_plugin_vite_import_glob: support tsconfig paths with `import.meta.glob` (#10167) by @sapphi-red - dev: clear tsconfig caches for bare full builds (#10276) by @shulaoda - dev: force a full rebuild when a tsconfig changes (#10261) by @shulaoda - treat rooted drive-less module ids as absolute in preserveModules naming (#10235) by @IWANABETHATGUY - watch: rebuild when tsconfig files change (#10258) by @shulaoda - watch: drop tsconfig-merged transform options on each rebuild (#10257) by @shulaoda - incorrect `EMPTY_IMPORT_META` warning for `import.meta.ROLLUP_FILE_URL_*` for CJS output (#10221) by @sapphi-red - deconflict: rename CJS locals shadowing wrapped-ESM namespace objects (#9970) by @IWANABETHATGUY - rolldown: drop the unused runtime module after entry-level external flattening (#10237) by @IWANABETHATGUY - rolldown: re-propagate has_dynamic_exports to transitive star importers (#10239) by @IWANABETHATGUY - tree-shaking: tree-shake destructured dynamic import namespace bindings (#10213) by @logaretm - s390x: use json-escape-simd 3.1.1 for big-endian JSON escaping fix (#10211) by @satyamg1620 ###### 🚜 Refactor - dev: move full-reload to client side (#10207) by @h-a-n-a - readability follow-ups to the ReplaceWith migration (#10286) by @IWANABETHATGUY - replace take_in-then-write-back with ReplaceWith and by-value moves (#10285) by @Boshen - share the main resolver's cache with the transformer's tsconfig lookups (#10205) by @shulaoda - rolldown: extract the ns star-external __reExport emission rule into LinkingMetadata (#10238) by @IWANABETHATGUY - rolldown: unify link/generate diagnostics into a Diagnostics accumulator (#10234) by @IWANABETHATGUY - sourcemap_filenames: drop dead sourcemap-filename plumbing (#10189) by @IWANABETHATGUY - extract external import symbol merging into a method (#10224) by @IWANABETHATGUY - rolldown: skip CJS namespace merging under strict execution order (#10203) by @hyfdev - resolve the manual tsconfig per file instead of once at startup (#10200) by @shulaoda - rolldown: route interop ESM init emission through a shared init-target view (#10202) by @hyfdev - rolldown: collapse vestigial wrap-kind state and share chunk sort helper (#10201) by @hyfdev ###### 📚 Documentation - show plugin kinds in JSDoc and each hook's description (#10218) by @sapphi-red - add an explanation about removing imports from external modules without any messages (#10215) by @sapphi-red ###### ⚡ Performance - sourcemap: owned merge in SourceJoiner::join (4005->5 allocs/chunk) (#10250) by @Boshen - avoid redundant sourcemap string copies in collapse and minify paths (#10093) by @Boshen ###### 🧪 Testing - code-splitting: establish strict-order review baselines (#10287) by @hyfdev - dev: add hot API test cases (#10181) by @h-a-n-a - code-splitting: normalize strict execution order variants (#10277) by @hyfdev - code-splitting: harden strict execution order coverage (#10252) by @hyfdev - code-splitting: add strict execution order regressions (#10253) by @hyfdev ###### ⚙️ Miscellaneous Tasks - _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.2.0]_ ### v1.1.5 - Date: 2026-07-08 - Version: v1.1.5 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.5 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.1.5 - **added** — Detect top-level import-binding reads as execution-order sensitive - **added** — Add sourcemapFileNames option - **added** — Record plugin hook result kind in tracing spans - **added** — Skip side-effect-free modules in per-entry reachability - **added** — Add descriptive metadata to plugin API - **added** — Add --configLoader=native option - **fixed** — Improve invalid annotation warnings - **fixed** — Keep deduplicated asset filenames stable once they can be observed - **fixed** — Use public option name in pattern errors for sourcemapFileNames - **fixed** — Hash prepared sourcemap content - **fixed** — Tree-shake unused circular declarators exported via export list - **fixed** — Don't panic when an HMR rebuild hits an unresolved import - **fixed** — Propagate errors from output.globals function - **fixed** — Revert cache mutations when a partial scan fails - **fixed** — Update importer relationships of cached modules in incremental build - **fixed** — Fall back to full reload when a changed module is not registered as executed - **fixed** — Follow entry facade edges in runtime placement cycle check - **fixed** — Ignore watcher events after close - **fixed** — Emit async wrapper for TLA modules under onDemandWrapping - **fixed** — Gate sideEffects:false modules' side effects on body demand ##### [1.1.5] - 2026-07-08 ###### 🚀 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=native` option (#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: false` mapped 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 _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.5]_ ### v1.1.4 - Date: 2026-07-01 - Version: v1.1.4 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.4 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.1.4 - **changed** — Disable experimental.lazyBarrel by default - **fixed** — Disable lazy barrel in dev mode - **fixed** — Keep full JSON interface under preserveModules namespace - **fixed** — Serialize the KeepAssign unused minify option as keep_assign - **fixed** — Keep fragments after the newline fragment in MagicString::last_line - **fixed** — Generate undeclared JSON named exports under preserveModules - **fixed** — Deconflict rename CJS-wrapped locals that shadow chunk-root bindings - **fixed** — Keep entry facade when a shared chunk holds another entry's module - **fixed** — Treeshake also bail JSON default split when the object escapes - **fixed** — Don't classify await in a strict-mode function as top-level await - **fixed** — Avoid spurious leading newline in addon hooks - **fixed** — Handle JSON default mutation bailouts - **fixed** — Make init errors in lazy-compiled modules catchable - **fixed** — Treeshake keep computed-key side effects on namespace member access - **fixed** — Validate replace plugin delimiters length instead of panicking - **fixed** — Reconstruct nested rest patterns in into_expression - **fixed** — Reconstruct rest patterns as spread in into_expression - **fixed** — Preserve export keyword on multi-declarator exports under keepNames - **fixed** — Deterministically keep the shortest name for deduplicated assets - **fixed** — Treeshake apply @__NO_SIDE_EFFECTS__ to cross-chunk namespace calls ##### [1.1.4] - 2026-07-01 ###### 🚀 Features - disable `experimental.lazyBarrel` by 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_expor _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.4]_ ### v1.1.3 - Date: 2026-06-24 - Version: v1.1.3 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.3 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.1.3 - **fixed** — defer_drop crashes the browser main thread - **fixed** — Correct camel case for nested values - **fixed** — Display --help options in camelCase in CLI - **fixed** — Preserve used re-exports under preserveModules - **fixed** — Make watch close reentrant in event callbacks - **fixed** — Git for Windows treats symlink files as regular files - **fixed** — Cancel pending full reload on build error in dev - **fixed** — Pass plugin meta to codeSplitting groups name function in chunking - **fixed** — Serve assets emitted during HMR/lazy compile - **fixed** — Dry-run step no longer publishes binding packages in release - **changed** — Model ModuleId as a classified Path/Virtual/Bare enum in rolldown_common - **removed** — Remove unused LegacyModuleIdx - **removed** — Remove unused StmtInfos::get_namespace_stmt_info - **removed** — Remove unused Module::as_external_mut - **removed** — Remove unused EcmaAst::is_body_empty - **removed** — Remove dead is_css_module handling in resolve_dependencies - **removed** — Remove redundant with_commonjs on cjs source type - **changed** — Avoid allocation in default_sanitize_file_name for clean names - **changed** — Box once-per-build futures before spawn_future in binding - **changed** — Avoid wasted allocation in legitimize_identifier_name ##### [1.1.3] - 2026-06-24 ###### 🐛 Bug Fixes - `defer_drop` crashes the browser main thread (#9942) by @shulaoda - camel-case: correct camel case for nested values (#9933) by @kb019 - cli: display --help options in camelCase (#9941) by @IWANABETHATGUY - preserve used re-exports under preserveModules (#9122) (#9934) by @IWANABETHATGUY - watch: make close reentrant in event callbacks (#9904) by @hyf0 - git for windows treats symlink files as regular files (#9915) by @AliceLanniste - dev: cancel pending full reload on build error (#9903) by @h-a-n-a - chunking: pass plugin meta to codeSplitting groups name function (#9267) by @Kyujenius - dev: serve assets emitted during HMR/lazy compile (vite#22596) (#9815) by @h-a-n-a - release: dry-run step no longer publishes binding packages (#9866) by @Boshen ###### 🚜 Refactor - rolldown_common: model ModuleId as a classified Path/Virtual/Bare enum (#9927) by @Boshen - remove unused LegacyModuleIdx (#9872) by @shulaoda - remove unused StmtInfos::get_namespace_stmt_info (#9870) by @shulaoda - remove unused Module::as_external_mut (#9871) by @shulaoda - remove unused EcmaAst::is_body_empty (#9869) by @shulaoda - drop dead is_css_module handling in resolve_dependencies (#9867) by @shulaoda - drop redundant with_commonjs on cjs source type (#9868) by @shulaoda ###### 📚 Documentation - clarify on drafting PRs (#9952) by @h-a-n-a - update contribution guidelines (#9944) by @fubhy - note Rust crates don't follow semver in AGENTS.md (#9905) by @IWANABETHATGUY - add feedback form (#9159) by @TheAlexLichter ###### ⚡ Performance - utils: avoid allocation in default_sanitize_file_name for clean names (#9928) by @Boshen - binding: box once-per-build futures before spawn_future (#9864) by @Boshen - utils: avoid wasted allocation in legitimize_identifier_name (#9926) by @Boshen - rolldown: fuse the canonical-name dedup and insert in the renamer (#9900) by @Boshen - rolldown: probe the name map once in ConflictResolver::resolve (#9899) by @Boshen - cut two heap allocations from wrapped ESM init finalize (#9901) by @Boshen - rolldown_plugin_vite_reporter: hoist invariant out_dir prefix out of reporter loop (#9873) by @shulaoda - drop throwaway Vec in wrapped esm init stmt (#9878) by @shulaoda - borrow owner_filename in build-import-analysis AddDeps (#9874) by @shulaoda ###### 🧪 Testing - cover preserveModules named export via namespace re-export (#6010) (#9937) by @IWANABETHATGUY ###### ⚙️ Miscellaneous Tasks - deps: update napi to v3.9.4 (#9954) by @shulaoda - reduce noise from CODEOWNERS for trival changes (#9953) by @h-a-n-a - deps: update mimalloc-safe to 0.1.64 (#9950) by @shulaoda - deps: update rollup submodule for tests to v4.62.2 (#9931) by @rolldown-guard[bot] - deps: test mimalloc-safe upstream-mimalloc switch in CI (#9930) by @shulaoda - rolldown_plugin_vite_build_import_analysis: remove unused v2 code path (#9917) by @shulaoda - rolldown_plugin_vite_manifest: remove unused is_enable_v2 code path (#9916) by @shulaoda - rolldown_plugin_vite_asset_import_meta_url: remove unexposed native vite plugin (#9896) by @shulaoda - rolldown_plugin_vite_asset: remove unexposed native vite plugin (#9895) by @shulaoda - rolldown_plugin_vite_css_post: remove unexposed native vite plugin (#9894) by @shulaoda - rolldown_plugin_vite_css: remove unexposed native vite plugin (#9893) by @shulaoda - rolldown_plugin_vite_html_inline_proxy: remove unexposed native vite plugin (#9892) by @shulaoda - rolldown_plugin_vite_html: remove unexposed native vite plugin (#9891) by @shulaoda - deps: update github actions (#9909) by @renovate[bot] - deps: update rust crate oxc_sourcemap to v8.0.2 (#9910) by @renovate[bot] - deps: update npm packages (#9912) by @renovate[bot] - deps: update github actions to v7 (#9913) by @renovate[bot] - deps: update rolldown-plugin-dts to ^0.26.0 (#9897) by @renovate[bot] - remove rolldown_filter_analyzer crate (#9865) by @Boshen ###### ❤️ New Contributors * @fubhy made their fi _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.3]_ ### v1.1.2 - Date: 2026-06-18 - Version: v1.1.2 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.2 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.1.2 - **changed** — Honor explicit non-TS extensions in tsconfig include, allowing compilerOptions.paths to resolve for importers whose extension is explicitly listed in include such as .vue and .svelte files - **changed** — Auto-discovery no longer attaches the outermost ancestor tsconfig.json to files that no project owns, preventing aliases from leaking into unowned files - **added** — Add option names for invalid return type errors in more places - **added** — Infer decorator strictNullChecks from tsconfig in transform - **added** — Gate chrome-json trace layer behind chrome-tracing feature in tracing - **added** — Align test-dev-server with Vite dev server - **fixed** — Correct contradictory panic message in cjs cross-chunk symbol lookup - **fixed** — Preserve with clause on export * from external - **fixed** — Make external_import_binding_merger deterministic - **fixed** — Surface invalid manualCodeSplitting group test regex as an error - **fixed** — Avoid panic on output.file without a file name - **fixed** — Avoid O(N^2) rendering of high-volume diagnostics - **fixed** — Avoid panic on JSON numbers outside f64 range - **fixed** — Fix worker_threads segfault by bumping mimalloc-safe to 0.1.63 - **fixed** — Cache ESM evaluation errors - **fixed** — Wrap node require helper in pure IIFE - **fixed** — Load locally-used imports on a re-exported record in lazy-barrel - **fixed** — Avoid dangling wrapped-ESM init call across chunks - **fixed** — Detect same-second rewrites in CI poll watcher in dev - **fixed** — Force rebuild after HMR errors in dev ##### [1.1.2] - 2026-06-18 ###### 📝 Notable tsconfig behavior changes These ship via the `oxc_resolver` 11.21.3 bump (#9841) and affect `resolve.tsconfigPaths` (Vite 8 resolves through oxc-resolver): - **Honor explicit non-TS extensions in `include`** (oxc-project/oxc-resolver#1213). `compilerOptions.paths` now resolve for importers whose extension is explicitly listed in a tsconfig's `include` (e.g. `src/**/*.vue`, `src/**/*.svelte`). Previously oxc-resolver filtered importers by extension before evaluating the `include` globs, so a `.vue`/`.svelte` file listed in `include` never matched its project and its `paths` were skipped. This unblocks the default create-vite Vue + TS layout (a solution-style root plus a referenced `tsconfig.app.json` that declares `paths` and `include: ["src/**/*.ts", "src/**/*.vue"]`). Matches vue-tsc and svelte-check, which register these extensions via TypeScript's `extraFileExtensions`. - **No fallback to the outermost tsconfig in auto-discovery** (oxc-project/oxc-resolver#1220). Auto-discovery no longer attaches the topmost ancestor `tsconfig.json` to a file that no project actually owns (via `files` / `include` / project references). Previously such a file inherited the outermost ancestor's `paths` / `baseUrl`, leaking aliases into files that project does not own. oxc-resolver now returns no config in that case, matching tsserver / typescript-go, which route such files to an inferred project with no aliases. ###### 🚀 Features - add option named for invalid return type errors for more places (#9846) by @shulaoda - add option names for invalid return type errors (#9821) by @sapphi-red - transform: infer decorator strictNullChecks from tsconfig (#9590) by @kylecannon - tracing: gate chrome-json trace layer behind `chrome-tracing` feature (#9773) by @hyf0 - dev: align test-dev-server with Vite dev server (#9668) by @h-a-n-a ###### 🐛 Bug Fixes - plugin_timings: point doc link to existing checks reference page (#9837) by @hyf0 - generator: correct contradictory panic message in cjs cross-chunk symbol lookup (#9836) by @hyf0 - esm: preserve with clause on export * from external (#9796) by @hyf0 - Make external_import_binding_merger deterministic (#9755) by @naruaway - surface invalid `manualCodeSplitting` group `test` regex as an error (#9792) by @shulaoda - avoid panic on `output.file` without a file name (#9789) by @shulaoda - avoid O(N^2) rendering of high-volume diagnostics (#9748) (#9749) by @IWANABETHATGUY - avoid panic on JSON numbers outside f64 range (#9788) by @shulaoda - deps: bump mimalloc-safe to 0.1.63 to fix worker_threads segfault (#9785) by @shulaoda - cache ESM evaluation errors (#9784) by @sapphi-red - wrap node require helper in pure IIFE (#9783) by @kb019 - lazy-barrel: load locally-used imports on a re-exported record (#9757) by @shulaoda - avoid dangling wrapped-ESM init call across chunks (#9502) (#9717) by @IWANABETHATGUY - dev: detect same-second rewrites in CI poll watcher (#9736) by @h-a-n-a - dev: force rebuild after HMR errors (#9686) by @h-a-n-a - dev: print build errors on browser refresh after a failed build (#9652) by @h-a-n-a ###### 🚜 Refactor - single-source the chunk $N symbol-naming algorithm (#9831) by @Dunqing - simplify common_dir helper (#9857) by @IWANABETHATGUY - drop commondir crate in favor of in-house helper (#9849) by @Boshen - binding: extract helpers from normalize_binding_options (#9842) by @Boshen - move rolldown_filter_analyzer to tasks and scope oxc cfg feature (#9839) by @Boshen - options: merge manualCodeSplitting into codeSplitting object form (#9805) by @IWANABETHATGUY - options: support codeSplitting object form in CodeSplittingMode (#9804) by @IWANABETHATGUY - diagnostic: reuse ByteLocator for per-source line lookup (#9762) by @IWANABETHATGUY - remove redundant Arc around tracing spans (#9778) by @camc314 - remove unnecessary `Arc` around sourcemap sender (#9777) by @camc314 - rolldo _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.2]_ ### v1.1.1 - Date: 2026-06-11 - Version: v1.1.1 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.1 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.1.1 - **added** — Introduce AstFactory for AST construction in ecmascript_utils - **added** — Report the full-reload reason for the invalidate-loop case in HMR - **fixed** — Resolver now honors package.json#type for .jsx/.tsx extensions - **fixed** — Explicit moduleSideEffects from a hook takes priority over package.json#sideEffects - **fixed** — Keep the rolldown-runtime name for the standalone runtime chunk - **fixed** — Request all exports for entry barrels on first encounter in lazy-barrel - **fixed** — Skip init_*() for tree-shaken wrapped ESM owners in finalizer - **fixed** — Order chunk.imports by execution order - **fixed** — Preserve slash separators for Sass partial exports in vite-resolve - **fixed** — Cross-chunk CJS wrapper no longer shadowed by author-local binding - **removed** — Drop no-op init calls for empty wrapped-ESM modules - **changed** — Precompute wrapped-ESM init metadata in generate stage - **changed** — Always split runtime module first - **changed** — Migrate multiple finalizers and utilities to use AstFactory ##### [1.1.1] - 2026-06-11 ###### 🚀 Features - ecmascript_utils: introduce AstFactory for AST construction (#9682) by @hyf0 - drop no-op init calls for empty wrapped-ESM modules (#9678) by @IWANABETHATGUY ###### 🐛 Bug Fixes - resolver: honor package.json#type for .jsx/.tsx extensions (#9690) (#9699) by @IWANABETHATGUY - hmr: report the full-reload reason for the invalidate-loop case (#9708) by @hyf0 - explicit `moduleSideEffects` from a hook must take priority over the `package.json#sideEffects` (#9688) by @sapphi-red - keep the `rolldown-runtime` name for the standalone runtime chunk (#9685) by @shulaoda - lazy-barrel: request all exports for entry barrels on first encounter (#9672) by @shulaoda - finalizer: skip init_*() for tree-shaken wrapped ESM owners (#9669) by @IWANABETHATGUY - order `chunk.imports` by execution order (#9654) by @chuganzy - vite-resolve: preserve slash separators for Sass partial exports (#9546) by @cjc0013 - cross-chunk CJS wrapper shadowed by author-local binding (#9648) by @IWANABETHATGUY ###### 🚜 Refactor - precompute wrapped-ESM init metadata in generate stage (#9712) by @IWANABETHATGUY - ecmascript_utils: fold construction ext traits onto AstFactory and delete AstSnippet (#9702) by @hyf0 - finalizer: finish ScopeHoistingFinalizer migration to AstFactory (#9701) by @hyf0 - finalizer: migrate module_finalizers/mod.rs to AstFactory (#9700) by @hyf0 - hmr: migrate hmr finalizer to AstFactory (#9695) by @hyf0 - plugin: migrate vite_build_import_analysis to AstFactory (#9693) by @hyf0 - scanner: migrate tweak_ast_for_scanning to AstFactory (#9683) by @hyf0 - always split runtime module first (#9419) by @IWANABETHATGUY ###### 📚 Documentation - tsconfig: correct auto-discovery resolution to match TypeScript (#9714) by @shulaoda - design: plan to unify all internal AST construction (#9673) by @hyf0 - tsconfig: align reference resolution docs with TypeScript behavior (#9641) by @shulaoda ###### ⚡ Performance - avoid per-module join Strings in scope-hoisting concatenation (#9645) by @Boshen - avoid intermediate Strings in the ESM export clause (#9644) by @Boshen - reuse a scratch buffer for facade namespace names in the scanner (#9642) by @Boshen - reuse the import-matching tracker stack across named imports (#9643) by @Boshen - avoid cloning the per-chunk export-items map in render_chunk_exports (#9639) by @Boshen - avoid CompactStr allocation in sorted-exports membership check (#9640) by @Boshen ###### 🧪 Testing - add more `moduleSideEffects` precedence tests (#9689) by @sapphi-red - 9651: drop shimMissingExports from regression fixture (#9674) by @IWANABETHATGUY ###### ⚙️ Miscellaneous Tasks - update react repo links (#9711) by @iiio2 - remove outdated pnpm configurations (#9666) by @btea - deps: update github actions to v2.81.5 (#9665) by @renovate[bot] - testing: migrate test harness off deprecated inlineDynamicImports (#9710) by @IWANABETHATGUY - hmr: delete commented-out dead code left from old register-module codegen (#9707) by @hyf0 - deps: update napi-rs toolchain (#9706) by @shulaoda - deps: update rollup submodule for tests to v4.61.1 (#9676) by @rolldown-guard[bot] - deps: update test262 submodule for tests (#9677) by @rolldown-guard[bot] - deps: update oxc to 0.135.0 (#9670) by @Boshen - pass ALGOLIA_APP_ID and ALGOLIA_API_KEY to void deploy (#9667) by @Boshen - deps: update github actions (#9662) by @renovate[bot] - deps: update rust crates (#9663) by @renovate[bot] - deps: update rolldown-plugin-dts to v0.25.2 (#9661) by @renovate[bot] - deps: update typos to v1.47.2 (#9660) by @renovate[bot] - deps: update docs dependencies (#9657) by @bddjr - deps: update typos to v1.47.1 (#9655) by @renovate[bot] - deploy website in its own workflow, only on docs output change (#9650) by @Boshen - publish to pkg.pr.new add pm and `commentWithDev` option (#9638) by @btea ###### ❤️ New Contributors * @chuganzy made their first contribution in [#9654](https://github.com/rolldown/rolldown _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.1]_ ### v1.1.0 - Date: 2026-06-03 - Version: v1.1.0 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.0 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.1.0 - **changed** — experimental.lazyBarrel is now enabled by default, skipping compilation of re-exported modules that are never used in barrel modules recognized as side-effect-free - **changed** — tsconfig project-reference resolution now aligns with TypeScript by searching upward from the file's directory and using the first tsconfig.json that owns the file - **changed** — tsconfig referenced project that includes a file now takes precedence over the root instead of the root matching it first - **changed** — tsconfig allowJs option is now decided by each referenced project's own setting instead of the root's - **added** — import.meta.glob now supports caseSensitive option - **added** — add SOURCEMAP_BROKEN warning for renderChunk hook - **added** — add SOURCEMAP_BROKEN warning for transform hook - **added** — add @__NO_SIDE_EFFECTS__ hint for invalid @__PURE__ before function declarations - **added** — code-splitting now supports group-local includeDependenciesRecursively > [!IMPORTANT] > **This is a minor release.** Two changes alter default behavior compared to `1.0.3`. Please read this section before upgrading. Everything else is additive (new features, fixes, deps). ##### ⚠️ Notable behavior changes ###### 1. `experimental.lazyBarrel` is now enabled by default (#9632) **What changed.** `experimental.lazyBarrel` now defaults to `true`. When a barrel module is recognized as side-effect-free, Rolldown skips compiling the re-exported modules that are never actually used. **Impact.** For codebases with large barrel files (component libraries such as Ant Design, `@mui/icons-material`, etc.) this is a meaningful build-time speedup, and for the vast majority of projects the emitted output is unchanged. In rare cases where a barrel is *incorrectly* treated as side-effect-free, the optimization could drop a module that was being relied on for its side effects. **How to opt out (backward compatible).** ```js // rolldown.config.js export default { experimental: { lazyBarrel: false }, } ``` > Note: this opt-out flag is planned to be removed in a future release. If you have a case where you must turn it off, please open an issue so we can fix the underlying detection instead. --- ###### 2. `tsconfig` project-reference resolution now aligns with TypeScript Upgrading `oxc_resolver` (`11.19.1` → `11.20.0` in #9549, then `→ 11.21.0` in #9634) changes how Rolldown discovers and resolves `tsconfig.json`, in particular for a *solution-style* config (one that only lists `references` and delegates the real settings to `tsconfig.app.json` / `tsconfig.node.json`, as Vite scaffolds), bringing it **in line with how TypeScript (`tsc` / `tsserver`) itself behaves**: - **Auto-discovery walk-up** (oxc-resolver [#1154](https://github.com/oxc-project/oxc-resolver/pull/1154)): in auto-discovery mode (`tsconfig: true`, the default), Rolldown now searches **upward** from the file's directory and uses the first `tsconfig.json` that **owns** the file. A `tsconfig.json` owns the file when the file matches its `files`/`include`/`exclude`, or when one of its `references` matches the file. A `tsconfig.json` that does not own the file is skipped, and the search continues in the parent directory. When no `tsconfig.json` up the tree owns the file, Rolldown falls back to the **outermost (topmost)** one found, not the nearest. Previously the nearest `tsconfig.json` was used unconditionally. This mirrors how TypeScript's `tsserver` assigns a file to a project. - **Reference match priority** (oxc-resolver [#1151](https://github.com/oxc-project/oxc-resolver/pull/1151)): when the root has `references`, a referenced project that includes the file now **takes precedence over the root**, instead of the root matching it first (this is what TypeScript already does). So that project's `compilerOptions.paths` now apply. - **`allowJs`** (oxc-resolver [#1198](https://github.com/oxc-project/oxc-resolver/pull/1198)): whether a `.js`/`.jsx`/`.mjs`/`.cjs` file is included is now decided by **each referenced project's own** `allowJs`, not the root's (again matching TypeScript). So `tsconfig.app.json` with `allowJs: true` + `paths` now resolves aliases for `.js` files even when the root doesn't set `allowJs`. For most projects this is a fix (the standard Vite `paths` aliases now resolve, closes rolldown/rolldown#8468), but it **is** a behavior change if you relied on the previous behavior, where the root's `paths` / `allowJs` took precedence. **If you relied on the old "root wins" behavior.** There is no exact toggle back, because the old behavior was the bug being fixed. The recommended path is to align your config with TypeScript: declare the `paths` / `allowJs` on the referenced project that actually owns the files. If you must keep the old precedence while still using `references`: a referenced project's match wins, and **the first matching `references` entry takes priority** (the root is only a fall _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.1.0]_ ### v1.0.3 - Date: 2026-05-27 - Version: v1.0.3 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.0.3 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.0.3 - **added** — Respect decorator strictNullChecks option in transform - **removed** — Drop defer keyword - **fixed** — onOutput called twice when initial build fails - **fixed** — Make ensureCurrentBuildFinish not returning error when engine closes - **fixed** — Route require() to CJS helper variant in oxc-runtime - **fixed** — Use exporter chunk's export mode for CJS default re-exports in generator - **fixed** — Always run reduced-atom static cycle check in rolldown - **fixed** — Apply transform.dropLabels before scanning - **fixed** — Keep the scan-stage cache consistent when a build fails - **fixed** — Skip JSON default-import namespace optimization for write targets - **changed** — Distinguish map: null vs map: undefined in transform hook output - **changed** — Thread ast_table by value into codegen consumer for generation - **changed** — Replace _reExport construction with a direct call to avoid calling clone_in in finalizers - **changed** — Reorder hot-path boolean checks to short-circuit on cheap predicates first ##### [1.0.3] - 2026-05-27 ###### 🚀 Features - transform: respect decorator strictNullChecks option (#9580) by @kylecannon - drop `defer` keyword (#9503) by @TheAlexLichter ###### 🐛 Bug Fixes - ci: create target dir before cargo release-oxc update (#9584) by @shulaoda - ci: reorder prepare-release steps to avoid dirty git check failure (#9583) by @shulaoda - testing: canonicalize temp dir early and use platform-specific separator in test262 (#9582) by @shulaoda - testing: resolve symlinked temp dir in test262 snapshot normalization (#9581) by @shulaoda - testing: canonicalize temp dir path in test262 snapshot normalization (#9579) by @shulaoda - dev: `onOutput` called twice when initial build fails (#9552) by @hyf0 - dev: make `ensureCurrentBuildFinish` not returning error when engine closes (#9564) by @h-a-n-a - oxc-runtime: route require() to CJS helper variant (#9263) (#9526) by @IWANABETHATGUY - generator: use exporter chunk's export mode for CJS default re-exports (#9299) (#9529) by @IWANABETHATGUY - rolldown: always run reduced-atom static cycle check (#9441) (#9514) by @IWANABETHATGUY - apply transform.dropLabels before scanning (#9521) (#9522) by @IWANABETHATGUY - rolldown_watcher: take `rolldown` dep through the workspace (#9510) by @Boshen - cache: keep the scan-stage cache consistent when a build fails (#9495) by @h-a-n-a - skip JSON default-import namespace optimization for write targets (#9484) (#9489) by @IWANABETHATGUY - deps: skip pnpm frozen-lockfile on Netlify to dodge catalog mismatch bug (#9471) by @Boshen ###### 🚜 Refactor - oxc-runtime: use Cow for helper path construction (#9538) by @IWANABETHATGUY - fold import defer phase drop into PreProcessor (#9524) by @IWANABETHATGUY - distinguish `map: null` vs `map: undefined` in transform hook output (#9497) by @sapphi-red ###### 📚 Documentation - explain the policy for Rust crates (#9547) by @sapphi-red - cache: add design doc for cache (#9544) by @h-a-n-a - guide/troubleshooting: add TDZ error section (#9537) by @sapphi-red - dev-engine: add design doc for dev-engine (#9479) by @h-a-n-a - lazy-barrel: tweak some words (#9483) by @shulaoda - lazy-barrel: expand reasoning behind LARGE_BARREL_MODULES advice (#9477) by @shulaoda ###### ⚡ Performance - generate: thread ast_table by value into codegen consumer (#9555) by @Boshen - finalizers: replace `_reExport` construction with a direct call to avoid calling `clone_in` (#9501) by @Dunqing - reorder hot-path boolean checks to short-circuit on cheap predicates first (#9523) by @Boshen ###### 🧪 Testing - rolldown: regression fixture for #9401 (#9418) by @IWANABETHATGUY - failing test for #9441 (#9504) by @TheAlexLichter ###### ⚙️ Miscellaneous Tasks - deps: upgrade oxc to 0.133.0 (#9563) by @Dunqing - deps: update crate-ci/typos action to v1.46.3 (#9576) by @renovate[bot] - deps: update mimalloc-safe to 0.1.62 (#9577) by @shulaoda - mimalloc-safe: update to a bug-fix branch for verification (#9569) by @shulaoda - deps: update test262 submodule for tests (#9551) by @rolldown-guard[bot] - point published crates' readme to root README.md (#9553) by @Boshen - replace actions-cool/issues-helper with gh CLI (#9543) by @Boshen - deps: update cargo-shear to 1.12.4 (#9541) by @Boshen - deps: update taiki-e/install-action action to v2.79.4 (#9535) by @renovate[bot] - deps: update github actions (#9532) by @renovate[bot] - deps: update rust crates (#9534) by @renovate[bot] - deps: update npm packages (#9533) by @renovate[bot] - gate experimental/testing-only items to silence dead_code in publish builds (#9517) by @Boshen - docs: deploy to Void (#9509) by @Boshen - release: set up cargo-release-oxc for publishing crates (#9476) by @Boshen - rolldown_plugin_lazy_compilation: add missing description (#9507) by @Boshen - mimalloc-safe: update to a bug-fix branch for verification (#9506) by @shulaoda - deps: update crate-ci/typos action to v1.46.2 (#9468) by @renovate[bot] ###### ❤️ New Contributors * @kylecanno _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.0.3]_ ### v1.0.2 - Date: 2026-05-20 - Version: v1.0.2 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.0.2 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.0.2 - **added** — Devtools emit package size in PackageGraphReady - **added** — Devtools classify package dependency types - **added** — Devtools map packages to modules and chunks - **added** — Devtools mark used packages - **added** — Devtools make duplicate packages discoverable - **added** — Devtools emit package metadata - **changed** — Update oxc to 0.132.0 - **changed** — Update oxc to 0.131.0 - **added** — Allow checks.* to escalate emissions to hard errors - **added** — Dev watcher support for options `include` and `exclude` - **added** — Emit warnings for invalid pure annotations - **fixed** — Keep chunk file names stable when an unrelated entry is added - **fixed** — Call `codeSplitting.groups[].name` in deterministic order - **fixed** — Make `resolve_id` idempotent when the resolved id is already a lazy entry - **fixed** — Publish absorbed dynamic-entry namespace cross-chunk - **fixed** — Propagate pure annotation through compound expressions - **fixed** — Skip redundant init call when barrel executes in same chunk - **fixed** — Initialize wrapped ESM re-export owners - **fixed** — Do not inherit __toESM across chunks for named-only external imports - **fixed** — Watcher does not write output or emit events after close() ##### [1.0.2] - 2026-05-20 ###### 🚀 Features - devtools: emit package size in PackageGraphReady (#9434) by @IWANABETHATGUY - devtools: classify package dependency types (#9427) by @IWANABETHATGUY - devtools: map packages to modules and chunks (#9426) by @IWANABETHATGUY - devtools: mark used packages (#9423) by @IWANABETHATGUY - devtools: make duplicate packages discoverable (#9422) by @IWANABETHATGUY - devtools: emit package metadata (#9421) by @IWANABETHATGUY - update oxc to 0.132.0 (#9449) by @shulaoda - update oxc to 0.131.0 (#9424) by @shulaoda - allow checks.* to escalate emissions to hard errors (#9388) by @IWANABETHATGUY - dev: support watcher options `include` and `exclude` (#9395) by @h-a-n-a - emit warnings for invalid pure annotations (#9381) by @Kyujenius ###### 🐛 Bug Fixes - hash: keep chunk file names stable when an unrelated entry is added (#9444) by @hyf0 - call `codeSplitting.groups[].name` in deterministic order (#9457) by @sapphi-red - dev/lazy: make `resolve_id` idempotent when the resolved id is already a lazy entry (#9439) by @h-a-n-a - chunk-optimization: publish absorbed dynamic-entry namespace cross-chunk (#9448) by @IWANABETHATGUY - treeshake: propagate pure annotation through compound exprs (#9431) by @Dunqing - finalizer: skip redundant init call when barrel executes in same chunk (#9354) by @IWANABETHATGUY - linking: initialize wrapped ESM re-export owners (#9353) by @IWANABETHATGUY - do not inherit __toESM across chunks for named-only external imports (#9333) (#9415) by @IWANABETHATGUY - watcher: don't write output or emit events after close() (#9328) by @situ2001 - chunk-optimization: avoid unsafe dynamic-only merges (#9398) by @IWANABETHATGUY - cjs: rename CJS-wrapped locals that would shadow chunk-scope names (#9392) by @hyf0 - dev/lazy: watch lazy modules added in rebuilds (#9391) by @h-a-n-a ###### 🚜 Refactor - rolldown_dev: move dev example to break publish cycle (#9465) by @Boshen - binding: drop unsafe napi string helper, hoist transform ArcStr (#9456) by @hyf0 - ecmascript_utils: split rewrite_ident_reference off JsxExt trait (#9417) by @IWANABETHATGUY - use `ThreadsafeFunction::call_async_catch` (#9390) by @sapphi-red ###### 📚 Documentation - devtools: document @rolldown/debug usage and package graph consumption (#9435) by @IWANABETHATGUY - replace `Inter` with system font stack in OG template SVG (#9240) by @yvbopeng - remove `output.comments` warning as all issues have been resolved (#9393) by @sapphi-red - in-depth: clarify @__PURE__ scope and document positions (#9389) by @Kyujenius - readme: remove release candidate notice (#9387) by @shulaoda ###### ⚡ Performance - vite-resolve: cache importer existence checks (#9443) by @Brooooooklyn - binding: reduce plugin string clones (#9436) by @Brooooooklyn ###### 🧪 Testing - enable `legal_comments_inline` test (#9394) by @sapphi-red ###### ⚙️ Miscellaneous Tasks - bump pnpm to v11.1.2 (#9447) by @Boshen - deps: update rust crates (#9461) by @renovate[bot] - deps: update rollup submodule for tests to v4.60.4 (#9453) by @rolldown-guard[bot] - deps: update test262 submodule for tests (#9454) by @rolldown-guard[bot] - deps: update npm packages (#9430) by @renovate[bot] - deps: update github actions (#9429) by @renovate[bot] - deps: update dependency rolldown-plugin-dts to v0.25.1 (#9452) by @renovate[bot] - deps: update rust crates (#9428) by @renovate[bot] - revert allow checks.* to escalate emissions to hard errors (#9388) (#9438) by @IWANABETHATGUY - update mimalloc-safe to 0.1.61 (#9413) by @shulaoda - deny `todo`, `unimplemented`, and `print_stderr` clippy lints (#9412) by @Boshen - deps: update mimalloc-safe to 0.1.60 (#9410) by @shulaoda - remove `pip install setuptools` workaround for node-gyp on macOS (#9370) by @sapphi-red - renovate: disable automerge to require manual approval (#9386) by @shulaoda - deps: update napi (#9385) by @renovate[bot] ###### ❤️ New Contributors * @yvbopeng made their first contribution i _[Truncated at 4000 characters — full notes: https://github.com/rolldown/rolldown/releases/tag/v1.0.2]_ ### v1.0.1 - Date: 2026-05-13 - Version: v1.0.1 - Original notes: https://github.com/rolldown/rolldown/releases/tag/v1.0.1 - Permalink: https://whatsnew.fyi/product/rolldown/releases/v1.0.1 - **added** — experimental/lazy-barrel: advice on oversized barrel modules - **added** — rolldown: inline optional-chain enum access - **added** — chunk-optimization: dedupe already-loaded dynamic deps - **added** — binding: call moduleParsed hook in ParallelJsPlugin - **fixed** — transform: enable enum_eval for transformSync and vite TS transform - **fixed** — error: remove severity prefix from diagnostic messages - **fixed** — dev/lazy: fix exports of lazy requests in lazy chunks - **fixed** — rolldown_plugin_vite_resolve: handle errors in resolveSubpathImports callback - **fixed** — rolldown_plugin_lazy_compilation: use loadExports for fetched proxy to preserve original export names - **fixed** — common: include offending index in HybridIndexVec panic message - **changed** — binding: enable mimalloc v3 to reduce idle memory - **changed** — migrate @rolldown/pluginutils to rolldown/plugins - **changed** — deps: upgrade oxc to 0.130.0 ##### [1.0.1] - 2026-05-13 ###### 🚀 Features - experimental/lazy-barrel: advice on oversized barrel modules (#9236) by @shulaoda - rolldown: inline optional-chain enum access (#9379) by @Dunqing - chunk-optimization: dedupe already-loaded dynamic deps (#9305) by @IWANABETHATGUY - binding: call moduleParsed hook in ParallelJsPlugin (#9318) by @jaehafe ###### 🐛 Bug Fixes - transform: enable `enum_eval` for `transformSync` and vite TS transform (#9325) by @Dunqing - error: remove severity prefix from diagnostic messages (#9262) by @Kyujenius - deps: pin pnpm to 10.23.0 to work around catalog mismatch on Netlify (#9364) by @shulaoda - ci: pin mimalloc-safe to 0.1.58 (#9361) by @shulaoda - dev/lazy: fix exports of lazy requests in lazy chunks (#9249) by @h-a-n-a - rolldown_plugin_vite_resolve: handle errors in `resolveSubpathImports` callback (#9355) by @sapphi-red - rolldown_plugin_lazy_compilation: use loadExports for fetched proxy to preserve original export names (#9132) by @h-a-n-a - common: include offending index in HybridIndexVec panic message (#9296) by @SAY-5 ###### 🚜 Refactor - ecmascript: extract semantic_builder_for_transform helper (#9326) by @Dunqing - test: extract reusable static-import-cycle helper (#9332) by @IWANABETHATGUY ###### 📚 Documentation - clarify scope of `topLevelVar` (#9380) by @IWANABETHATGUY - meta/design: add ast-mutation design doc (#9338) by @hyf0 - feat: add ai policy in contribution guide (#9315) by @mdong1909 ###### ⚡ Performance - binding: enable mimalloc v3 to reduce idle memory (#9349) by @shulaoda ###### 🧪 Testing - mcs: cover require() in `$initial` group (#9376) by @hyf0 - add regression for CJS facade chunk merge into entry (#9351) by @IWANABETHATGUY ###### ⚙️ Miscellaneous Tasks - switch prepare-release to manual dispatch with version input (#9383) by @shulaoda - migrate `@rolldown/pluginutils` to `rolldown/plugins` (#9317) by @shulaoda - deps: pin libmimalloc-sys2 to 0.1.54 (#9372) by @shulaoda - replace `igorskyflyer/action-readfile` with `cat` (#9369) by @sapphi-red - deps: update test262 submodule for tests (#9371) by @rolldown-guard[bot] - use app token for test dep update PRs (#9368) by @sapphi-red - replace some actions with gh commands (#9367) by @sapphi-red - replace action-semantic-pull-request with inline regex (#9366) by @sapphi-red - remove pull_request_target workflows (#9188) by @Boshen - deps: upgrade oxc to 0.130.0 (#9360) by @shulaoda - deps: update github actions (major) (#9348) by @renovate[bot] - deps: update github actions (#9341) by @renovate[bot] - deps: update rust crates (#9344) by @renovate[bot] - deps: update crate-ci/typos action to v1.46.1 (#9357) by @renovate[bot] - deps: update npm packages (#9343) by @renovate[bot] - deps: update pnpm to v10.33.4 (#9347) by @renovate[bot] - deps: update dependency rolldown-plugin-dts to ^0.25.0 (#9346) by @renovate[bot] - .claude: add rolldown-repl encoder, rename decode skill (#9352) by @IWANABETHATGUY - deps: update crate-ci/typos action to v1.46.0 (#9345) by @renovate[bot] - deps: update napi to v3.8.6 (#9342) by @renovate[bot] - deps: update dependency vite-plus to v0.1.20 (#9340) by @renovate[bot] - enable rollup chunking-form test (#9335) by @IWANABETHATGUY - typo: fix typo in watcher options comment (#9324) by @thescripted ###### ❤️ New Contributors * @Kyujenius made their first contribution in [#9262](https://github.com/rolldown/rolldown/pull/9262) * @SAY-5 made their first contribution in [#9296](https://github.com/rolldown/rolldown/pull/9296) * @thescripted made their first contribution in [#9324](https://github.com/rolldown/rolldown/pull/9324) Co-authored-by: shulaoda <165626830+shulaoda@users.noreply.github.com>