Releases: rolldown/rolldown
v1.1.1
[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
moduleSideEffectsfrom a hook must take priority over thepackage.json#sideEffects(#9688) by @sapphi-red - keep the
rolldown-runtimename 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.importsby 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
moduleSideEffectsprecedence 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
commentWithDevoption (#9638) by @btea
❤️ New Contributors
v1.1.0
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).
// 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): in auto-discovery mode (
tsconfig: true, the default), Rolldown now searches upward from the file's directory and uses the firsttsconfig.jsonthat owns the file. Atsconfig.jsonowns the file when the file matches itsfiles/include/exclude, or when one of itsreferencesmatches the file. Atsconfig.jsonthat does not own the file is skipped, and the search continues in the parent directory. When notsconfig.jsonup the tree owns the file, Rolldown falls back to the outermost (topmost) one found, not the nearest. Previously the nearesttsconfig.jsonwas used unconditionally. This mirrors how TypeScript'stsserverassigns a file to a project. - Reference match priority (oxc-resolver #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'scompilerOptions.pathsnow apply. allowJs(oxc-resolver #1198): whether a.js/.jsx/.mjs/.cjsfile is included is now decided by each referenced project's ownallowJs, not the root's (again matching TypeScript). Sotsconfig.app.jsonwithallowJs: true+pathsnow resolves aliases for.jsfiles even when the root doesn't setallowJs.
For most projects this is a fix (the standard Vite paths aliases now resolve, closes #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 fallback when no reference claims the file). So extract the old root settings into their own config and list it first:
// tsconfig.json (solution root)
{
"files": [],
"references": [
{ "path": "./tsconfig.base.json" }, // old root paths/allowJs — listed first, so it wins
{ "path": "./tsconfig.app.json" },
{ "path": "./tsconfig.node.json" }
]
}tsconfig.base.json should carry the paths you previously declared on the root, plus allowJs: true if it needs to claim .js files (the extension is checked against each config's own allowJs). With no include, it defaults to **/* under its directory and claims every file first.
One consequence of the new walk-up behavior to keep in mind: this solution root (files: [], only references) has no file patterns of its own, so it owns a file only when one of its references matches it. When no tsconfig.json owns the file (for example a file outside tsconfig.base.json's directory), Rolldown does not fall back to this tsconfig.json. It keeps searching upward through ancestor directories. Before this release the nearest tsconfig.json was used unconditionally, so such files previously stopped at this solution root.
Alternatively, bypass reference resolution entirely by pointing the top-level tsconfig option at a single config: export default { tsconfig: './tsconfig.app.json' }.
[1.1.0] - 2026-06-03
🚀 Features
- enable
experimental.lazyBarrelby default (#9632) by @shulaoda import.meta.globsupportcaseSensitiveoption (#9594) by @btea- add
SOURCEMAP_BROKENwarning for renderChunk hook (#9601) by @sapphi-red - add
SOURCEMAP_BROKENwarning for transform hook (#9600) by @sapphi-red - add
@__NO_SIDE_EFFECTS__hint for invalid@__PURE__before function declarations (#9505) by @Copilot - code-splitting: support group-local
includeDependenciesRecursively(#9587) by @hyf0
🐛 Bug Fixes
- report TSCONFIG_ERROR instead of UNHANDLEABLE_ERROR for a missing tsconfig file (#9633) by @shulaoda
- browser: add missing exports and ensure consistency with
rolldownpackage (#9629) by @sapphi-red - should build test-dev-server when test-node (#9610) by @situ2001
- chunk-optimizer: refuse asymmetric merge for cyclic dynamic entries (#9320) (#9322) by @aminpaks
- dev: handle the remaining errors in dev (#9570) by @h-a-n-a
- handle slash-normalized ids with preserveModulesRoot (#9595) by @IWANABETHATGUY
- json: preserve .default access on JSON default imports (#9568) by @IWANABETHATGUY
- testing: remove unintended trigger_full_build from test harness (#9573) by @hyf0
🚜 Refactor
- js-regex: use regress native replace/replace_all (#9607) by @IWANABETHATGUY
- remove never-constructed
ImportStatusvariants (#9606) by @Boshen
📚 Documentation
- clarify that
RolldownBuild::closemethod should be called in most cases (#9619) by @sapphi-red
⚡ Performance
- avoid unnecessary intermediate sourcemaps (#9599) by @sapphi-red
🧪 Testing
- add unit test for collapsing module sourcemap (#9626) by @sapphi-red
- cover vite-alias regex capture-group expansion (#9602) (#9608) by @IWANABETHATGUY
⚙️ Miscellaneous Tasks
- deps: update oxc_resolver to 11.21.0 (#9634) by @shulaoda
- update invalid option diagnostic link to point to Rolldown docs (#9631) by @sapphi-red
- deps: update vite+ to v0.1.24 (#9628) by @renovate[bot]
- deps: update oxc resolver to v11.20.0 (#9549) by @renovate[bot]
- deps: update dependency vite-plus to v0.1.24 (#9470) by @renovate[bot]
- deps: update npm packages (#9614) by @renovate[bot]
- deps: upgrade oxc to 0.134.0 (#9625) by @shulaoda
- deps: update crate-ci/typos action to v1.47.0 (#9620) by @renovate[bot]
- deps: update rollup submodule for tests to v4.61.0 (#9623) by @rolldown-guard[bot]
- deps: update github actions (#9613) by @renovate[bot]
- deps: update pnpm to v11.4.0 (#9616) by @renovate[bot]
- deps: update rust crates (#9615) by @renovate[bot]
- deps: update test262 submodule for tests (#9624) by @rolldown-guard[bot]
- deps: update dependency @napi-rs/cli to v3.7.0 (#9588) by @renovate[bot]
- deps: update dependency rust to v1.96.0 (#9596) by @renovate[bot]
- re-enable WASI testing with proper infrastructure (#9397) by @Boshen
❤️ New Contributors
Co-authored-by: shulaoda 165626830+shulaoda@users.noreply.github.com
v1.0.3
[1.0.3] - 2026-05-27
🚀 Features
- transform: respect decorator strictNullChecks option (#9580) by @kylecannon
- drop
deferkeyword (#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:
onOutputcalled twice when initial build fails (#9552) by @hyf0 - dev: make
ensureCurrentBuildFinishnot 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
rolldowndep 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: nullvsmap: undefinedin 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
_reExportconstruction with a direct call to avoid callingclone_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
- @kylecannon made their first contribution in #9580
v1.0.2
[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
includeandexclude(#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[].namein deterministic order (#9457) by @sapphi-red - dev/lazy: make
resolve_ididempotent 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
Interwith system font stack in OG template SVG (#9240) by @yvbopeng - remove
output.commentswarning 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_inlinetest (#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, andprint_stderrclippy lints (#9412) by @Boshen - deps: update mimalloc-safe to 0.1.60 (#9410) by @shulaoda
- remove
pip install setuptoolsworkaround 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
Co-authored-by: shulaoda 165626830+shulaoda@users.noreply.github.com
v1.0.1
[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_evalfortransformSyncand 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
resolveSubpathImportscallback (#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
🧪 Testing
- mcs: cover require() in
$initialgroup (#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/pluginutilstorolldown/plugins(#9317) by @shulaoda - deps: pin libmimalloc-sys2 to 0.1.54 (#9372) by @shulaoda
- replace
igorskyflyer/action-readfilewithcat(#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
- @SAY-5 made their first contribution in #9296
- @thescripted made their first contribution in #9324
Co-authored-by: shulaoda 165626830+shulaoda@users.noreply.github.com
v1.0.0
[1.0.0] - 2026-05-07
🐛 Bug Fixes
- dev/lazy: lazily compiled modules should be watched (#9301) by @h-a-n-a
- implement dynamic dominator merge logic (#9270) by @TheAlexLichter
- dev: apply __toCommonJS interop when CJS requires ESM in HMR finalizer (#9261) by @h-a-n-a
🚜 Refactor
- ecma_ast: tighten allocator access to enforce Sync invariant (#9278) by @IWANABETHATGUY
- scan_stage: remove stmt_infos field from EcmaView (#9276) by @IWANABETHATGUY
- link_stage: detach stmt_infos from EcmaView (#9274) by @IWANABETHATGUY
- link_stage: detach depended_runtime_helper from EcmaView to remove unsafe (#9265) by @IWANABETHATGUY
- link_stage: remove unsafe in determine_module_exports_kind (#9253) by @IWANABETHATGUY
📚 Documentation
- getting-started: remove RC warning for 1.0.0 release (#9310) by @shulaoda
- getting-started: update version references for 1.0.0 release (#9309) by @shulaoda
- add Vite+ tab to getting-started snippets (#9285) by @shulaoda
- lazy-barrel: clarify own-exports behavior for import-then-export records (#9298) by @shulaoda
- restructure top navigation around Learn vs Reference (#9284) by @shulaoda
- builtin-plugins: add bundle analyzer plugin docs (#9292) by @shulaoda
- design doc for reference_needed_symbols (#9264) by @IWANABETHATGUY
⚡ Performance
- devtools: write logs on a background thread (#9219) by @IWANABETHATGUY
⚙️ Miscellaneous Tasks
- mark esbuild/ts/parameter_props_use_define_for_class_fields_true as passed (#9308) by @sapphi-red
- deps: upgrade oxc to 0.129.0 (#9297) by @shulaoda
- deps: update rollup submodule for tests to v4.60.3 (#9294) by @sapphi-red
- deps: update test262 submodule for tests (#9295) by @sapphi-red
- ai: add rolldown REPL decode skill (#9245) by @Dunqing
v1.0.0-rc.18
[1.0.0-rc.18] - 2026-04-29
💥 BREAKING CHANGES
- optimization: default unspecified inlineConst.mode to smart (#9248) by @IWANABETHATGUY
🐛 Bug Fixes
- rolldown_plugin_vite_import_glob: return error instead of panicking when virtual module uses a relative glob (#9241) by @shulaoda
- binding: treat empty inlineConst object as omitted (#9247) by @IWANABETHATGUY
- rolldown: keep enum declaration for optional-chain access (#9229) by @Dunqing
- link_stage: restore inline let-else in exports-kind filter (#9237) by @IWANABETHATGUY
- dev/lazy: avoid module reinitialization in lazy compilation patches (#9179) by @h-a-n-a
- dev: visit identifier references for runtime rewrites in HMR finalizer (#9191) by @h-a-n-a
- chunk-optimizer: pick dominator for runtime placement to avoid cycles (#9164) by @IWANABETHATGUY
- make
this.emitFilechunk path synchronous to avoid deadlock (#9031) by @lazarv - use sentinel id for
browser: falseignored modules (#9192) by @shulaoda - prevent chunk optimizer from creating import cycles (#9228) by @IWANABETHATGUY
🚜 Refactor
- replace tokio::sync::Mutex with std::sync::Mutex for non-IO data (#9176) by @shulaoda
- rolldown_plugin_vite_import_glob: do not rewrite import path for absolute base (#9195) by @shulaoda
- runtime_helper: wrap DependedRuntimeHelperMap in a struct (#9215) by @IWANABETHATGUY
- drop redundant clear() in determine_safely_merge_cjs_ns (#9206) by @IWANABETHATGUY
- clean up generate_lazy_export (#9208) by @IWANABETHATGUY
- bitset: return bool from set_bit to fuse guard-and-set (#9207) by @IWANABETHATGUY
- link_stage: simplify exports-kind filter and clarify safety comments (#9205) by @IWANABETHATGUY
📚 Documentation
- determine_module_exports_kind (#9252) by @IWANABETHATGUY
- fix dead link to esbuild ESM/CJS interop tests (#9230) by @Copilot
- remove CSS bundling references (#9234) by @shulaoda
- correct IncrementalFullBuild row in BundleMode table (#9214) by @IWANABETHATGUY
- design: add bundler data lifecycle design doc (#9212) by @hyf0
- remove minifier alpha status notices (#9202) by @sapphi-red
⚙️ Miscellaneous Tasks
- upgrade oxc to 0.128.0 (#9260) by @shulaoda
- deps: bump rolldown-ariadne to 0.6.0 (#9254) by @IWANABETHATGUY
- deps: update github actions (#9259) by @renovate[bot]
- deps: update github actions (#9258) by @renovate[bot]
- remove renovate overrides (#9257) by @Boshen
- use ubuntu-latest for security workflow (#9256) by @Boshen
- notify Discord around release publish (#9251) by @Boshen
- add release environment to npm publish workflow (#9250) by @Boshen
- justfile: drop the
--separator before forwarded args invp run(#9246) by @shulaoda - deps: update test262 submodule for tests (#9243) by @sapphi-red
- add more tracing instrumentations (#9220) by @sapphi-red
- rolldown_plugin_vite_import_glob: remove outdated sourcemap doc comment (#9213) by @shulaoda
- update security workflow (#9201) by @Boshen
❤️ New Contributors
Co-authored-by: shulaoda 165626830+shulaoda@users.noreply.github.com
v1.0.0-rc.17
[1.0.0-rc.17] - 2026-04-22
🐛 Bug Fixes
- link: error on missing export between TS modules (#9197) by @IWANABETHATGUY
- rolldown_plugin_vite_import_glob: import path should not be affected by absolute base option (#9145) by @kermanx
this.resolve()returns null for bare relative paths without importer (#9142) by @Copilot- collect destructured bindings in HMR module exports (#9146) by @h-a-n-a
- esbuild-tests: handle 0.28.0 test cases (#9149) by @sapphi-red
- plugin/copy-module: honor external resolutions from other plugins (#9139) by @TheAlexLichter
- allow undefined in sourcesContent type (#9136) by @jurijzahn8019
- reduce false positives in chunk optimizer circular dependency detection (#9049) by @AlonMiz
🚜 Refactor
- chunk-optimizer: extract runtime-module placement into rehome_runtime_module (#9163) by @IWANABETHATGUY
📚 Documentation
- add design doc for sort_modules execution ordering (#9169) by @IWANABETHATGUY
- add document for
RenderedModule(#9147) by @sapphi-red
⚡ Performance
- rolldown_plugin_vite_import_glob: skip self-import earlier using raw path comparison (#9193) by @shulaoda
🧪 Testing
⚙️ Miscellaneous Tasks
- use app token for release PR (#9198) by @Boshen
- upgrade oxc to 0.127.0 (#9194) by @Dunqing
- use oxc security action (#9196) by @Boshen
- esbuild-tests: remove some tests from ignored list as enum inline is now supported (#9184) by @sapphi-red
- deps: update dependency vite-plus to v0.1.19 (#9183) by @renovate[bot]
- use vp instead of pnpm in check-wasi-binding-deps (#9182) by @shulaoda
- verify wasm32-wasi binding deps match @rolldown/browser before publish (#9162) by @shulaoda
- deps: update esbuild for tests to 0.28.0 (#9172) by @sapphi-red
- deps: update rollup submodule for tests to v4.60.2 (#9173) by @sapphi-red
- deps: update test262 submodule for tests (#9174) by @sapphi-red
- sort_modules: fix stale async-entry sort key comment (#9170) by @IWANABETHATGUY
- deps: update npm packages (#9157) by @renovate[bot]
- deps: update dependency diff to v9 (#9158) by @renovate[bot]
- deps: update rust crates (#9156) by @renovate[bot]
- run Windows CI on PRs labeled with
ci: windows(#9153) by @hyf0 - update-test-dependencies: run setup-rust before file changes (#9151) by @sapphi-red
- deps: update dependency rust to v1.95.0 (#9140) by @renovate[bot]
❤️ New Contributors
- @jurijzahn8019 made their first contribution in #9136
- @AlonMiz made their first contribution in #9049
Co-authored-by: shulaoda 165626830+shulaoda@users.noreply.github.com
v1.0.0-rc.16
[1.0.0-rc.16] - 2026-04-16
🚀 Features
- const enum cross-module inlining support (#8796) by @Dunqing
- implement module tagging system for code splitting (#9045) by @hyf0
🐛 Bug Fixes
- rolldown_plugin_vite_manifest: handle duplicate chunk names for CSS entries (#9059) by @sapphi-red
- improve error message for invalid return values in function options (#9125) by @shulaoda
- await async export-star init wrappers (#9101) by @thezzisu
- never panic during diagnostic emission (#9091) by @IWANABETHATGUY
- include array rest pattern in binding_identifiers (#9112) by @IWANABETHATGUY
- rolldown: set worker thread count with ROLLDOWN_WORKER_THREADS (#9086) by @fpotter
- rolldown_plugin_lazy_compilation: escape request ID in proxy modules (#9102) by @h-a-n-a
- treat namespace member access as side-effect-free (#9099) by @IWANABETHATGUY
- relax overly conservative side-effect leak check in chunk optimizer (#9085) by @IWANABETHATGUY
- runtime: release
cbreference after__commonJSfactory initialization (#9067) by @hyf0-agent @__NO_SIDE_EFFECTS__wrapper should not remove dynamic imports (#9075) by @IWANABETHATGUY- rolldown_plugin_vite_import_glob: use POSIX path join/normalize for glob resolution (#9077) by @shulaoda
- emit REQUIRE_TLA error when require() loads a module with top-level await (#9071) by @jaehafe
- emit namespace declaration for empty modules in manual chunks (#8993) by @privatenumber
- rolldown_plugin_vite_import_glob: keep common base on path segment boundary (#9070) by @shulaoda
- prevent circular runtime helper imports during facade elimination (#8989) (#9057) by @IWANABETHATGUY
- correct circular dependency check in facade elimination (#9047) by @h-a-n-a
- docs: correct dead link in CodeSplittingGroup.tags JSDoc (#9051) by @hyf0
- emit DUPLICATE_SHEBANG warning when banner contains shebang (#9026) by @IWANABETHATGUY
🚜 Refactor
- use semantic reference flags for member write detection (#9060) by @Dunqing
- extract UsedSymbolRefs newtype wrapper (#9130) by @IWANABETHATGUY
- dedupe await wrapping in export-star init emit (#9119) by @IWANABETHATGUY
- calculate side-effect-free function symbols on demand (#9120) by @IWANABETHATGUY
- extract duplicated top-level await handling into shared helper (#9087) by @IWANABETHATGUY
- rolldown_plugin_vite_import_glob: use split_first for get_common_base (#9069) by @shulaoda
- simplify ESM init deduplication with idiomatic insert check (#9044) by @IWANABETHATGUY
📚 Documentation
- document runtime module placement strategy in code-splitting design (#9062) by @IWANABETHATGUY
- clarify
optionshook behavior difference with Rollup in watch mode (#9053) by @sapphi-red - meta/design: introduce module tags (#9017) by @hyf0
⚡ Performance
- convert
generate_transitive_esm_initto iterative (#9046) by @IWANABETHATGUY
🧪 Testing
- merge strict/non_strict test variants using configVariants (#9089) by @IWANABETHATGUY
⚙️ Miscellaneous Tasks
- disable Renovate auto-updates for oxc packages (#9129) by @IWANABETHATGUY
- upgrade oxc@0.126.0 (#9127) by @Dunqing
- deps: update napi to v3.8.5 (#9126) by @renovate[bot]
- deps: update dependency @napi-rs/cli to v3.6.2 (#9123) by @renovate[bot]
- move lazy-compilation design doc (#9117) by @h-a-n-a
- deps: update dependency vite-plus to v0.1.18 (#9118) by @renovate[bot]
- deps: update dependency vite-plus to v0.1.17 (#9113) by @renovate[bot]
- deps: update oxc to v0.125.0 (#9094) by @renovate[bot]
- deps: update dependency follow-redirects to v1.16.0 [security] (#9103) by @renovate[bot]
- deps: update test262 submodule for tests (#9097) by @sapphi-red
- deps: update crate-ci/typos action to v1.45.1 (#9096) by @renovate[bot]
- deps: update rust crates (#9081) by @renovate[bot]
- deps: update npm packages (#9080) by @renovate[bot]
- remove outdated TODO in determine_module_exports_kind (#9072) by @jaehafe
- rust/test: support
extendedTests: falseshorthand in test config (#9050) by @hyf0 - ci: extract shared infra-changes anchor in path filters (#9054) by @hyf0
- add docs build check to catch dead links in PRs (#9052) by @hyf0
❤️ New Contributors
- @thezzisu made their first contribution in #9101
- @fpotter made their first contribution in #9086
- @jaehafe made their first contribution in #9071
- @privatenumber made their first contribution in #8993
Co-authored-by: shulaoda 165626830+shulaoda@users.noreply.github.com
v1.0.0-rc.15
[1.0.0-rc.15] - 2026-04-09
🐛 Bug Fixes
- prevent stack overflow in
generate_transitive_esm_initon circular dependencies (#9041) by @shulaoda
🚜 Refactor
Co-authored-by: shulaoda 165626830+shulaoda@users.noreply.github.com