docs/01-app/03-api-reference/05-config/01-next-config-js/turbopack.mdx
The turbopack option lets you customize Turbopack to transform different files and change how modules are resolved.
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
turbopack: {
// ...
},
}
export default nextConfig
/** @type {import('next').NextConfig} */
const nextConfig = {
turbopack: {
// ...
},
}
module.exports = nextConfig
Good to know:
- Turbopack for Next.js does not require loaders or loader configuration for built-in functionality. Turbopack has built-in support for CSS and compiling modern JavaScript, so there's no need for
css-loader,postcss-loader, orbabel-loaderif you're using@babel/preset-env.
The following options are available for the turbo configuration:
| Option | Description |
|---|---|
root | Sets the application root directory. Should be an absolute path. |
rules | List of supported webpack loaders to apply when running with Turbopack. |
resolveAlias | Map aliased imports to modules to load in their place. |
resolveExtensions | List of extensions to resolve when importing files. |
The following loaders have been tested to work with Turbopack's webpack loader implementation, but many other webpack loaders should work as well even if not listed here:
babel-loader@svgr/webpacksvg-inline-loaderyaml-loaderstring-replace-loaderraw-loadersass-loadergraphql-tag/loaderTurbopack uses the root directory to resolve modules. Files outside of the project root are not resolved.
Next.js automatically detects the root directory of your project. It does so by looking for one of these files:
pnpm-lock.yamlpackage-lock.jsonyarn.lockbun.lockbun.lockbIf you have a different project structure, for example if you don't use workspaces, you can manually set the root option:
const path = require('path')
module.exports = {
turbopack: {
root: path.join(__dirname, '..'),
},
}
If you need loader support beyond what's built in, many webpack loaders already work with Turbopack. There are currently some limitations:
require() plugin modules as option values.To configure loaders, add the names of the loaders you've installed and any options in next.config.js, mapping file extensions to a list of loaders.
Here is an example below using the @svgr/webpack loader, which enables importing .svg files and rendering them as React components.
module.exports = {
turbopack: {
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
}
For loaders that require configuration options, you can use an object format instead of a string:
module.exports = {
turbopack: {
rules: {
'*.svg': {
loaders: [
{
loader: '@svgr/webpack',
options: {
icon: true,
},
},
],
as: '*.js',
},
},
},
}
Good to know: Prior to Next.js version 13.4.4,
turbo.ruleswas namedturbo.loadersand only accepted file extensions like.mdxinstead of*.mdx.
Turbopack can be configured to modify module resolution through aliases, similar to webpack's resolve.alias configuration.
To configure resolve aliases, map imported patterns to their new destination in next.config.js:
module.exports = {
turbopack: {
resolveAlias: {
underscore: 'lodash',
mocha: { browser: 'mocha/browser-entry.js' },
},
},
}
This aliases imports of the underscore package to the lodash package. In other words, import underscore from 'underscore' will load the lodash module instead of underscore.
Turbopack also supports conditional aliasing through this field, similar to Node.js' conditional exports. At the moment only the browser condition is supported. In the case above, imports of the mocha module will be aliased to mocha/browser-entry.js when Turbopack targets browser environments.
Turbopack can be configured to resolve modules with custom extensions, similar to webpack's resolve.extensions configuration.
To configure resolve extensions, use the resolveExtensions field in next.config.js:
module.exports = {
turbopack: {
resolveExtensions: ['.mdx', '.tsx', '.ts', '.jsx', '.js', '.mjs', '.json'],
},
}
This overwrites the original resolve extensions with the provided list. Make sure to include the default extensions.
For more information and guidance for how to migrate your app to Turbopack from webpack, see Turbopack's documentation on webpack compatibility.
| Version | Changes |
|---|---|
15.3.0 | experimental.turbo is changed to turbopack. |
13.0.0 | experimental.turbo introduced. |