🧭 Migration Guide
Most users can upgrade directly. Before upgrading, run one final build with tsdown@0.22.14 and resolve all deprecation warnings.
- config:
bundle: false→unbundle: true;bundle: truecan be removedoutExtension→outExtensionspublicDir/--public-dir→copy/--copyremoveNodeProtocol: true→nodeProtocol: 'strip'injectStyle→css.inject
- deps:
inlineOnly/deps.onlyAllowBundle→deps.onlyBundleskipNodeModulesBundle: true→deps.neverBundle: trueresolveDepSubpathnow defaults tofalse; set it totrueto preserve the previous behavior
- dts:
- Select a generator with
dts.generator, for example{ generator: 'oxc' } dts.cjsReexportwas removed; dual-format builds now generate CJS declarations in a separate pass
- Select a generator with
- attw:
- The default profile changed from
stricttoesm-only; setprofile: 'strict'to preserve the previous checks
- The default profile changed from
- programmatic API:
build()now returns{ bundles, watch }; replaceconst bundles = await build()withconst { bundles } = await build()
- requirements:
- Node.js 25 is no longer supported; use
^22.18.0,^24.11.0, or>=26.0.0 - The packages no longer publish legacy
typesandtypesVersionsfallbacks; use TypeScript’sbundler,node16, ornodenextmodule resolution
- Node.js 25 is no longer supported; use
🚨 Breaking Changes
- Drop support for Node.js 25 - by @sxzz (26950)
- Remove deprecated tsup compatibility options - by @sxzz (50766)
- Drop
typesandtypesVersionsfields - by @sxzz (be3ea) - attw:
- deps:
- dts:
🚀 Features
- Expose programmatic watch controls - by @sxzz in #1062 (96a40)
- css: Support function form for
css.modules.localsConvention- by @sxzz and @lazerg (b566f) - report: Add
summaryoption to skip per-file size logs - by @lazerg in #1036 (020e9)
🐞 Bug Fixes
- Allow
unplugin-unusedv0.5+ - by @sxzz (53c78) - Ignore optional dependencies in type definitions - by @sxzz (94622)
- cli:
- css:
- deps:
- exports:
- migrate:
🏎 Performance
- Remove
asyncDisposepolyfill - by @sxzz (82675) - Replace
ansiswithutil.styleText- by @sxzz (be6bf)