Skip to content

Comments

feat(rolldown): oxc v0.89.0#6220

Merged
graphite-app[bot] merged 1 commit intomainfrom
09-15-feat_rolldown_oxc_v0.89.0
Sep 15, 2025
Merged

feat(rolldown): oxc v0.89.0#6220
graphite-app[bot] merged 1 commit intomainfrom
09-15-feat_rolldown_oxc_v0.89.0

Conversation

@Boshen
Copy link
Member

@Boshen Boshen commented Sep 15, 2025

🎉 Windows Users: Rolldown Just Got ~10% Faster!

Great news for Windows developers! Thanks to performance improvements in oxc-resolver, Rolldown is now significantly faster on Windows.

Performance Gains

Overall Bundle Speed Improvement

  • ~10% faster bundling on Windows in general
  • Up to 29% faster in specific scenarios! 🚀

Benchmark Results

Bundle performance shows significant improvements:

scan/scan@threejs       time:   [10.857 ms 10.976 ms 11.112 ms]
                        change: [-20.624% −19.587% -18.466%] (p = 0.00 < 0.05)
                        Performance has improved.

scan/scan@rome_ts       time:   [30.603 ms 30.963 ms 31.397 ms]
                        change: [−16.311% −15.287% −13.971%] (p = 0.00 < 0.05)
                        Performance has improved.

bundle/bundle@threejs   time:   [17.669 ms 17.764 ms 17.865 ms]
                        change: [-15.166% −14.545% -13.897%] (p = 0.00 < 0.05)
                        Performance has improved.

bundle/bundle@rome_ts   time:   [47.719 ms 48.331 ms 49.043 ms]
                        change: [−10.927% −9.6461% −8.2062%] (p = 0.00 < 0.05)
                        Performance has improved.
Y@`PJ5DA}5I4}GH Z24VF5S

What Changed?

The optimization comes from oxc-resolver#691, which significantly improved file system operations on Windows.

Impact

  • Quicker module resolution and bundling
  • Especially noticeable on large codebases

This improvement requires no changes from your side - just update to the latest version and enjoy the speed boost! ⚡

🚀 Breaking Change Alert: Rolldown's OXC Runtime Plugin Now Embeds Helpers Directly!

We've revolutionized how Rolldown handles OXC transform helpers with an even better solution:

Before:

  • Automatic dependency resolution from @oxc-project/runtime (~229 KB)
  • Runtime module resolution required
  • External package dependency in node_modules
  • Browser environments struggled with module resolution

After:

  • Helpers embedded directly in Rolldown binary - zero external dependencies!
  • Only ~25 KB added to binary size (91% smaller than 229 KB package!)
  • Works seamlessly in ALL environments including browsers
  • Lightning-fast: Memory access instead of file I/O - instant helper loading!
  • Still no manual installation needed - but now even more efficient!

This enhancement makes Rolldown more self-contained and efficient. The OXC runtime helpers are now truly part of the core binary, providing better performance and reliability while maintaining the same seamless developer experience.

The transition is automatic - Rolldown continues to handle everything for you, just more efficiently! 🎉

@graphite-app
Copy link
Contributor

graphite-app bot commented Sep 15, 2025

How to use the Graphite Merge Queue

Add the label graphite: merge to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

@netlify
Copy link

netlify bot commented Sep 15, 2025

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 5e64af4
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/68c7c174404c060008cb4d9c

@socket-security
Copy link

socket-security bot commented Sep 15, 2025

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​oxc-project/​types@​0.89.01001007296100
Added@​oxc-project/​runtime@​0.89.01001007596100
Addedstyled-components@​6.1.199410010086100
Updatedoxc-transform@​0.87.0 ⏵ 0.89.095 -310089 +196 +1100
Updatedoxc-parser@​0.87.0 ⏵ 0.89.096 -2100100 +196 +1100

View full report

@sapphi-red
Copy link
Member

I'll check what's happening.

@sapphi-red
Copy link
Member

Ok, it's my fault related to oxc-project/oxc#13755.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 15, 2025

Benchmarks Rust

group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00     79.3±2.59ms        ? ?/sec    1.03     82.0±3.08ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.00     88.9±1.89ms        ? ?/sec    1.01     90.1±2.30ms        ? ?/sec
bundle/bundle@rome_ts                                        1.00    118.1±3.25ms        ? ?/sec    1.02    120.1±2.19ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    140.5±2.12ms        ? ?/sec    1.00    140.8±1.77ms        ? ?/sec
bundle/bundle@threejs                                        1.00     44.0±2.82ms        ? ?/sec    1.04     45.7±2.44ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     53.3±0.64ms        ? ?/sec    1.03     55.0±1.82ms        ? ?/sec
bundle/bundle@threejs10x                                     1.01    469.1±7.25ms        ? ?/sec    1.00    464.8±4.25ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00    543.2±3.75ms        ? ?/sec    1.01    548.8±6.00ms        ? ?/sec
scan/scan@rome_ts                                            1.00     92.9±1.22ms        ? ?/sec    1.01     93.8±1.63ms        ? ?/sec
scan/scan@threejs                                            1.01     33.8±2.20ms        ? ?/sec    1.00     33.5±0.58ms        ? ?/sec
scan/scan@threejs10x                                         1.00    349.1±3.97ms        ? ?/sec    1.00    349.8±4.85ms        ? ?/sec

@sapphi-red
Copy link
Member

Made the fix at oxc-project/oxc#13769
I locally confirmed that the test passes with that fix.

graphite-app bot pushed a commit to oxc-project/oxc that referenced this pull request Sep 15, 2025
…s to for statement initializers (#13769)

```js
function wrapper() { var x = a; for (let a of x) console.log(a) }
```
should not be compress to
```js
function wrapper() { for (let a of a) console.log(a) }
```
because `a` points to a different variable as the scope is different.
This PR fixes those kinds of cases for all for statements.

Found in rolldown/rolldown#6220

refs #13755
Copy link
Member


How to use the Graphite Merge Queue

Add the label graphite: merge to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@Boshen Boshen changed the title feat(rolldown): oxc v0.88.0 feat(rolldown): oxc v0.89.0 Sep 15, 2025
@sapphi-red sapphi-red force-pushed the 09-15-feat_rolldown_oxc_v0.89.0 branch from 01fb73e to f73f36a Compare September 15, 2025 07:15
@sapphi-red
Copy link
Member

Looks like the scan perf is improved by 10%+.
#6220 (comment)

@graphite-app
Copy link
Contributor

graphite-app bot commented Sep 15, 2025

Merge activity

@graphite-app graphite-app bot force-pushed the 09-15-feat_rolldown_oxc_v0.89.0 branch from f73f36a to 5e64af4 Compare September 15, 2025 07:34
@graphite-app graphite-app bot merged commit 5e64af4 into main Sep 15, 2025
28 checks passed
@graphite-app graphite-app bot deleted the 09-15-feat_rolldown_oxc_v0.89.0 branch September 15, 2025 07:45
shulaoda pushed a commit that referenced this pull request Sep 15, 2025
## [1.0.0-beta.38] - 2025-09-15

📦 OXC Runtime Helpers Now Embedded

- Instant loading: Memory access instead of file I/O
- 91% smaller: From 229 KB external package to ~25 KB in binary
- Universal support: Works seamlessly in all environments including browsers
- Zero dependencies: Helpers embedded directly, no `@oxc-project/runtime` needed

⚡ Windows Performance Boost

- ~10% faster bundling on Windows
- Powered by `oxc-resolver` optimizations

Both improvements require zero configuration - just update to the latest version and enjoy! 🎉

> [!warning] 
> ### 💥 BREAKING CHANGES
> - rolldown_plugin_oxc_runtime: embed helpers to support browser environment (#6177) by @shulaoda

### 🚀 Features

- rolldown: oxc v0.89.0 (#6220) by @Boshen
- rolldown_plugin_esm_external_require: add duplicate external detection (#6202) by @shulaoda
- cross module noop function optimization (#6199) by @IWANABETHATGUY
- support to specify `scan_mode` in `bundler.scan` (#6204) by @IWANABETHATGUY
- warn when transform options override tsconfig compiler options (#6197) by @shulaoda
- support `false` in `resolve.alias` to ignore resolution (#6203) by @shulaoda
- cli: remove `getJsonSchema` (#6186) by @shulaoda
- cli: add Node.js version warning for unsupported versions (#6150) by @Copilot
- rolldown_plugin_oxc_runtime: include version in virtual module paths (#6179) by @shulaoda
- add native react-refresh-wrapper plugin (#6144) by @sapphi-red
- rolldown_plugin_utils: add `to_string_literal` (#6178) by @sapphi-red
- improve error messages for builtin plugins (#6175) by @shulaoda
- indent module content in IIFE format (#6174) by @IWANABETHATGUY
- rolldown_error: improve N-API error handling logic (#6171) by @shulaoda
- rolldown_error: improve `ByteLocator#byte_offset` (#6169) by @shulaoda
- dev: skip writing to file (#6148) by @sapphi-red
- dev: add `skip_write` option (#6151) by @sapphi-red
- dev: ignore file metadata changes (#6138) by @sapphi-red
- dev: add PathsMut for debounced PollWatcher (#6139) by @sapphi-red
- dev: use PathsMut for debounced RecommendedWatcher (#6137) by @sapphi-red
- improve bundler initialization error handling (#6132) by @shulaoda

### 🐛 Bug Fixes

- rolldown_plugin_vite_resolve: correctly handle Windows drive paths with leading slash (#6209) by @shulaoda
- allow `jsx.pragmaFrag` instead of `jsx.pragmaFlag` (#6200) by @sapphi-red
- improve import-glob plugin error handling without panic (#6106) by @hikomoon
- Panic with "jsx": "preserve" when rewrite a `memberExpression` (#6192) by @IWANABETHATGUY
- rolldown_error: use `byte_slice` instead of `slice` for correct span handling (#6185) by @shulaoda
- generate valid identifier for export names with `minifyInternalExports` (#6166) by @sapphi-red
- useless __export helper usage (#6160) by @IWANABETHATGUY
- incremental watch modify entry module (#6156) by @IWANABETHATGUY
- register trace subscriber (#6145) by @sapphi-red
- json imports error with `eval` or `arguments` in *strict mode* (#6140) by @IWANABETHATGUY
- `process` is not defined in repl (#6147) by @IWANABETHATGUY

### 💼 Other

- rolldown: support to build `rolldown` with `.wasm` binding (#6153) by @hyf0
- rolldown: refactor `build.ts` to prepare to support build `rolldown` package with wasi binding (#6152) by @hyf0

### 🚜 Refactor

- share `FlatOptions` in whole build session (#6211) by @IWANABETHATGUY
- remove unnecessary `comments` in ScopeHoistingFinalizerContext (#6205) by @IWANABETHATGUY
- move external string/regex matching from JS to Rust (#6201) by @shulaoda
- rename `cross_module_inline_const` to `cross_module_optimization` (#6193) by @IWANABETHATGUY
- rename `class` and `function` visitor to `class_decl`, `function_decl` (#6176) by @IWANABETHATGUY
- rolldown_error: tweak code (#6168) by @shulaoda
- improve `BuildDiagnostic` (#6165) by @shulaoda
- improve `RolldownBuild` (#6136) by @shulaoda
- rolldown_error: remove unused `EventKind::IoError` (#6134) by @shulaoda
- rename CustomPathsMut to NotifyPathsMutAdapter and move to utils (#6135) by @hyf0

### 📚 Documentation

- contrib-guide: add profiling instructions for macOS (#6183) by @sapphi-red
- contrib-guide: update just commands (#6181) by @sapphi-red

### ⚡ Performance

- pre calculate `side_effects_free_function_symbol_ref` (#6206) by @IWANABETHATGUY
- parallel clone ast (#6167) by @IWANABETHATGUY
- reserve capacity for rendered modules in `instantiate_chunk` (#6159) by @sapphi-red

### 🧪 Testing

- hmr: ensure each test isolated to be able to be retryed (#6142) by @hyf0

### ⚙️ Miscellaneous Tasks

- deps: lock file maintenance npm packages (#6219) by @renovate[bot]
- deps: lock file maintenance rust crates (#6217) by @renovate[bot]
- deps: update github-actions (#6213) by @renovate[bot]
- deps: lock file maintenance npm packages (#6215) by @renovate[bot]
- deps: update github-actions (major) (#6214) by @renovate[bot]
- tweak wordings (#6208) by @iiio2
- fix unused import warnings (#6196) by @shulaoda
- correct deprecated JSDoc reference for jsx option (#6195) by @shulaoda
- add `if: always()` to wasi-test (#6190) by @sapphi-red
- skip `@rolldown/browser` build if no node related changes detected (#6189) by @sapphi-red
- extract wasi build to reusable workflow (#6188) by @sapphi-red
- deps: update dependency tsdown to v0.15.1 (#6184) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.16.5 (#6182) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.16.4 (#6180) by @renovate[bot]
- dev: implement Debug trait for DevOptions (#6173) by @sapphi-red
- deps: update dependency rolldown-plugin-dts to v0.16.3 (#6172) by @renovate[bot]
- update @napi-rs/cli and js binding (#6157) by @Brooooooklyn
- ci: ensure `@rolldown/browser` build without errors (#6155) by @hyf0
- ci: ensure running wasi tests correctly (#6154) by @hyf0
- add more tracing instrumentation (#6149) by @sapphi-red
- extend timeout for rollup test (#6143) by @IWANABETHATGUY
- rolldown_error: remove unnecessary `type_aliases.rs` (#6133) by @shulaoda
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants