Release Notes
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 a solution-style tsconfig.json (one that only lists references and delegates the real settings to tsconfig.app.json / tsconfig.node.json, as Vite scaffolds) is resolved, bringing it in line with how TypeScript (tsc) itself behaves:
- 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 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 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.
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
- @aminpaks made their first contribution in #9322
Co-authored-by: shulaoda [email protected]