Subchapter 8.28
references/option-target.mdMarkdown4 KBView on GitHub
The target option controls which JavaScript features are downleveled (transformed to older syntax) for compatibility.
Important: Only affects syntax transformations, not runtime polyfills.
tsdown auto-reads from package.json:
// package.json
{
"engines": {
"node": ">=18.0.0"
}
}Automatically sets target to node18.0.0.
If no engines.node field exists, behaves as if target: false (no transformations).
Set to false to preserve modern syntax:
export default defineConfig({
target: false,
})Result:
?., nullish coalescing ??, etc.)Use when:
# Single target
tsdown --target es2020
tsdown --target node20
# Multiple targets
tsdown --target chrome100 --target node20.18
# Disable
tsdown --no-targetexport default defineConfig({
entry: ['src/index.ts'],
target: 'es2020',
})export default defineConfig({
entry: ['src/index.ts'],
target: ['chrome100', 'safari15', 'node18'],
})es2015, es2016, es2017, es2018, es2019, es2020, es2021, es2022, es2023, esnextchrome100, safari18, firefox110, edge100, etc.node16, node18, node20, node20.18, etc.export default defineConfig({
entry: ['src/index.ts'],
format: ['esm'],
target: ['chrome100', 'safari15', 'firefox100'],
})export default defineConfig({
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
target: 'node18',
})export default defineConfig({
entry: ['src/index.ts'],
format: ['esm'],
target: 'es2015', // Maximum compatibility
})export default defineConfig({
entry: ['src/index.ts'],
format: {
esm: {
target: 'es2020',
},
cjs: {
target: 'node16',
},
},
})Enable in tsconfig.json:
{
"compilerOptions": {
"experimentalDecorators": true
}
}Not currently supported by tsdown/Rolldown/Oxc.
export default defineConfig({
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
target: 'es2020', // Wide compatibility
})export default defineConfig({
entry: ['src/index.ts'],
format: ['esm'],
target: false, // No transformations
})export default defineConfig({
entry: ['src/index.tsx'],
format: ['esm'],
target: ['chrome100', 'safari15', 'firefox100'],
platform: 'browser',
})When @tsdown/css is installed and a browser target is set, CSS syntax is also lowered automatically:
export default defineConfig({
target: 'chrome108', // CSS nesting will be flattened
})See CSS for full CSS configuration options.
false for modern-only buildsexperimentalDecorators@tsdown/css for CSS support and syntax lowering