Rolldown 1.1.0 Lands with lazyBarrel Enabled by Default

Rolldown 1.1.0 Lands with lazyBarrel Enabled by Default

lschvn

Rolldown 1.1.0 landed on June 3rd, 2026, and despite being a minor release, it ships two behavior changes that developers should review before upgrading.

lazyBarrel Enabled by Default

The headline change is that experimental.lazyBarrel now defaults to true. When a barrel module (a file that re-exports from other modules) is recognized as side-effect-free, Rolldown skips compiling the re-exported modules that are never actually imported by the consuming code.

The practical impact is most noticeable on large component libraries such as Ant Design or @mui/icons-material. In many codebases, these libraries export hundreds of icons or components through barrel files, but any given application only uses a handful. With lazyBarrel enabled by default, Rolldown can now skip the unused exports entirely, reducing both compile time and output bundle size.

The release notes acknowledge one edge case: if a barrel is incorrectly classified as side-effect-free, the optimization could drop a module that was being relied on for its side effects. The opt-out is straightforward for now:

export default {
  experimental: { lazyBarrel: false },
}

The Rolldown team notes this opt-out flag is planned for removal in a future release. If you encounter a case where you need to disable it, the recommendation is to open an issue so the underlying detection logic can be improved instead.

tsconfig Project Reference Resolution Now Matches TypeScript

The second change involves how Rolldown resolves paths through solution-style tsconfig files (the pattern Vite scaffolds by default, where tsconfig.json only lists references and delegates the real settings to tsconfig.app.json or tsconfig.node.json).

Upgrading oxc_resolver from 11.19.1 to 11.20.0, then to 11.21.0, brings Rolldown's resolution in line with how tsc itself behaves:

  • Reference match priority: when the root tsconfig has references, a referenced project that includes a file now takes precedence over the root. Previously the root matched first, which meant the root's compilerOptions.paths were applied even when a referenced project owned the file.
  • allowJs behavior: whether a .js, .jsx, .mjs, or .cjs file is included is now decided by each referenced project's own allowJs setting, not the root's. This means if tsconfig.app.json sets allowJs: true with path aliases, those aliases will now correctly resolve for .js files even when the root tsconfig does not set allowJs.

The release acknowledges this is a behavior change for projects that relied on the previous "root wins" resolution. The recommended path forward is to align your tsconfig structure with TypeScript's expectations rather than work around Rolldown's previous behavior.

Other Changes

The full changelog also includes:

  • import.meta.glob now supports a caseSensitive option
  • A SOURCEMAP_BROKEN warning is now emitted for the renderChunk and transform hooks when sourcemaps may be invalid
  • Improved error messaging: missing tsconfig files now report TSCONFIG_ERROR instead of UNHANDLEABLE_ERROR
  • Code-splitting now supports group-local includeDependenciesRecursively
  • Multiple bug fixes in the chunk optimizer for dynamic entry handling

Rolldown 1.1.0 is available on npm now.


faq:

  • question: "What does 'lazyBarrel' mean in Rolldown?" answer: "A 'barrel' is a file that re-exports from multiple other modules. lazyBarrel optimization detects when a barrel has no side effects and skips compiling the unused re-exported modules, speeding up builds for large libraries."
  • question: "My build broke after upgrading Rolldown. What should I check?" answer: "First, check if you're relying on side effects from a barrel file's re-exports. You can temporarily opt out with experimental: { lazyBarrel: false }. Second, if you use TypeScript project references, verify your tsconfig structure matches TypeScript's expected layout."
  • question: "How does this affect Vite users?" answer: "Rolldown is the bundler powering Vite 8 and later. These changes apply automatically when you upgrade Rolldown as a dependency or when Vite ships a new Rolldown version."

Related articles

More coverage with overlapping topics and tags.

Rolldown 1.1.4 Disables `experimental.lazyBarrel` by Default Again, One Month After 1.1.0 Made It Default-On
tooling

Rolldown 1.1.4 Disables `experimental.lazyBarrel` by Default Again, One Month After 1.1.0 Made It Default-On

Rolldown [v1.1.4](https://github.com/rolldown/rolldown/releases/tag/v1.1.4), published 2026-07-01T14:02:02Z, ships one feature change and 19 bug fixes. The feature change is a partial reversal of the [v1.1.0 default-flip](https://github.com/rolldown/rolldown/releases/tag/v1.1.0) that landed on 2026-06-03: `experimental.lazyBarrel` is now disabled by default again, after four weeks of correctness reports against the default-on behaviour. The release also hardens the dev-mode path by forcing `lazyBarrel` off whenever `experimental.devMode` is set (PR [#10060](https://github.com/rolldown/rolldown/pull/10060)), on top of the existing force-off for `treeshake`. The default-flip revert (PR [#10071](https://github.com/rolldown/rolldown/pull/10071)) and the dev-mode fix both author as one line each: "disable `experimental.lazyBarrel` by default" and "fix(dev): disable lazy barrel in dev mode", and the root-cause tracking is the new [issue #10085](https://github.com/rolldown/rolldown/issues/10085) "Tracking strictExecutionOrder correctness and architecture issues", opened the day after the release. The release follows [Rolldown v1.1.3](https://github.com/rolldown/rolldown/releases/tag/v1.1.3) (2026-06-24) and is the first release since 1.1.0 to touch the lazyBarrel config surface.
Prettier 3.9 Overhauls Five Parsers: micromark for Markdown, yaml v2, GraphQL.js v17, a Rust-Based Flow Parser, and Angular
tooling

Prettier 3.9 Overhauls Five Parsers: micromark for Markdown, yaml v2, GraphQL.js v17, a Rust-Based Flow Parser, and Angular

Prettier 3.9.0, released June 27, 2026 (prettier/prettier, blog post by Fisker Cheung), is a parser-heavy release that upgrades Markdown from remark-parse v8 to micromark v4 (better CommonMark and GFM compliance and a stack of long-standing bug fixes), YAML to yaml v2, GraphQL to GraphQL.js v17 (fragment arguments and directives on directive definitions), Flow to the Flow team's new Rust-based oxidized parser (roughly 37% faster on Prettier's valid Flow fixtures and 43% faster on flow_parser.js in local parser-only benchmarks), and Angular. The JavaScript and TypeScript printer is reworked too, particularly in --no-semi mode where comments around break and continue are now stable across repeated formats (an idempotency fix), plus redundant parenthesis removal in return statements, embedded-template interpolation alignment, and logical-not inlining. The release drops the legacy import ... assert {} syntax (Babel 8 removed the parser plugin; migrate to with), fixes a silently broken --cache-strategy content option, and stops EditorConfig files above Git worktrees from leaking in. The team reiterates pinning the exact version in package.json because the formatting changes will produce diffs.
Playwright v1.61.0 Lands WebAuthn Passkeys, a Real WebStorage API, and Trace-Style Video Modes for the Test Runner
tooling

Playwright v1.61.0 Lands WebAuthn Passkeys, a Real WebStorage API, and Trace-Style Video Modes for the Test Runner

Playwright v1.61.0 (June 15, 2026) ships a virtual authenticator for WebAuthn/passkey ceremonies, a first-class page.localStorage / page.sessionStorage API, network security details on API responses, and brings test runner video recording to parity with trace recording. Browser channels: Chromium 149, Firefox 151, WebKit 26.5.

Comments

Log in Log in to join the conversation.

No comments yet. Be the first to share your thoughts.