OptionalchecksOptionalcontextThe value of this at the top level of each module. Normally, you don't need to set this option.
OptionalcwdThe working directory to use when resolving relative paths in the configuration.
Optional ExperimentaldevtoolsDevtools integration options.
Optional ExperimentalexperimentalExperimental features that may change in future releases and can introduce behavior change without a major version bump.
OptionalattachDebugInfo?: "none" | "simple" | "full"Attach debug information to the output bundle.
Available modes:
none: No debug information is attached.simple: Attach comments indicating which files the bundled code comes from. These comments could be removed by the minifier.full: Attach detailed debug information to the output bundle. These comments are using legal comment syntax, so they won't be removed by the minifier.OptionalchunkImportMap?: boolean | { baseUrl?: string; fileName?: string }Enables automatic generation of a chunk import map asset during build.
This map only includes chunks with hashed filenames, where keys are derived from the facade module name or primary chunk name. It produces stable and unique hash-based filenames, effectively preventing cascading cache invalidation caused by content hashes and maximizing browser cache reuse.
The output defaults to importmap.json unless overridden via fileName. A base URL prefix
(default "/") can be applied to all paths. The resulting JSON is a valid import map and can be
directly injected into HTML via <script type="importmap">.
{
experimental: {
chunkImportMap: {
baseUrl: '/',
fileName: 'importmap.json'
}
},
plugins: [
{
name: 'inject-import-map',
generateBundle(_, bundle) {
const chunkImportMap = bundle['importmap.json'];
if (chunkImportMap?.type === 'asset') {
const htmlPath = path.resolve('index.html');
let html = fs.readFileSync(htmlPath, 'utf-8');
html = html.replace(
/<script\s+type="importmap"[^>]*>[\s\S]*?</script>/i,
`<script type="importmap">${chunkImportMap.source}</script>`
);
fs.writeFileSync(htmlPath, html);
delete bundle['importmap.json'];
}
}
}
]
}
If you want to learn more, you can check out the example here: examples/chunk-import-map
OptionalchunkModulesOrder?: "exec-order" | "module-id"Control which order should be used when rendering modules in a chunk.
Available options:
exec-order: Almost equivalent to the topological order of the module graph, but specially handling when module graph has cycle.module-id: This is more friendly for gzip compression, especially for some javascript static asset lib (e.g. icon library)Try to sort the modules by their module id if possible (Since rolldown scope hoist all modules in the chunk, we only try to sort those modules by module id if we could ensure runtime behavior is correct after sorting).
OptionalchunkOptimization?: booleanControl whether to optimize chunks by allowing entry chunks to have different exports than the underlying entry module. This optimization can reduce the number of generated chunks.
When enabled, rolldown will try to insert common modules directly into existing chunks rather than creating separate chunks for them, which can result in fewer output files and better performance.
This optimization is automatically disabled when any module uses top-level await (TLA) or contains TLA dependencies, as it could affect execution order guarantees.
OptionalincrementalBuild?: booleanEnable incremental build support. Required to be used with watch mode.
OptionallazyBarrel?: booleanControl whether to enable lazy barrel optimization.
Lazy barrel optimization avoids compiling unused re-export modules in side-effect-free barrel modules, significantly improving build performance for large codebases with many barrel modules.
OptionalnativeMagicString?: booleanUse native Rust implementation of MagicString for source map generation.
MagicString is a JavaScript library commonly used by bundlers for string manipulation and source map generation. When enabled, rolldown will use a native Rust implementation of MagicString instead of the JavaScript version, providing significantly better performance during source map generation and code transformation.
Benefits
export default {
experimental: {
nativeMagicString: true
},
output: {
sourcemap: true
}
}
This is an experimental feature. While it aims to provide identical behavior to the JavaScript implementation, there may be edge cases. Please report any discrepancies you encounter. For a complete working example, see examples/native-magic-string
OptionalresolveNewUrlToAsset?: booleanWhen enabled, new URL() calls will be transformed to a stable asset URL which includes the updated name and content hash.
It is necessary to pass import.meta.url as the second argument to the
new URL constructor, otherwise no transform will be applied.
:::warning
JavaScript and TypeScript files referenced via new URL('./file.js', import.meta.url) or new URL('./file.ts', import.meta.url) will not be transformed or bundled. The file will be copied as-is, meaning TypeScript files remain untransformed and dependencies are not resolved.
The expected behavior for JS/TS files is still being discussed and may change in future releases. See #7258 for more context. :::
// main.js
const url = new URL('./styles.css', import.meta.url);
console.log(url);
// Example output after bundling WITHOUT the option (default)
const url = new URL('./styles.css', import.meta.url);
console.log(url);
// Example output after bundling WITH `experimental.resolveNewUrlToAsset` set to `true`
const url = new URL('assets/styles-CjdrdY7X.css', import.meta.url);
console.log(url);
OptionalexternalSpecifies which modules should be treated as external and not bundled. External modules will be left as import statements in the output.
OptionalinputDefines entries and location(s) of entry modules for the bundle. Relative paths are resolved based on the cwd option.
OptionallogControls the verbosity of console logging during the build.
OptionalmakeDetermines if absolute external paths should be converted to relative paths in the output.
This does not only apply to paths that are absolute in the source but also to paths that are resolved to an absolute path by either a plugin or Rolldown core.
OptionalmoduleMaps file patterns to module types, controlling how files are processed.
This is conceptually similar to esbuild's loader option, allowing you to specify how each file extensions should be handled.
See the In-Depth Guide for more details.
OptionalonA function that intercepts log messages. If not supplied, logs are printed to the console.
export default defineConfig({
onLog(level, log, defaultHandler) {
if (log.code === 'CIRCULAR_DEPENDENCY') {
return; // Ignore circular dependency warnings
}
if (level === 'warn') {
defaultHandler('error', log); // turn other warnings into errors
} else {
defaultHandler(level, log); // otherwise, just print the log
}
}
})
OptionalonwarnA function that will intercept warning messages.
This is a legacy API. Consider using onLog instead for better control over all log types.
OptionaloptimizationConfigure optimization features for the bundler.
OptionalplatformExpected platform where the code run.
When the platform is set to neutral:
OptionalpluginsThe list of plugins to use.
Falsy plugins will be ignored, which can be used to easily activate or deactivate plugins. Nested plugins will be flattened. Async plugins will be awaited and resolved.
See Plugin API document for more details about creating plugins.
OptionalpreserveControls how entry chunk exports are preserved.
This determines whether Rolldown needs to create facade chunks (additional wrapper chunks) to maintain the exact export signatures of entry modules, or whether it can combine entry modules with other chunks for optimization.
OptionalresolveOptions for built-in module resolution feature.
Optionalalias?: Record<string, string | false | string[]>Substitute one package for another.
One use case for this feature is replacing a node-only package with a browser-friendly package in third-party code that you don't control.
resolve: {
alias: {
'@': '/src',
'utils': './src/utils',
}
}
resolve.alias will not call resolveId hooks of other plugin.
If you want to call resolveId hooks of other plugin, use viteAliasPlugin from rolldown/experimental instead.
You could find more discussion in this issue
OptionalaliasFields?: string[][]Fields in package.json to check for aliased paths.
This option is expected to be used for browser field support.
OptionalconditionNames?: string[]Condition names to use when resolving exports in package.json.
Defaults based on platform and import kind:
browser platform
["import", "browser", "default"] for import statements["require", "browser", "default"] for require() callsnode platform
["import", "node", "default"] for import statements["require", "node", "default"] for require() callsneutral platform
["import", "default"] for import statements["require", "default"] for require() callsOptionalexportsFields?: string[][]Fields in package.json to check for exports.
OptionalextensionAlias?: Record<string, string[]>Map of extensions to alternative extensions.
With writing import './foo.js' in a file, you want to resolve it to foo.ts instead of foo.js.
You can achieve this by setting: extensionAlias: { '.js': ['.ts', '.js'] }.
Optionalextensions?: string[]Extensions to try when resolving files. These are tried in order from first to last.
OptionalmainFields?: string[]Fields in package.json to check for entry points.
OptionalmainFiles?: string[]Filenames to try when resolving directories.
Optionalmodules?: string[]Directories to search for modules.
Optionalsymlinks?: booleanWhether to follow symlinks when resolving modules.
OptionaltsconfigFilename?: stringUse the top-level tsconfig option instead.
OptionalshimWhen true, creates shim variables for missing exports instead of throwing an error.
OptionaltransformConfigure how the code is transformed. This process happens after the transform hook.
OptionaltreeshakeControls tree-shaking (dead code elimination).
See the In-depth Dead Code Elimination Guide for more details.
When false, tree-shaking will be disabled.
When true, it is equivalent to setting each options to the default value.
OptionaltsconfigConfigures TypeScript configuration file resolution and usage.
Optional Experimentalwatch
Controls which warnings are emitted during the build process. Each option can be set to
true(emit warning) orfalse(suppress warning).