Détail du package

rolldown

rolldown515.7kMIT1.0.0-beta.15

Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.

webpack, parcel, esbuild, rollup

readme

Rolldown logo

MIT licensed NPM version CodSpeed Badge Discord chat
NPM Unpacked Size (with version) NPM Unpacked Size darwin-arm64 NPM Unpacked Size darwin-x64 NPM Unpacked Size linux-x64-gnu NPM Unpacked Size win32-x64 NPM Unpacked Size wasm32-wasi
pkg.pr.new
rolldown-starter-stackblitz

🚧 Beta Software

Rolldown is currently in beta status. While it can already handle most production use cases, there may still be bugs and rough edges. Most notably, the built-in minification feature is still in alpha status.

Rolldown

Rolldown is a JavaScript/TypeScript bundler written in Rust intended to serve as the future bundler used in Vite. It provides Rollup-compatible APIs and plugin interface, but will be more similar to esbuild in scope.

For more information, please check out the documentation at rolldown.rs.

VoidZero Inc.

Rolldown is a project of VoidZero, see our announcement Announcing VoidZero - Next Generation Toolchain for JavaScript.

If you have requirements for JavaScript tools at scale, please get in touch!

Contributing

We would love to have more contributors involved!

To get started, please read our Contributing Guide.

Credits

The Rolldown project is heavily inspired by:

And supported by:

  • napi-rs for Node.js add-ons in Rust via Node-API.
  • oxc for the underlying parser, resolver, and sourcemap support.

Licenses

This project is licensed under the MIT License.

This project also partially contains code derived or copied from the following projects:

Licenses of these projects are listed in THIRD-PARTY-LICENSE

changelog

[1.0.0-beta.18] - 2025-06-19

🚀 Features

  • advancedChunks: no need to include dependencies for PreserveEntrySignatures::False too (#5005) by @hyf0
  • analyze commonjs module side effects and remove unused module (#5003) by @IWANABETHATGUY
  • specially handling commonjs export stmt side effects (#5002) by @IWANABETHATGUY
  • rolldown: oxc v0.73.2 (#5000) by @Boshen
  • debug: attach both session_id and build_id to debug events (#4994) by @hyf0

🐛 Bug Fixes

  • rolldown_plugin_import_glob: correctly handle alias glob patterns (#5007) by @shulaoda
  • rolldown_plugin_alias: correctly handle resolved_id (#5006) by @shulaoda
  • imported namespace is missing after external import namespace merging (#4999) by @IWANABETHATGUY
  • node: add experimental.viteMode to option validator (#4996) by @sapphi-red
  • plugin/vite-resolve: optional peer dep id parse error (#4995) by @sapphi-red

🚜 Refactor

  • debug: remove extra mechanism for passing session_id and unnecessary passing of spans (#5001) by @hyf0

📚 Documentation

  • update description about directive handling (#4992) by @IWANABETHATGUY

⚙️ Miscellaneous Tasks

  • deps: update dependency rolldown-plugin-dts to v0.13.11 (#4863) by @renovate[bot]
  • infra: update changelog configuration in cliff.toml (#4961) by @shulaoda
  • infra: add knip to ci (#4991) by @webpro

[1.0.0-beta.17] - 2025-06-17

🚀 Features

  • binding: feat(binding): always use the same BindingBundler to create BindingBundlerImpl for the same RolldownBuild by @hyf0 in #4985
  • debug: feat(debug): cache large string by @hyf0 in #4882
  • feat: make require('./foo.json') work as expected even if the json is transformed to JS by a custom plugin by @IWANABETHATGUY in #4984
  • feat: add diagnostic for multiple entries with UMD/IIFE formats by @shulaoda in #4954

🐛 Bug Fixes

  • plugin/vite-resolve: fix(plugin/vite-resolve): importing an optional peer dep should throw an runtime error by @sapphi-red in #4980
  • fix: upgrade napi, fix wasm url by @sxzz in #4958
  • fix: should rewrite hmr related ast after test if experimental.hmr is enabled. by @IWANABETHATGUY in #4972

💼 Other

  • build: provide "type": "module" in package.json by @iiio2 in #4974

🚜 Refactor

  • binding: refactor(binding): rename Bundler to BindingBundleImpl by @hyf0 in #4983
  • rolldown: refactor(rolldown): migrate to ESM package by @sxzz in #4959

📚 Documentation

  • docs: explain how to transpile legacy decorators by @hyf0 in #4989
  • code-splitting: docs(code-splitting): make terms bold instead of wrapped with inline code block by @hyf0 in #4975
  • docs: improve advanced chunks by @hyf0 in #4966
  • docs: refine code splitting guide by @sapphi-red in #4969

🧪 Testing

  • test: place empty package.json to prevent all files to be treated as node mode by @sapphi-red in #4979

⚙️ Miscellaneous Tasks

  • infra: chore(infra): ensure pnpm install for common commands by @hyf0 in #4987
  • browser: chore(browser): add @oxc-project/runtime by @shulaoda in #4988
  • deps: chore(deps): update dependency tsdown to v0.12.8 by @renovate[bot] in #4977
  • deps: chore(deps): update npm packages (major) by @renovate[bot] in #4963
  • deps: chore(deps): lock file maintenance npm packages by @renovate[bot] in #4967
  • deps: chore(deps): lock file maintenance rust crates by @renovate[bot] in #4965
  • deps: chore(deps): lock file maintenance npm packages by @renovate[bot] in #4964
  • deps: chore(deps): update github-actions by @renovate[bot] in #4962

❤️ New Contributors

  • @iiio2 made their first contribution in #4974

[1.0.0-beta.16] - 2025-06-15

🚀 Features

  • rolldown: feat(rolldown): oxc v0.73.0 by @Boshen in #4948
  • types: feat(types): generate HMR runtime types by @sapphi-red in #4928
  • rolldown_plugin_build_import_analysis: feat(rolldown_plugin_build_import_analysis): align with rolldown-vite by @shulaoda in #4931
  • feat: allow to configureexperimental#attachDebugInfo: 'none' to disable generating #region comments by @TheAlexLichter in #4918

🐛 Bug Fixes

  • fix: deduplicate entry point by @IWANABETHATGUY in #4956
  • fix: diagnostic message on minified code is too long to be readable by @IWANABETHATGUY in #4950
  • fix: deduplicated entry points when have same id, name, and filename by @IWANABETHATGUY in #4947
  • fix: unbundle does not work with outExtensions by @IWANABETHATGUY in #4945
  • types: fix(types): remove undefined from return type of generateHmrPatch and hmrInvalidate by @sapphi-red in #4943
  • fix: handle error in hmrInvalidate by @sapphi-red in #4942
  • rolldown_plugin_build_import_analysis: fix(rolldown_plugin_build_import_analysis): preload helper is imported even if it’s not needed by @shulaoda in #4936
  • hmr: fix(hmr): avoid panic after syntax error by @sapphi-red in #4898
  • strictExecutionOrder: fix(strictExecutionOrder): ensure initialization chain of entry exports by @hyf0 in #4933
  • fix: should not panic when meet a syntax error in watch mode. by @IWANABETHATGUY in #4926
  • fix: regression, id filter normalization for windows is not working by @IWANABETHATGUY in #4922
  • rolldown_plugin_json: fix(rolldown_plugin_json): incorrect default JSON export by @shulaoda in #4924

🚜 Refactor

  • refactor: avoid unnecessary collect by @IWANABETHATGUY in #4949
  • refactor: get normalized options via binding by @IWANABETHATGUY in #4938
  • refactor: include DevRuntime base class even if custom HMR implementation is passed by @sapphi-red in #4929

📚 Documentation

  • docs: clarify minifier state by @TheAlexLichter in #4953
  • docs: drafting code splitting by @hyf0 in #4951
  • docs: add link to repl by @sxzz in #4917
  • pluginutils: docs(pluginutils): add example to simple filter functions by @sapphi-red in #4915

🧪 Testing

  • test: add testcase for normalized output options by @IWANABETHATGUY in #4939
  • hmr: test(hmr): enable expectExecuted for generatePatchError test by @sapphi-red in #4937
  • test: evaluate hmr tests in node by @sapphi-red in #4930
  • test: add "non used export" hmr test by @sapphi-red in #4900
  • test: enable expectExecuted in HMR tests by @sapphi-red in #4927

⚙️ Miscellaneous Tasks

  • deps: chore(deps): lock file maintenance npm packages by @renovate[bot] in #4866
  • infra: chore(infra): remove comments related to cspell by @shulaoda in #4940
  • ci: remove cargo bench test by @IWANABETHATGUY in #4925

[1.0.0-beta.15] - 2025-06-11

🚀 Features

  • feat: make native json plugin callable by @shulaoda in #4908
  • feat: support preserveSignature in this.emitFile by @IWANABETHATGUY in #4895
  • rolldown_plugin_module_preload_polyfill: feat(rolldown_plugin_module_preload_polyfill): expose plugin config by @shulaoda in #4896

🐛 Bug Fixes

  • fix: add missing pathe polyfill by @sxzz in #4912
  • node: fix(node): call options hook for experimental_scan by @sapphi-red in #4911
  • fix: better NoEntryPoint error message by @IWANABETHATGUY in #4903
  • fix: fail to bundle when provide entryPoint dynamiclly by @IWANABETHATGUY in #4902

🧪 Testing

  • pluginutils: test(pluginutils): add query suffix case for makeIdFiltersToMatchWithQuery by @sapphi-red in #4914
  • test: copy rollup preserveEntrySignature override-via-plugin test by @IWANABETHATGUY in #4910
  • test: include error in hmr test snapshots by @sapphi-red in #4899

⚙️ Miscellaneous Tasks

  • chore: update committed dts by @sapphi-red in #4913
  • chore: bump rolldown-ariadne by @IWANABETHATGUY in #4909
  • improve prepare release commit message by @Boshen

[1.0.0-beta.14] - 2025-06-10

💥 BREAKING CHANGES

  • refactor!: move preserveEntrySignatures from output to input options by @IWANABETHATGUY in #4871

🚀 Features

  • strictExecutionOrder: feat(strictExecutionOrder): no need to generate plain chunk imports for addressing side effects by @hyf0 in #4890
  • feat: make wasm fallback plugin callable in node by @shulaoda in #4885
  • rolldown_plugin_module_preload_polyfill: feat(rolldown_plugin_module_preload_polyfill): align with rolldown-vite by @shulaoda in #4884
  • attachDebugInfo: feat(attachDebugInfo): improve format and distinguish dynamic entries by @hyf0 in #4861

🐛 Bug Fixes

  • binding: fix(binding): preserveModules infinity loop by @Brooooooklyn in #4879
  • fix: dynamic import does not return exports when preserveEntrySignatures: false is set and the importee is an entry by @IWANABETHATGUY in #4891
  • fix: preserveEntrySignatures panics with an edge case by @IWANABETHATGUY in #4877
  • fix: directives are missing with preserveModules by @IWANABETHATGUY in #4876
  • fix: exports from dynamically imported chunks are removed by @IWANABETHATGUY in #4875

🚜 Refactor

  • refactor: clearify Chunk entry kind by @IWANABETHATGUY in #4892
  • rolldown_plugin_build_import_analysis: refactor(rolldown_plugin_build_import_analysis): align the logic with rolldown-vite by @shulaoda in #4856

📚 Documentation

  • contrib-guide: docs(contrib-guide): add HMR testing section by @sapphi-red in #4888
  • guide: docs(guide): update release channels - remove nightly, add pkg.pr.new by @Boshen in #4881

🧪 Testing

  • test: rename rolldown/topics/hmr/mutiply-entires to snake case by @sapphi-red in #4889
  • test: add test for #4849 by @sapphi-red in #4887
  • test: setup infra for hmr tests by @sapphi-red in #4886

⚙️ Miscellaneous Tasks

  • ci: disable publish to nightly by @Boshen in #4874
  • ci: extend Vite tests timeout by @sapphi-red in #4870
  • fix publish-to-npm.yml by @Boshen

◀️ Revert

  • revert: "refactor(rolldown_plugin_load_fallback): align with rolldown-vite" by @shulaoda in #4868

[1.0.0-beta.13] - 2025-06-07

🚀 Features

  • feat: merge same ImportNamespaceSpecifier for external module by @IWANABETHATGUY in #4373

🐛 Bug Fixes

  • ci: disable generate_release_notes by @Boshen

📚 Documentation

  • docs: add MAINTENANCE.md; remove rolldown.rs/contrib-guide/release by @Boshen in #4854

⚙️ Miscellaneous Tasks

  • add input description to prepare-release.yml by @Boshen
  • fix prepare-release.yml by @Boshen
  • CHANGELOG.md: ci(CHANGELOG.md): use git-cliff to generate changelogs by @Boshen in #4858

1.0.0-beta.12 (2025-06-06)

Features

  • preseveEntrySignature: allow-extension (#4800) (83d4d62)
  • advancedChunks: only move the captured module itself if preserveEntrySignatures is allow-extension (#4847) (57e7f8b)
  • interop import('some-cjs-module.js') (#4816) (b9ac5f0)
  • rolldown: oxc v0.72.3 (#4845) (759525d), closes #4796 #4846
  • support preserveEntrySignatures: exports-only (#4848) (63dc546)
  • support preserveEntrySignatures: false (#4844) (e4e90e9)
  • take node esm spec into account for dynamic imports in cjs modules that satisfy nodejs (#4819) (640af3a), closes #4289

Bug Fixes

Features

  • add index_of_one utils for Bitset (#4779) (16aff17)
  • advancedChunks: support function for output.advancedChunks.groups[].test (#4644) (0a177d4), closes #4477
  • node: support Rollup-style JSX options (#4756) (2c4c2a8), closes #4752
  • rolldown_plugin_isolated_declaration: improve diagnostic messages (#4731) (87188ed), closes #4040
  • warn when assignment to bundle is detected (#4792) (833c4e0)

Bug Fixes

⚠ BREAKING CHANGES

  • "feat!: always make the default value of platform as browser" (#4720)
  • resolve: add module to resolve conditions by default (#4703)
  • types/resolve: use literal 'import-statement' to refer to static import statements instead of 'import' (#4689)
  • rust: merge target option into transform (#4665)
  • rust: merge jsx option into transform (#4654)
  • always make the default value of platform as browser (#4611)

Features

  • add preserveEntrySignatures option (#4640) (3979e2a)
  • always make the default value of platform as browser (#4611) (43425a0)
  • binding: preserveModulesRoot (#4631) (51df2b7)
  • ci: apply cargo shear --fix correctly in autofix (#4677) (15934eb)
  • debug: add StmtSideEffect to record the specific reason why a stmt has side effect (#4671) (5982115)
  • debug: emit more details for Module[#imports](https://github.com/rolldown/rolldown/issues/imports) (#4619) (42afd5a)
  • enable cjs ns merge for react (#4621) (ddf8da8)
  • enable loose mode validate option and give warning (#4638) (080ce4e)
  • on_demand_wrapping: don't wrap modules that don't rely on others and have side effect (#4670) (326e6f5)
  • plugin/json: only transform module with moduleType: 'json' (#4554) (c69e332)
  • rolldown_plugin_oxc_runtime: support automatic resolution of oxc runtime helpers (#4641) (b09c035), closes #4597
  • rolldown_plugin_utils: extract check_public_file from rolldown_plugin_asset (#4660) (1b3b8c3)
  • rolldown_plugin_utils: extract file_to_url from rolldown_plugin_asset (#4663) (40290b5)
  • rolldown_plugin_utils: support create_to_import_meta_url_based_relative_runtime (#4657) (d77354f)
  • rolldown_plugin_utils: support to_output_file_path_in_js (#4659) (9e8c677)
  • rolldown: oxc v0.71.0 and napi beta (#4618) (76c39c6), closes #4614
  • rolldown: oxc v0.72.0 (#4658) (8371a90)
  • rolldown: oxc v0.72.1 and oxc-resolver v11 (#4718) (79a47fc)
  • rust: merge jsx option into transform (#4654) (4872097), closes #4447
  • rust: merge target option into transform (#4665) (f9aa33a), closes #4651
  • rust: preserveModulesRoot (#4630) (9f62c77)
  • support to attach chunk debug information in output (#4633) (1079582)

Bug Fixes

  • chunk.name is not sanitized when the chunk is a common chunk (#4712) (5949f2a), closes #4709
  • preserveModules co exists with multi entrypoints (#4626) (b46bdea), closes #4624
  • preserveModules don't respect relative path (#4629) (9727493)
  • browser: disable oxc runtime plugin (#4708) (0ec9e7d), closes #4707
  • ci: add missing just in warmup workflow (c6a1eb1)
  • ci: cache release builds to a different cache key (a002b24)
  • ci: cache warmup should include build artifacts (#4675) (0f2c3b5)
  • ci: fix double pnpm cache from setup-node (#4685) (db25788)
  • ci: fix release build (#4691) (82620b9)
  • ci: fix template-injection in benchmark-rust (57b2792)
  • ci: fix template-injection in publish-to-npm-for-nightly-canary.yml (352340f)
  • ci: in metrics, use cache instead of cargo fetch (937eae9)
  • ci: pnpm install --ignore-scripts (#4696) (e040112)
  • cjs namespace merge in incremental build (#4613) (b1c500e)
  • dynamic chunk not exported when using preserveModules (#4650) (d91dfb5)
  • exported dynamic import is treated as unused (#4648) (edf5b4e), closes #4646
  • generated wrapper stmt info should be always included on demand (#4639) (ed553e1)
  • index out of bounds panic at oxc_index-3.0.0 with recent canary version (#4713) (3fad6f4)
  • inlineDynamicImports: ensure tla module execution correctly (#4627) (e9ef28c)
  • partial cjs namespace merge with chunk split (#4598) (83a0b40)
  • partial merge cjs namespace (#4595) (0085f4a)
  • removing unused dynamic imported chunks (#4655) (fe21db7)
  • resolve: add module to resolve conditions by default (#4703) (9727531)
  • rolldown/browser: auto-resolve oxc runtime helpers (#4645) (701bbc3), closes #4641
  • rust: avoid panic in into_assignment_target (#4688) (6c806ea), closes #4304
  • sort dynamic entires with topological order before tree shake. (#4694) (bc96622)
  • strict_execution_order: runtime module should not be wrapped by default (#4692) (4008ac0)
  • strict_execution_order: wrapped module should be included on demand (#4687) (7c21036)
  • strip path for require identifier with preserveModules (#4704) (2ba8e28), closes #4700
  • types/resolve: use literal 'import-statement' to refer to static import statements instead of 'import' (#4689) (eee51d8)
  • watch: watch linux path at windows (#4625) (ed594aa)

Performance Improvements

  • change profile.dev.debug to improve rust compile times (#4623) (0312f66)
  • rolldown: prevent duplicate text embedding with include_str! (#4664) (8fee5af), closes #4354

Reverts

  • "feat!: always make the default value of platform as browser" (#4720) (4021325), closes rolldown/rolldown#4611
  • "refactor(rolldown_sourcemap): remove unused SourceJoiner[#prepend](https://github.com/rolldown/rolldown/issues/prepend)_source" (#4632) (719ec89), closes rolldown/rolldown#4431
  • feat(on_demand_wrapping): don't wrap modules that don't rely on others and have side effect [#4670](https://github.com/rolldown/rolldown/issues/4670) (#4686) (8a77ce9)

    1.0.0-beta.9 (2025-05-19)

⚠ BREAKING CHANGES

  • rolldown: update to oxc@0.70.0 to refine printing comments (#4562)
  • align directive rendering with esbuild (#4557)
  • don't expose And class in pluginutils (#4537)
  • add OutputOptions#legalComments and remove OutputOptions#comments (#4528)
  • expose withFilter function via rolldown/filter instead of rolldown (#4369)
  • allows users to specify filter expressions directly using an array syntax instead of an object with a "custom" key (#4368)
  • use camel cases for package.json#exports field (#4366)
  • filter expr binding conversion (#4343)

Features

  • add OutputOptions[#legal](https://github.com/rolldown/rolldown/issues/legal)Comments and remove OutputOptions[#comments](https://github.com/rolldown/rolldown/issues/comments) (#4528) (aa7e253)
  • add watcher.off method to remove event listener (#4388) (ca23f2d), closes #4382
  • allow to preserve legal comments with minify: true (#4591) (9a837fc)
  • allows users to specify filter expressions directly using an array syntax instead of an object with a "custom" key (#4368) (4a50b6d)
  • better error message for manualChunks (#4530) (5b8c925)
  • builtin-plugin: expose webWorkerPostPlugin (#4594) (d89470c)
  • cleanUrl rust interpreter (#4480) (1988c3d)
  • debug: add call_id to load and transform events (#4296) (432acb3)
  • debug: distinguish if resolve_id hook is called automatically or manually (#4254) (1b90f35)
  • debug: emit ModuleGraphReady event (#4515) (29d88da), closes #4135
  • debug: inject call_id for each pair of HookResolveIdCall events (#4255) (d93e66e)
  • expose isolatedDeclaration (#4410) (92d35c5)
  • expose loadConfig in api (#4428) (9a4338e), closes #4313
  • expose oxc-resolver (#4485) (8aae298)
  • filter expr binding conversion (#4343) (6c73e55)
  • filter expression node binding types (#4340) (684e2b5)
  • hmr: handle import.meta.hot.invalidate (#4339) (9725513)
  • hmr: support sourcemap (#4570) (d3b21fe)
  • implement filter expr filtering (#4346) (d35f587)
  • introduce filter expression (#4323) (21b9e45)
  • make BindingMinifyOptions fields optional (#4307) (165d0b1), closes #4306
  • make RolldownBuild.watchFiles to async (#4520) (4666852)
  • merge emitDecoratorMetadata from tsconfig.json (#4555) (3f14835), closes #4552
  • move filter related utils to @rolldown/pluginutils (#4429) (f932e9e)
  • output.virtualDirname (#4521) (2e52dbc)
  • parse filter expr (#4338) (e394f40)
  • partial preserveModules impl (#4456) (a3b1473)
  • plugin/transform: allow readonly array for options (#4266) (86482ea)
  • plugin/vite-resolve: port changes after Vite 6 (#4269) (7c1fae3), closes #4270
  • plugin: support code filter for renderChunk hook (#4351) (ef1f137), closes #4231
  • pluginutils: Query filter impl (#4535) (6c06a1c)
  • pluginutils: add exactRegex and prefixRegex (#4458) (7c58822)
  • pluginutils: add makeIdFiltersToMatchWithQuery function (#4469) (75757fa)
  • preserveModules (#4457) (4b0464e)
  • rolldown_error: add necessary id for some errors (#4533) (d4801c4), closes #4427
  • rolldown_plugin_asset_import_meta_url: initialize assetImportMetaUrlPlugin (#4563) (84c4bac)
  • rolldown_plugin_asset: align resolveId with rolldown-vite (#4545) (d6e2358)
  • rolldown_plugin_asset: initialize asset plugin (#4541) (51bbd05)
  • rolldown_plugin_asset: partially align load hook with rolldown-vite (#4561) (a58cdd9)
  • rolldown_plugin_dynamic_import_vars: basic support for custom resolver (#4333) (ad5315f), closes #3968
  • rolldown_plugin_dynamic_import_vars: complete basic alignment work (#4334) (1fd551c), closes #3968
  • rolldown_plugin_dynamic_import_vars: introduce resolver option (#4309) (89aa613), closes #3968
  • rolldown_plugin_dynamic_import_vars: prepare for custom resolver (#4328) (a15677b), closes #3968
  • rolldown_plugin_dynamic_import_vars: support include and exclude (#4288) (c4e6cad), closes #3968
  • rolldown_plugin_import_glob: support brace expansion (#4121) (54afc8f), closes #3982
  • rolldown_plugin_reporter: align the logic in renderChunk hook (#4464) (db88da2), closes #3968
  • rolldown_plugin_reporter: basically align behavior with rolldown-vite (#4475) (90102d7), closes #3968
  • rolldown_plugin_reporter: further aligned with rolldown-vite (#4476) (3985436), closes #3968
  • rolldown_plugin_reporter: prepare for chunk reporting (#4449) (e270f24), closes #3968
  • rolldown_plugin_web_worker_post: align with rolldown-vite (#4576) (0d7e06c)
  • rolldown: oxc_resolver v8 (#4392) (0de485b)
  • rolldown: bump oxc_resolver to v7.0 (#4367) (63723d5)
  • rolldown: expose experimental entry for browser (#4446) (069b04b)
  • rolldown: expose ModuleTypes type (#4506) (513a17a)
  • rolldown: oxc v0.66.0 (#4275) (35ee0e7)
  • rolldown: oxc v0.68.1 (#4405) (4d4df59)
  • rolldown: oxc v0.69.0 (#4478) (4940c31)
  • rolldown: oxc v0.76.0 (#4345) (86ed7c3)
  • rolldown: oxc_resolver v9.0.0 (#4462) (9ef061d)
  • rolldown: update to oxc@0.70.0 to refine printing comments (#4562) (1c583fe)
  • rust: execute cjs as it is (#4465) (5becdcf)
  • rust: impl Query filter (#4542) (8a5f862)
  • rust: initialize rolldown_plugin_vite_css (#4418) (f2531a6)
  • rust: support LegalComments::Inline (#4444) (6921d6c)
  • support extra IdParams and cleanUrl (#4479) (55a9209)
  • support variadic args for or and and filter expr (#4371) (3fe195c)
  • types: allow rollup plugin to be assigned to plugins option (#4568) (42e496f)
  • types: expose more watcher related types (#4383) (21263e5)
  • validate hoistTransitiveImports (#4262) (ac258d5)
  • watcher: support result.close at bundle end event (#4423) (f579291)
  • watch: support result.close at error event (#4424) (7bb3956)

Bug Fixes

  • asset ModuleType not available in TypeScript package (#4489) (8ac92a4)
  • add debug information for debug wasm binaries (#4549) (cc66f4b)
  • align directive rendering with esbuild (#4557) (709eb63)
  • align resolve extension order with esbuild (#4277) (6565161)
  • align sanitize_filename with rollup (#4244) (d53650c)
  • align validator with the actual types for output.polyfillRequire / output.minify.deadCodeElimination (#4294) (6e313e1)
  • chunk level directives rendering (#4551) (a16881d), closes #4548
  • chunk_exports: Prevent duplicate external module imports (#4408) (f90a05f), closes #4406
  • chunk.imports should include external imports (#4315) (62dee06)
  • ci: fix incorrect tag name for lychee-action (#4352) (2531185)
  • cli: ROLLUP_WATCH should be set when config is loaded (#4293) (f845728), closes #3967
  • cli: invalid type used with --target (#4407) (8cce9fc), closes #4387
  • consolidate log related types (#4355) (0174d14), closes #4330
  • debug: ensure emitting json object per line and correct types (#4295) (1d1fa3d)
  • don't minify .d.ts related chunk (#4240) (d984417)
  • dynamic import with backquotes are not bundled (#4435) (76c6380)
  • ensure executing of plain imported cjs, fixes #4443 (#4468) (df9b4ee)
  • hmr: accpet deps (#4314) (6aca0ce)
  • hmr: aovid using quote_stmt, it make sourcemap panic (#4571) (7b949a0)
  • hmr: enable incremental_build (#4298) (7209cf3)
  • hmr: export full reload info if reach to hmr root (#4242) (9b57bd3)
  • hmr: hmr chunk execute dependencies before create import.meta.hot (#4320) (2a06dfe)
  • hmr: make sure runtime module imported for each chunk (#4438) (4d444b0)
  • hmr: normalize hmr chunk sourcemap sources path (#4572) (6691f45)
  • hmr: preserve original import.meta.hot when no HMR context exists (#4391) (bc78fa1), closes #4390 #4370
  • hmr: reexport named declaration (#4319) (3858daa)
  • hmr: register cjs module exports (#4511) (66f4623)
  • hmr: remove duplicated import statment (#4556) (69aebee)
  • hmr: rewrite import default/namespace reference (#4299) (a0733d0)
  • hmr: rewrite import.meta.hot (#4370) (7b030ee)
  • moduleSideEffects function should also apply to external module (#4305) (77c8935)
  • node: add type property to RenderedChunk (#4553) (8ca4fde)
  • node: ensure comments option got passed to rust (#4527) (35571e5), closes #4491
  • plugin/vite-resolve: align default externalize logic with Vite (#4247) (a37e704)
  • plugin/vite-resolve: external was serialized incorrectly (#4270) (3a98131)
  • preserveModules cjs interop (#4529) (1e7b372)
  • render_chunk_exports: add missing semicolon to exported value assignment (#4498) (8739f25), closes #4459
  • rolldown_plugin_transform: use or instead of xor for transformOptions.lang (#4587) (ef90f2e)
  • rolldown_transform_plugin: incorrect detection of file extension (#4241) (eae9262), closes #3881
  • rust: ramdom segmentation fault (#4473) (42fd8e2)
  • should not convert module to cjs if there exists toplevel this but no module,exports used (#4514) (f606614)
  • should not throw for circular cjs imports, fixes #3529 (#4467) (3240812)
  • should rewrite jsx_name when jsx: preserve (#4516) (d95f99e)
  • should try to resolve .json extension by default (#4276) (e84206b), closes #4274
  • transform hook code filter does not work (#4386) (a720367), closes #4379
  • use correct FileTemplate when enable preserve_modules (#4517) (a779c8c)
  • using original error if normalize original plugin error has error (#4263) (d378cad)
  • watch-cli: call result.close at bundle end or error (#4426) (55efe08)
  • watch: allow call result.close multiply times (#4425) (e19ea12)

Performance Improvements

  • avoid allocating unnecessary memory in runtime for module_types map (#4301) (f675391)
  • enable Wasm 128bit SIMD Extension (#4484) (9d84ea8)
  • reduce wasm release binary size (#4547) (bf53a10)
  • rename: reduce some string allocations (#4487) (c51bc5c)
  • rolldown_plugin_alias: avoid unnecessary to_string allocations (#4268) (bf18d12), closes #3968
  • rolldown_plugin_json: change register_hook_usage to return HookUsage::Transform (#4375) (baf6ca1), closes #3968
  • rolldown: reduce size of ModuleLoaderMsg from 1472 to 24 bytes (#4496) (71d87e5)
  • rolldown: remove ArcStr usages in finalize_chunks (#4494) (4dcaa00)
  • rolldown: speedup extract_hash_placeholders with memchr (#4495) (38fd4b8)
  • rust: improve PreProcessor[#visit](https://github.com/rolldown/rolldown/issues/visit)_export_named_declaration (#4419) (f7e95d8)

Miscellaneous Chores

  • don't expose And class in pluginutils (#4537) (985af6d)
  • expose withFilter function via rolldown/filter instead of rolldown (#4369) (ead9749)
  • use camel cases for package.json[#exports](https://github.com/rolldown/rolldown/issues/exports) field (#4366) (2fa6d40)

1.0.0-beta.8 (2025-04-22)

Bug Fixes

  • attach more comments related to export decl (#4219) (a684277)
  • avoid empty line at the beginning of emitted chunks caused by file without imports (#4179) (a3b5f54), closes #4150
  • avoid hang if load error (#4056) (f262f1f)
  • avoid load again if load success at concurrent load (#4156) (821fc82)
  • build: handle empty dependencies in rolldown configuration (#4108) (934d75d)
  • clear js side cache at bundle fininsh (#4158) (10afd61)
  • convert severity of missing_export diagnostic to warning when importee module is ts/tsx (#4147) (57ae80d)
  • correct bundle size calculation (#3994) (748d395)
  • correct the behavior when multiple transform filter option are specified (#4059) (92f7cc6)
  • debug: prevent multiple writes on the same file (#4117) (9131bdc)
  • deconfilct chunk name after name generated (#4191) (1534f4a)
  • don't unwatch files when close watcher (#4105) (729b6cb), closes #4084
  • filter should not stabilize args.specifier (#3972) (85c4bdd)
  • filter test case (#3975) (eeb1005)
  • hmr: should generate correct commonjs wrapper (#4131) (afae765), closes #4129
  • hmr: should register cjs exports differing from esm (#4132) (ca47ca2)
  • isolated_declaration: skip external id (#4026) (8b7c824)
  • make sure flush before write into stdio (#4157) (85dcb2a)
  • named_function_expression_argument (#4074) (e95a392), closes #4045 #4061
  • node: ensure this.meta.watchMode is true in watch mode (#3969) (7ddcaea), closes #3960
  • node: fix webcontainer fallback for cjs rolldown + silence pkg.pr.new check error (#3958) (465ee23)
  • node: resolveId id filter is optional (#3991) (c7e4434)
  • preserve leading comments of export default decl (#4122) (e3ab62a), closes #4006
  • rolldown_plugin_transform: incorrect detection of source_type (#4214) (bfe3e9e), closes #4203
  • rolldown_utils: normalize ids before filtering (#3955) (dc245f0)
  • runtime module should get executed first always (#3978) (1c679ee), closes #3650
  • rust: preserve-legal should correspond to Comments::PreserveLegal (#4137) (cef50bd), closes #4118
  • rust: avoid panic when assetFileNames hash length exceeds 22 (#4019) (86710df), closes #4016
  • rust: crashes with object containing shorthand to NaN (#4197) (7d55cda), closes #4196 #4123
  • support nested plugin for withFilter (#4106) (698bd4c)
  • typo in example code (#4167) (31e3f1b)
  • validate hmr option (#4067) (c1d0963)

Features

Performance Improvements

1.0.0-beta.7 (2025-03-24)

Bug Fixes

  • check dummy record in all import_records.iter (#3930) (2519603)
  • ci: fix broken metric workflow (#3944) (1df6407)
  • determine a module side effects for require a module that can't analyze statically (#3928) (3909fcb), closes #3926
  • mark export all stmt as side effects free (#3897) (0f36c01)
  • metrix ci broken (#3924) (f115e7a)
  • normalize oxc minify keep_names with keep_names option (#3948) (126f3e0)
  • reuse JSON.parse wrapper from oxc-parser (#3904) (1726b6a)
  • tasks/generator: ensure just update-generated-code runs correctly on Windows (#3900) (ca73e82)
  • tasks/generator: ensure consistent path on Windows (#3901) (df042b0)

Features

  • add data structure that used for incremental build (#3932) (8c0b950)
  • add HookTransformAstArgs#stable_id (#3920) (15cb25a)
  • add isolated_declaration plugin (#3894) (529a7be)
  • hmr/poc: change visited map to use VisitState enum for better state management (#3908) (1fd3698)
  • incremental rebuild (#3934) (0b03e35)
  • isolated_declaration: add stripInternal option (#3902) (8f5f8f1)
  • isolated-declaration: emit typing for imported or exported typing module (#3910) (458a62d)
  • make ScanStageOutput cloneable (#3923) (47fe675)
  • make transform_ast hook to async (#3891) (b150e1b)
  • node/hmr: ensure only invoke hmr process if there are live connections (#3907) (9cb523f)
  • node/wasi: add private @rolldown/wasi to prepare to distribute wasm binary in a friendly way (#3925) (53faf0c)
  • remove unused import(...) if importee doesn't have side-effects (#3911) (0ac283b), closes #2827
  • support meta#chunks at render_chunk hook (#3898) (8fd9481)

Performance Improvements

1.0.0-beta.6 (2025-03-17)

1.0.0-beta.5 (2025-03-17)

Bug Fixes

  • cli: fix and improve error message when validating cli options (#3813) (64993bb)
  • cli: remove duplicate error message in stack trace (#3828) (79fea00)
  • dataurl plugin resolve panic (#3822) (251e281)
  • generate sourcemapMappingUrl reference properly (#3849) (2b0f20f), closes #3845
  • renovate: dependencyDashboard is not a preset (#3862) (607e112)

Features

  • calculate relative external module rendered path (#3855) (e0cd410)
  • emit diagnostic when configuration field conflict (#3854) (d0e0a63)
  • filter out diagnostics disabled in checks options (#3846) (4524a58)
  • hmr/rust: invoke transform hook on affected hmr module (#3866) (296d605)
  • hmr/rust: reuse existing ModuleLoader (#3865) (b4dd209)
  • hmr: enhance error handling by wrapping program body in a try-catch block (#3825) (007805a)
  • hmr: inject ModuleHotContext for each module (#3832) (30b9a0b)
  • hmr: support HMR on editing non-hmr-boundary module (#3853) (568197a)
  • hmr: wrap module code into a function (#3851) (8a7b7d1)
  • memorize importer's idx for each moodule (#3852) (3a7758f)
  • support absoulte/relative external (#3834) (d8f0bcb)

Performance Improvements

  • use mimalloc-safe which is maintaining by us (#3869) (6b9d148)

1.0.0-beta.4 (2025-03-11)

Bug Fixes

  • imports with only types are removed even if verbatimModuleSyntax is true (#3784) (ff8d19d), closes #3777
  • windows panic (#3436) (bc5b1e7)
  • keepNames with function declaration panic (#3687) (6016b3c)
  • add sequential?: boolean type for rollup compat (#3442) (e9daf93)
  • add wrong is_cjs_reexport flag (#3532) (c2bcb3d)
  • advanced_chunks: unexpected behavior with maxSize (#3641) (8b59091)
  • avoid generate asset filename panic if emit file with fileName (#3423) (794a63d)
  • avoid preliminary filenames conflict (#3460) (aeb352c)
  • auto polyfill import.meta.* in none esm format (#3454) (287a616)
  • avoid call outputOptions hook at close (#3601) (48b1b86)
  • avoid duplicated init_esm call (#3707) (6eafc2f)
  • build-binding script should reuse passed args (#3774) (77623da)
  • chunk sorting total order (#3451) (73116ab)
  • chunk.modules should order by exec_order (#3638) (8219a83)
  • cjs: ensure esm namespace always exist (#3693) (f0301a6), closes #3619 #3529
  • cli doesn't show config loading error details (#3464) (e048f55)
  • cli: cli default option (#3613) (93d8731)
  • consider require ExpressionIdentfier as a import record (#3428) (2410ee7), closes #3395
  • deconflict export alias (#3457) (fdb55d5)
  • diagnostic in minified file significantly slow down the build (#3498) (2efa799), closes #3455
  • don't enable drop_console when compress is true (#3639) (2382047)
  • entry chunk name should respect sanitizeFileName (#3618) (4ec8869)
  • escape import/export module name and json key (#3458) (4ccaf24)
  • fix ROLLUP_FILE_URL for emitted chunks (#3507) (63b4e88)
  • glob import from parent dir (#3614) (59c5da5)
  • glob_import: return absolute paths for absolute globs (#3701) (eec83c9)
  • hash: should calculate hash dependenies correctly (#3522) (c34d2d4)
  • hash: should compute cross chunk dependecis in stable order (#3524) (52119c7), closes #3453
  • load mts config without type module (#3750) (64998fb)
  • make default sanitizeFilename compatible with rollup (#3431) (67ec7d7), closes #3418 #3418
  • make diagnostic message for eval build event easier to understand (#3766) (efafb0f), closes #3759
  • making return type compatible with rollup/parseAst (#3586) (659cbd3)
  • manifestPlugin: manifest fileds should be camelCase (#3551) (011af34)
  • mf: add remote esm module __esModule flg (#3569) (22d8cf4)
  • minify with jsx preserve (#3730) (d6de53c)
  • minify: disable top_level option for iife format (#3647) (335d3d6)
  • node: add rolldown dist typing check (#3516) (32880da)
  • node: allow output.minify: 'dce-only' (#3805) (e170e6e)
  • node: allow updating sourcemap.debugId by plugins (#3749) (c83cc30)
  • node: EmittedFile type compat (#3745) (55ddf7d)
  • node: make in for additional properties in OutputChunk work (#3635) (cec60e3)
  • node: proxy moduleSideEffects for moduleInfo (#3510) (cc2d779), closes #2781
  • node: tsc build only emit declaration (#3509) (9c0032c)
  • NormalizedOutputOptions option (#3582) (0bfe751)
  • NormalizedOutputOptions sourcemapIgnoreList (#3714) (34556a5)
  • prefix async to runtime helper if module has top level await (#3696) (c4a1aae), closes #3686
  • preserve this for PluginContext#emitFile (#3683) (ca89c63), closes #3634
  • preserve this for PluginContext#getModuleInfo (#3634) (8346be7)
  • regressed from renovate bot (#3484) (d660852)
  • replace all global require to __require when necessary (#3469) (cfcc101)
  • rust: dynamically importing JSON with output.advancedChunks.groups (#3584) (a7e403e), closes #3437 #3343
  • rust: generate specified hash length for emitted asset filenames (#3740) (b770d2c), closes #3737
  • rust: only replace specified-length placeholders for the hash type (#3736) (f4abf32)
  • should consider void expr as side effects free if expr is side effects free (#3479) (857a285), closes #3478
  • should generate correct pattern for cross chunk symbols (#3296) (54fd0f1)
  • splitting: indirect external symbol (#3405) (89db1f3)
  • stackblitz merge_transform_options failed (#3732) (79b9463)
  • stackoverflow when update cjs module meta (#3530) (ece5e77)
  • suppress unresolved require error in try catch block (#3605) (b546e53)
  • sync other moduleSideEffects value in ModuleInfo (#3520) (f65bde3), closes #2781
  • synchronize js ModuleInfo mutation to rust side (#3518) (8922436), closes #2781
  • syntax error when use top level await with strict_execution_order option (#3512) (558ea78)
  • tla: detecting TLA in top level block scope (#3552) (747e54d)
  • top level this substitution (#3567) (89eac9e)

Features

Performance Improvements

  • advanced_chunks: remove unnecessary sorting (#3655) (b814905)
  • avoid unnecessary alloc in to_base64 (#3462) (92d10c3)
  • binding: modules property in RenderedChunk (#3533) (06b6bbf)
  • plugin_dynamic_import_vars: remove Regex (#3702) (3337767)
  • reduce clone of transform_options (#3782) (73fa972)
  • reduce memory alloc for StmtInfo (#3590) (b0898a8)
  • remove unnecessary to_string (#3715) (0ba0ac4)
  • replace data url parse with nom (#3677) (ca90fa2)
  • rolldown_plugin_replace: replace static Regex with pure function (#3690) (e1deaff)
  • rolldown_utils: remove replace placeholder Regex (#3691) (582886c)
  • rust: avoid emitted_filenames to hash twice (#3504) (9404df1)
  • rust: avoid unnecessary into_owned on Cow<str> (#3470) (cdeedac)
  • rust: avoid unnecessary source clone (#3815) (a22cfd2)
  • rust: improve get_lived_entry (#3665) (6e16c3c)
  • should not invalidate ModuleOptions if mutate ModuleInfo has same id with hook param (#3519) (370af62)

1.0.0-beta.3 (2025-01-23)

Bug Fixes

  • dynamic tree shaking more await syntax (#3399) (f11bf03), closes #3396
  • force cjs wrapper to be included in the output (#3400) (8a5eba0)
  • should not set default value for treeshake in cli normalization (#3398) (72ddc66), closes #3392
  • shouldn't generate unused __toESM calls (#3401) (5deb279)
  • sort function panic due to user-provided comparison function does not correctly implement a total order (#3384) (4986046)

Features

1.0.0-beta.2 (2025-01-20)

Bug Fixes

Features

Performance Improvements