NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4399 most downloaded on npm
Node binding for rspack
Last release today
17 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
1123 releases · first in 2022
One column per quarter.
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.5 -->
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.5 -->
swc_core from 56 to 58 by @CPunisher in https://github.com/web-infra-dev/rspack/pull/13164Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-beta.4...v2.0.0-beta.5
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.4 -->
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.4 -->
-production bench cases by @CPunisher in https://github.com/web-infra-dev/rspack/pull/13125Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-beta.3...v2.0.0-beta.4
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.3 -->
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.3 -->
pnp_manifest option to resolver by @smeng9 in https://github.com/web-infra-dev/rspack/pull/12417is_available_chunk when chunk groups form a cycle by @SyMind in https://github.com/web-infra-dev/rspack/pull/13042@rspack/lite-tapable by @colinaaa in https://github.com/web-infra-dev/rspack/pull/13048mockRequire to rstest_mock_require by @9aoy in https://github.com/web-infra-dev/rspack/pull/13056Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-beta.2...v2.0.0-beta.3
fix!: remove deprecated readResourceForScheme hook by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/13027
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.2 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-beta.1...v2.0.0-beta.2
docs: move deprecated options to dedicated page by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12953
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.1 -->
beforeModuleIds hook by @hamlim in https://github.com/web-infra-dev/rspack/pull/12809import.defer() for context module by @ahabhgk in https://github.com/web-infra-dev/rspack/pull/12938resolveImport parser option for css parser to choose whether to resolve @import syntax by @JSerFeng in https://github.com/web-infra-dev/rspack/pull/12672optimization.mangleExports docs by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/13018Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-beta.0...v2.0.0-beta.1
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.0 -->
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-beta.0 -->
import.defer() for statical path by @ahabhgk in https://github.com/web-infra-dev/rspack/pull/12900rstest.importActual not work when imported from @rstest/core by @9aoy in https://github.com/web-infra-dev/rspack/pull/12908Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-alpha.1...v2.0.0-beta.0
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-alpha.1 -->
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-alpha.1 -->
<!-- ## Highlights 💡 -->
boolean type by @9aoy in https://github.com/web-infra-dev/rspack/pull/12824Full Changelog: https://github.com/web-infra-dev/rspack/compare/v2.0.0-alpha.0...v2.0.0-alpha.1
This is an early preview release intended for testing only. It introduces a number of breaking changes that are not yet final.
<!-- Release notes generated using configuration in .github/release.yml at v2.0.0-alpha.0 -->
This is an early preview release intended for testing only. It introduces a number of breaking changes that are not yet final.
See https://github.com/web-infra-dev/rspack/discussions/9270 for all breaking changes.
experiments.SubResourceIntegrityPlugin by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12642experiments.rspackFuture and move bundlerInfo to output by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12654experiments.parallelLoader by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12658profile and stats.profile by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12662verbatimModuleSyntax of builtin:swc-loader by default by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12668rspack.experiments.lazyCompilationMiddleware by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12736output.charset by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12660.swcrc reading in JavaScript compiler by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12667@rspack/browser failure after pure esm transformation by @Timeless0911 in https://github.com/web-infra-dev/rspack/pull/12781Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.3...v2.0.0-alpha.0
<!-- Release notes generated using configuration in .github/release.yml at v1.7.12 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.12 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.11...v1.7.12
<!-- Release notes generated using configuration in .github/release.yml at v1.7.11 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.11 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.10...v1.7.11
<!-- Release notes generated using configuration in .github/release.yml at v1.7.10 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.10 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.9...v1.7.10
<!-- Release notes generated using configuration in .github/release.yml at v1.7.9 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.9 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.8...v1.7.9
<!-- Release notes generated using configuration in .github/release.yml at v1.7.8 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.8 -->
beforeModuleIds hook by @hamlim in https://github.com/web-infra-dev/rspack/pull/13223Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.7...v1.7.8
<!-- Release notes generated using configuration in .github/release.yml at v1.7.7 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.7 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.6...v1.7.7
<!-- Release notes generated using configuration in .github/release.yml at v1.7.6 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.6 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.5...v1.7.6
<!-- Release notes generated using configuration in .github/release.yml at v1.7.5 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.5 -->
rstest.importActual not work when imported from @rstest/core by @9aoy in https://github.com/web-infra-dev/rspack/pull/12918Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.4...v1.7.5
<!-- Release notes generated using configuration in .github/release.yml at v1.7.4 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.4 -->
require.resolve() replaced as require() by @intellild in https://github.com/web-infra-dev/rspack/pull/12773rs.requireActual and rs.importActual in all contexts by @9aoy in https://github.com/web-infra-dev/rspack/pull/12806X ms by @stormslowly in https://github.com/web-infra-dev/rspack/pull/12790Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.3...v1.7.4
<!-- Release notes generated using configuration in .github/release.yml at v1.7.3 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.3 -->
swc_core from 54 to 55 by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12758Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.2...v1.7.3
<!-- Release notes generated using configuration in .github/release.yml at v1.7.2 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.2 -->
requireAlias option to control require variable renaming by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12686sync_trace for logger tracing layer by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12687preserveNewUrl option to keep new URL untouched by @fi3ework in https://github.com/web-infra-dev/rspack/pull/12632environments.importMetaDirnameAndFilename not work by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12708Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.1...v1.7.2
<!-- Release notes generated using configuration in .github/release.yml at v1.7.1 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.7.1 -->
compiler.rspack by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12636ExprRef to avoid clone Expr ast nodes by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12622Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.0...v1.7.1
feat: improve deprecation warning messages by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12524
<!-- Release notes generated using configuration in .github/release.yml at release/v1.7.0 -->
swc_core from 46.0.3 to 50.2.3 and swc_experimental by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12445SourceFile with &str and replace Arc<SourceMap> with Rope in rspack_plugin_javascript by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12404ignoreWarnings option with detailed examples by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12436module.rules options into a dedicated page by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12452resolve.byDependency description and examples by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12458output.asyncChunks documentation and examples by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12500CaseSensitivePlugin by @Timeless0911 in https://github.com/web-infra-dev/rspack/pull/12550swc_experimental to fix parsing utf8 in template by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12431Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.8...v1.7.0
feat: improve deprecation warning messages by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12524
<!-- Release notes generated using configuration in .github/release.yml at v1.7.0-beta.1 -->
output.asyncChunks documentation and examples by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12500Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.7.0-beta.0...v1.7.0-beta.1
docs: add deprecated options documentation by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12448
<!-- Release notes generated using configuration in .github/release.yml at main -->
The latest version of SWC enhances the compatibility of Wasm plugins. This means future upgrades of Rspack and SWC will almost no longer break SWC Wasm plugins. Additionally, the SWC upgrade brings a 10% performance improvement to the parser.
Since Rspack v1.5 has stabilized Lazy Compilation, we are now enabling it by default for dynamic imports cases when the target is web.
export default defineConfig({
lazyCompilation: {
imports: true,
},
});
In the previous releases, the experimental features experiments.lazyBarrel, experiments.inlineConst, experiments.inlineEnum were introduced to enable cross-module inlining optimizations for constants. These optimizations improve minifiers' ability to perform precise static analysis, eliminate unused code branches, and further reduce bundle size.
After thorough validation, we are now promoting these features from experimental to stable.
export default {
experiments: {
- inlineConst: true,
- inlineEnum: true,
- lazyBarrel: true,
- typeReexportsPresence: true,
},
module: {
parser: {
javascript: {
- inlineConst: true,
typeReexportsPresence: true,
},
},
},
optimization: {
+ inlineExports: true,
},
}
swc_core from 46.0.3 to 50.2.3 and swc_experimental by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12445SourceFile with &str and replace Arc<SourceMap> with Rope in rspack_plugin_javascript by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12404ignoreWarnings option with detailed examples by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12436module.rules options into a dedicated page by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12452resolve.byDependency description and examples by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12458swc_experimental to fix parsing utf8 in template by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12431Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.7...v1.7.0-beta.0
<!-- Release notes generated using configuration in .github/release.yml at v1.6.8 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.8 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.7...v1.6.8
<!-- Release notes generated using configuration in .github/release.yml at v1.6.7 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.7 -->
import.meta.filename, import.meta.dirname, and import.meta.resolveRspack now supports the import.meta.filename, import.meta.dirname, and import.meta.resolve meta properties in ESM modules.
These properties provide a standardized way to access file and directory paths in ES modules, similar to the CommonJS __filename and __dirname variables:
// Get the absolute path of the current module file
console.log(import.meta.filename);
// e.g., "/path/to/project/src/index.js"
// Get the directory path of the current module
console.log(import.meta.dirname);
// e.g., "/path/to/project/src"
// Resolve a module specifier to an absolute URL
const resolvedPath = import.meta.resolve('./utils.js');
Thanks to @magic-akari for this contribution!
import.meta.filename/dirname/resolve by @magic-akari in https://github.com/web-infra-dev/rspack/pull/12317[relative-resource-path] in moduleFilenameTemplate by @SyMind in https://github.com/web-infra-dev/rspack/pull/12370.rspack[...] syntax and rebrand CSS extract plugin internals by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12385Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.6...v1.6.7
<!-- Release notes generated using configuration in .github/release.yml at v1.6.6 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.6 -->
Rspack now generates a more compact module factory format that trims the wrapper function. Benchmarks show this reduces bundle size by about 1% before gzip.
<img width="500" height="902" alt="image" src="https://github.com/user-attachments/assets/4228b6c4-c3eb-47a1-8b0c-54ce8db67322" />
output.pathinfo by default by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12306__webpack_require__ in static code by runtime template by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12284output.environment configuration by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12312Rule.use.parallel to include maxWorkers option by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12322import_meta_property_in_destructuring parser hook by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12255Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.5...v1.6.6
<!-- Release notes generated using configuration in .github/release.yml at v1.6.5 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.5 -->
experiments.css and CssExtractRspackPlugin by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12239devServer.hot: false not work by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12261node options docs by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12236maxConcurrency and testTimeout should be configurable via cli options by @9aoy in https://github.com/web-infra-dev/rspack/pull/12231Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.4...v1.6.5
<!-- Release notes generated using configuration in .github/release.yml at v1.6.4 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.4 -->
output.path while emitting assets by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12181[name]/[file] in wasm filename template by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12184swc-loader should not respect .swcrc by @CPunisher in https://github.com/web-infra-dev/rspack/pull/12222Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.3...v1.6.4
<!-- Release notes generated using configuration in .github/release.yml at v1.6.3 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.3 -->
uncaughtException correctly by @9aoy in https://github.com/web-infra-dev/rspack/pull/12179Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.2...v1.6.3
chore: deprecate experiments.parallelCodeSplitting by @JSerFeng in https://github.com/web-infra-dev/rspack/pull/12169
<!-- Release notes generated using configuration in .github/release.yml at v1.6.2 -->
import.meta.url as the only param of new Worker() by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12095loaderContext.resolve by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12107toMatchFileSnapshot to toMatchFileSnapshotSync by @9aoy in https://github.com/web-infra-dev/rspack/pull/12139Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.1...v1.6.2
docs: move deprecated experimental options to the bottom by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12049
<!-- Release notes generated using configuration in .github/release.yml at release/1.6.1 -->
In Rspack 1.6.1, the source map implementation in the rspack-sources crate has been optimized, improving source map generation performance by roughly 30%.
<img width="600" alt="image" src="https://github.com/user-attachments/assets/f7e55200-120f-4cdb-a7d6-85e857c46015" />
__non_webpack_require__ with es modules by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12052OutputFileSystem.createReadStream by @colinaaa in https://github.com/web-infra-dev/rspack/pull/12059output.path must be absolute by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/12061warnUnexpectedRequire as undefined module factory by @stormslowly in https://github.com/web-infra-dev/rspack/pull/12016new URL("", import.meta.url) should be pure by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/12076Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.0...v1.6.1
<!-- Release notes generated using configuration in .github/release.yml at v1.6.0 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.0 -->
modules in BrowserRequirePlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11822extractSourceMap option by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11814memfs by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11942serde feature of lightningcss (#11706)" by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11796stats.color type to include fine-grained options by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/11797rspack_fs by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11948resolve.alias affects package resolution by @SyMind in https://github.com/web-infra-dev/rspack/pull/11799useInputFileSystem to "In-Memory File system" section by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11833resolve.alias description for BrowserHttpImportEsmPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11838experiements.deferImport by @ahabhgk in https://github.com/web-infra-dev/rspack/pull/12018template.md and readme.md in webpack-examples by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/11865BROWSER env by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11855hideSkippedTests option by @9aoy in https://github.com/web-infra-dev/rspack/pull/11952Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.8...v1.6.0
<!-- Release notes generated using configuration in .github/release.yml at v1.6.0-beta.1 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.0-beta.1 -->
EsmLibraryPlugin now provides experimental support for the preserveModules feature. This allows you to maintain your source code structure as is while bundling all libraries within the node_modules folder. You can try it out using the following configuration example:
Feel free to copy and use it!
import { rspack } from "@rspack/core";
import path from 'node:path'
export default{
entry: "./index.js",
output: {
chunkFormat: false, // required, EsmLibraryPlugin handles how chunk renders
chunkLoading: 'import', // required, using es module dynamic import syntax to load other chunks
},
optimization: {
runtimeChunk: true, // recommended if you have async chunks
concatenateModules: false, // required, EsmLibraryPlugin handles scope hoisting
},
plugins: [
new rspack.experiments.EsmLibraryPlugin({
preserveModules: path.resolve(__dirname, './src')
})
],
};
Rspack now supports defer import, you can enable it by experiments.deferImport = true. It is worth noting that we currently only support import defer, import.defer() will be implemented in the near future.
export default {
experiments: {
deferImport: true
}
}
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.6.0-beta.0...v1.6.0-beta.1
<!-- Release notes generated using configuration in .github/release.yml at v1.6.0-beta.0 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.6.0-beta.0 -->
Rspack now provides a new ESM library output that is cleaner, statically analyzable, and supports custom chunk splitting.
This new output format is fully independent of the existing chunk loading logic — each chunk can be used in isolation, and all exports are placed at the top level instead of being wrapped inside the __webpack_modules__ closure.
exports.modules = {
"src/async-module.js": function(exports) {
__webpack_require__.d(exports, {
foo: () => foo
})
const foo = 42
}
}
// src/async-module.js
const foo = 42
export { foo }
If you'd like to try this now, follow this example:
import { rspack } from "@rspack/core";
export default{
entry: "./index.js",
output: {
chunkFormat: false, // required, EsmLibraryPlugin handles how chunk renders
chunkLoading: 'import', // required, using es module dynamic import syntax to load other chunks
},
optimization: {
runtimeChunk: true, // recommended if you have async chunks
concatenateModules: false, // required, EsmLibraryPlugin handles scope hoisting
},
plugins: [new rspack.experiments.EsmLibraryPlugin()],
};
We'll make this out-of-box in Rslib soon.
See EsmLibraryPlugin for more.
The layer feature is now enabled by default - you no longer need to enable it manually using the experiments.layer option.
Layers is a feature that helps you group certain modules and their dependencies, allowing you to bundle them using different transforms.
For example, you can generate both ES5 and ES2015 outputs in one compilation by assigning different layers to different entries with the following configuration:
export default {
entry: {
legacy: {
import: "./index.js",
layer: "es5",
},
modern: {
import: "./index.js",
layer: "es6",
},
},
module: {
rules: [
{
test: /\.js$/,
oneOf: [
{
issuerLayer: "es5",
use: [
{
loader: "builtin:swc-loader",
options: {
jsc: {
target: "es5",
// ...
},
},
},
],
},
{
issuerLayer: "es6",
use: [
{
loader: "builtin:swc-loader",
options: {
jsc: {
target: "es2015",
// ...
},
},
},
]
},
],
},
],
},
};
Rspack now supports extracting existing source map data from files (from their //# sourceMappingURL comment) via Rule.extractSourceMap. This feature is particularly useful for preserving source maps provided by third-party libraries, ensuring that debugging information remains accurate even when those libraries are bundled or transformed.
It was originally introduced in webpack v5.102.0
as a built-in replacement for the source-map-loader plugin, offering better performance and tighter integration with the build process.
export default {
// ...
module: {
rules: [
{
test: /\.m?js$/,
extractSourceMap: true,
},
],
},
};
Since Rspack v1.5 introduced experimental barrel file optimization, it has been enabled by default in Rsbuild to collect early feedback.
After extensive usage and validation within Rsbuild, we now consider lazyBarrel stable, and it is enabled by default in Rspack as well.
modules in BrowserRequirePlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11822extractSourceMap option by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11814serde feature of lightningcss (#11706)" by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11796stats.color type to include fine-grained options by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/11797resolve.alias affects package resolution by @SyMind in https://github.com/web-infra-dev/rspack/pull/11799useInputFileSystem to "In-Memory File system" section by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11833resolve.alias description for BrowserHttpImportEsmPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11838template.md and readme.md in webpack-examples by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/11865BROWSER env by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11855Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.8...v1.6.0-beta.0
<!-- Release notes generated using configuration in .github/release.yml at v1.5.8 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.8 -->
Rspack now supports more precise tree shaking for nested exports accessed through destructuring assignments.
// lib.js
export * as a from "./a";
export * as b from "./b";
// index.js
import * as lib from "./lib";
// Before: All exports under `lib.a` were retained, only `lib.b` was tree-shaken
// Now: Only the specific property `inner` from `lib.a` is kept; everything else is removed
const { a: { inner } } = lib;
commonjs options by @fi3ework in https://github.com/web-infra-dev/rspack/pull/11744Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.7...v1.5.8
<!-- Release notes generated using configuration in .github/release.yml at v1.5.7 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.7 -->
.then()This release enhances tree shaking capabilities specifically for the .then() callbacks of dynamic imports. Rspack can now statically analyze and eliminate unused exports when destructuring is performed on the resolved module within promise chains:
// Tree shaking now works for destructuring in .then() callbacks
import('./utils').then(module => {
const { usedFunction } = module; // Only usedFunction will be included
usedFunction();
// unusedFunction will be tree-shaken out
});
Rspack now supports parsing and preserving JSX syntax. This allows JSX syntax to be parsed without transformation, making it compatible with external JSX transformers.
// rspack.config.js
export default {
module: {
parser: {
javascript: {
jsx: true // Enable JSX parsing
}
},
rules: [
{
test: /\.jsx?$/,
use: {
loader: 'swc-loader',
options: {
jsc: {
parser: { jsx: true },
transform: {
// Preserve JSX syntax
react: { runtime: 'preserve' }
}
}
}
}
}
]
}
};
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.6...v1.5.7
<!-- Release notes generated using configuration in .github/release.yml at v1.5.6 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.6 -->
serde feature of lightningcss by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11706Buffer by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11714owned_or_ref implement rkyv macro by @jerrykingxyz in https://github.com/web-infra-dev/rspack/pull/11708Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.5...v1.5.6
chore: deprecate copilot-instruction.md in favor of AGHENTS.md by @hardfist in https://github.com/web-infra-dev/rspack/pull/11669
<!-- Release notes generated using configuration in .github/release.yml at v1.5.5 -->
emitRecords compiler hook by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/11671resolve.extensions configuration by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/11672Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.4...v1.5.5
<!-- Release notes generated using configuration in .github/release.yml at v1.5.4 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.4 -->
module identifier as normal (#11588)" by @fi3ework in https://github.com/web-infra-dev/rspack/pull/11630Preview with stackblitz section by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11614BrowserHttpImportEsmPlugin and add "Using Module Federation" by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11640tests/rspack-test by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/11617Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.3...v1.5.4
<!-- Release notes generated using configuration in .github/release.yml at v1.5.3 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.3 -->
Rspack v1.5.3 ships advanced tree-shaking for dynamic imports via member expression analysis.
Ongoing improvements are in progress, and upcoming releases will continue to improve static analysis to cover more syntax patterns, such as dynamic import with a subsequent .then().
<img width="700" height="1048" alt="image" src="https://github.com/user-attachments/assets/024a8bf4-5d6d-46d8-beca-90c43530e4f7" />
ModuleFederationPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11558postprocess and ResolvedRequest to BrowserHttpImportEsmPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11571jsc.output.charset in swc loader by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11568module identifier as normal by @fi3ework in https://github.com/web-infra-dev/rspack/pull/11588Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.2...v1.5.3
<!-- Release notes generated using configuration in .github/release.yml at v1.5.2 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.2 -->
link.href for extract-css runtime by @JSerFeng in https://github.com/web-infra-dev/rspack/pull/11547Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.1...v1.5.2
<!-- Release notes generated using configuration in .github/release.yml at v1.5.1 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.1 -->
ProgressPlugin, RsdoctorPlugin and RstestPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11484SwcJsMinimizerRspackPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11496Rule.type with more details by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/11503Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.0...v1.5.1
chore: deprecated experiments.topLevelAwait config by @stormslowly in https://github.com/web-infra-dev/rspack/pull/11284
<!-- Release notes generated using configuration in .github/release.yml at v1.5.0 --> <img width="4060" height="1050" alt="rspack-banner-v1-5" src="https://github.com/user-attachments/assets/2da71274-f227-4de6-8dc2-238eff8d76bd" />
try_to_add of module concatenation by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/11279fmt_debug to none by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11439get_scheme by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11475Mutex<Option<T>> with OnceLock<T> by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11480@rspack/browser by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10870experiments.swc in parallel loader context by @jbroma in https://github.com/web-infra-dev/rspack/pull/11300import externalized module to webpack modules by @fi3ework in https://github.com/web-infra-dev/rspack/pull/11358[folder] template string in localIdentName option by @mochiya98 in https://github.com/web-infra-dev/rspack/pull/11356BrowserImportEsmPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11431BrowserRequirePlugin and remove nonWebpackRequire by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11470PathData type by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11315rspack_binding_api by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11263PluginContext and async_trait from trait Plugin by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11272esm.sh default domain in BrowserHttpImportEsmPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11482@rspack/browser package by @CPunisher in https://github.com/web-infra-dev/rspack/pull/114722025-07-28 by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11217@rspack/browser by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11254experiments.topLevelAwait config by @stormslowly in https://github.com/web-infra-dev/rspack/pull/11284rspack_binding_api in CODEOWNERS by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11307@rsbuild/core by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11383swc_core from 35.0.0 to 36.0.0 by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11419Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.11...v1.5.0
<!-- Release notes generated using configuration in .github/release.yml at v1.5.0-rc.0 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.0-rc.0 -->
fmt_debug to none by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11439BrowserImportEsmPlugin by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11431swc_core from 35.0.0 to 36.0.0 by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11419Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.0-beta.1...v1.5.0-rc.0
<!-- Release notes generated using configuration in .github/release.yml at v1.5.0-beta.1 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.5.0-beta.1 -->
Rspack now supports the "using" declaration.
This enables the explicit resource management feature in ECMAScript, making resource cleanup more straightforward ✨
<img width="512" height="2048" alt="image" src="https://github.com/user-attachments/assets/c4643270-63f8-43d3-88e2-aa31176ff13f" />
Learn more: using - MDN
import externalized module to webpack modules by @fi3ework in https://github.com/web-infra-dev/rspack/pull/11358[folder] template string in localIdentName option by @mochiya98 in https://github.com/web-infra-dev/rspack/pull/11356@rsbuild/core by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11383Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.5.0-beta.0...v1.5.0-beta.1
Deprecating experiments.topLevelAwait—setting it to false will now show a deprecation warning. This feature will be enabled by default and the config…
<!-- Release notes generated using configuration in .github/release.yml at v1.5.0-beta.0 -->
Here's a sneak peek at the exciting new features coming in Rspack 1.5.0.
https://github.com/web-infra-dev/rspack/pull/10524
This update introduces a runtime module that initializes federation during Rspack's runtime phase—similar to Webpack v1's Module Federation. The federation runtime is hoisted into runtime chunks, bypassing normal code-splitting rules, so it's eagerly available at startup.
Impact: In multi-entry applications using Module Federation, this can reduce bundle size by ~60%.
More details: https://gist.github.com/ScriptedAlchemy/a71ccbdfb933e8a4cd0131801a2c26b5#file-hoisted-runtime-internal-md
https://github.com/web-infra-dev/rspack/pull/10658
We've implemented a Rust-based file system watcher to improve performance in large-scale file change scenarios. Moving file watching into Rust also cuts down on overhead across the NAPI boundary.
https://github.com/web-infra-dev/rspack/pull/10857
Want to build high-performance plugins for Rspack? This feature makes it easier. If writing a Rust plugin feels daunting, check out The Rspack Book—the first section covers customizing a Rspack binding step-by-step.
https://github.com/web-infra-dev/rspack/pull/10870
Yes, you can now run Rspack directly in the browser! We've even built a web REPL so you can try it instantly: repl.rspack.rs 🚀
https://github.com/web-infra-dev/rspack/pull/11021
Thanks to @nilptr's contribution, Rspack now includes a built-in Virtual Modules plugin. If you work with a large number of virtual modules, this plugin helps Rspack maintain top performance even at scale.
https://github.com/web-infra-dev/rspack/pull/11338
@rspack/core v1.5 will no longer support Node 16, as Node.js reached end-of-life on September 11th, 2023. Many npm packages in the ecosystem have also dropped support for Node 16 (such as webpack-dev-server, css-loader, sass-loader, etc.), making it increasingly difficult to maintain compatibility.
| Package | v1.4 | v1.5 |
|---|---|---|
| @rspack/core | >=16.0.0 | >=18.12.0 |
| @rspack/cli | >=18.12.0 | >=18.12.0 |
| @rspack/dev-server | >=18.12.0 | >=18.12.0 |
| @rsbuild/core | >=16.10.0 | >=18.12.0 |
LazyCompilation feature—experiments.lazyCompilation is now available at the top level of Rspack's config.experiments.topLevelAwait—setting it to false will now show a deprecation warning. This feature will be enabled by default and the config option removed in the next major release.try_to_add of module concatenation by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/11279@rspack/browser by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10870experiments.swc in parallel loader context by @jbroma in https://github.com/web-infra-dev/rspack/pull/11300PathData type by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11315rspack_binding_api by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11263PluginContext and async_trait from trait Plugin by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/112722025-07-28 by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11217@rspack/browser by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11254experiments.topLevelAwait config by @stormslowly in https://github.com/web-infra-dev/rspack/pull/11284rspack_binding_api in CODEOWNERS by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11307Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.11...v1.5.0-beta.0
<!-- Release notes generated using configuration in .github/release.yml at v1.4.11 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.11 -->
atomic_refcell by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11177napi bindgen preludes by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11212exportedEnum by default by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/11169resource instead of path in resolve by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11194resource in resolver.resolveSync by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11203JAVASCRIPT_ASSET_REGEXP if test is provided by @CPunisher in https://github.com/web-infra-dev/rspack/pull/11231resolve.conditionNames documentation by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/11216Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.10...v1.4.11
<!-- Release notes generated using configuration in .github/release.yml at v1.4.10 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.10 -->
<img width="500" src="https://github.com/user-attachments/assets/44246c4b-017b-44ba-b241-3bf4741ea1fd" />
RUNTIME_GLOBAL_MAP by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11127Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.9...v1.4.10
<!-- Release notes generated using configuration in .github/release.yml at v1.4.9 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.9 -->
In Rspack v1.4.9, we focused on optimizing our Rust dependencies and build flags. This effort has resulted in significant reductions to Rspack's install size across all platforms. We continue to work on further size optimizations and expect additional improvements in future releases.
| Platform | Rspack 1.4.8 | Rspack 1.4.9 | Diff |
|---|---|---|---|
| @rspack/binding-linux-x64-gnu | 59.4MB | 51.3MB | 8.1MB |
| @rspack/binding-darwin-arm64 | 46.1MB | 43.2MB | 2.9MB |
| @rspack/binding-win32-x64-msvc | 51.4MB | 48.5MB | 2.9MB |
resource instead of identifier by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11086externalHelpers: false by @colinaaa in https://github.com/web-infra-dev/rspack/pull/11108"every" by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11070--warn-unresolved-symbols by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11115Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.8...v1.4.9
<!-- Release notes generated using configuration in .github/release.yml at v1.4.8 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.8 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.7...v1.4.8
<!-- Release notes generated using configuration in .github/release.yml at v1.4.7 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.7 -->
Rspack implements a Native Watcher solution rather than using the watchpack npm package for file system observation. This architecture allows for incremental watcher system creation with every rebuild cycle.
See experiments.nativeWatcher for more details.
RawModule by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10954--devtool CLI flag not work as expected by @Meet-student in https://github.com/web-infra-dev/rspack/pull/10880Ref and RefMut of DashMap by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10982splitChunks.chunks and update glossary by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/10990x version command by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/10994cargo codegen to pnpm x version script by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/11018Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.6...v1.4.7
Nothing published for this version
Nothing published for this version
<!-- Release notes generated using configuration in .github/release.yml at v1.4.6 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.6 -->
std::fs and tokio::fs with inputFileSystem and outputFileSystem by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10960extends configuration by @GiveMe-A-Name in https://github.com/web-infra-dev/rspack/pull/10959binding_api to ensure the version consistency by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/10969Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.5...v1.4.6
<!-- Release notes generated using configuration in .github/release.yml at v1.4.5 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.5 -->
fail-fast to false by @stormslowly in https://github.com/web-infra-dev/rspack/pull/10869Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.4...v1.4.5
<!-- Release notes generated using configuration in .github/release.yml at v1.4.4 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.4 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.3...v1.4.4
<!-- Release notes generated using configuration in .github/release.yml at v1.4.3 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.3 -->
parking_lot nightly to avoid panic in tests by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/10892module property of WebpackError to be null by @SyMind in https://github.com/web-infra-dev/rspack/pull/10905Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.2...v1.4.3
<!-- Release notes generated using configuration in .github/release.yml at v1.4.2 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.2 -->
Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.1...v1.4.2
<!-- Release notes generated using configuration in .github/release.yml at v1.4.1 -->
<!-- Release notes generated using configuration in .github/release.yml at v1.4.1 -->
_webpack_require_ while using SRI plugin by @LingyuCoder in https://github.com/web-infra-dev/rspack/pull/10805Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.4.0...v1.4.1
refactor(zod/v4): replace deprecated .superRefine() by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10729
<!-- Release notes generated using configuration in .github/release.yml at release-v1.4.0 -->
ModuleGraphCache and cache the result of get_mode and determine_export_assignments by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10584esm_export_imported_specifier_dependency by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10657partial to make all properties optional by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/10778inputFileSystem on the rust side by @nilptr in https://github.com/web-infra-dev/rspack/pull/8643callbackify callbacks by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/10622StatsErrorCode by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/10624number_hash should use u64 to avoid addition overflow by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10615Mutex<Arc<tokio::sync::OnceCell<JsLoaderRunner>>> to avoid loader runner deadlock by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10632jsc.output.charset of swc-loader by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/10668browserslist:env from target by @chenjiahan in https://github.com/web-infra-dev/rspack/pull/10730-debugids to Zod schema by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10728loaderContext.importModule should return error by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10750experiments field by @fi3ework in https://github.com/web-infra-dev/rspack/pull/10758.superRefine() for builtin:swc-loader by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10679.superRefine() by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10729rspack_node into separate rspack_binding_api by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/10770z.function with z.custom by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10602.superRefine() for externals by @colinaaa in https://github.com/web-infra-dev/rspack/pull/10609start/shutdownAsyncRuntime and exports by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10659rc tag by @h-a-n-a in https://github.com/web-infra-dev/rspack/pull/10761NeverGrowInPlaceAllocator for benchmark by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10781fair-sched for codspeed by @CPunisher in https://github.com/web-infra-dev/rspack/pull/10734Full Changelog: https://github.com/web-infra-dev/rspack/compare/v1.3.15...v1.4.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →