The Elegant Bundler for Libraries built on Rolldown with TypeScript support, comprehensive plugin ecosystem, and zero-configuration setup
—
Built-in migration utilities for moving from tsup to tsdown with automatic configuration conversion. Provides seamless migration path with dry-run capabilities and comprehensive file updates.
Main migration function that converts tsup configurations and dependencies to tsdown equivalents.
/**
* Migrate from tsup to tsdown configuration and dependencies
* @internal Not exported from main entry point - use CLI instead
* @param options - Migration configuration options
*/
function migrate(options: {
cwd?: string;
dryRun?: boolean;
}): Promise<void>;Usage Examples:
// Note: migrate function is only available via CLI
// For programmatic usage, it's an internal function
// Use CLI: npx tsdown migrate
// If needed programmatically (not part of public API):
// import { migrate } from "tsdown/src/migrate";The migration process handles multiple aspects of converting from tsup to tsdown:
Dependency Fields Updated:
dependencies - Updates tsup to tsdown with current versiondevDependencies - Updates tsup to tsdown with current versionpeerDependencies - Updates tsup to tsdown with wildcard versionScript Updates:
tsup commands with tsdown in all scriptstsup-node commands (also converted to tsdown)Configuration Field Updates:
tsup configuration field to tsdown in package.jsonExample Migration:
// Before migration
{
"devDependencies": {
"tsup": "^8.0.0"
},
"scripts": {
"build": "tsup src/index.ts",
"dev": "tsup src/index.ts --watch",
"build:prod": "tsup-node --minify"
},
"tsup": {
"entry": "src/index.ts",
"format": ["esm", "cjs"]
}
}
// After migration
{
"devDependencies": {
"tsdown": "^0.14.2"
},
"scripts": {
"build": "tsdown src/index.ts",
"dev": "tsdown src/index.ts --watch",
"build:prod": "tsdown --minify"
},
"tsdown": {
"entry": "src/index.ts",
"format": ["esm", "cjs"]
}
}Supported Configuration Files:
tsup.config.ts → tsdown.config.tstsup.config.cts → tsdown.config.ctstsup.config.mts → tsdown.config.mtstsup.config.js → tsdown.config.jstsup.config.cjs → tsdown.config.cjstsup.config.mjs → tsdown.config.mjstsup.config.json → tsdown.config.jsonContent Updates:
tsup with tsdown in codeTSUP with TSDOWN in constantsExample Configuration Migration:
// Before: tsup.config.ts
import { defineConfig } from 'tsup';
export default defineConfig({
entry: 'src/index.ts',
format: ['esm', 'cjs'],
dts: true,
onSuccess: 'echo "TSUP build complete"'
});
// After: tsdown.config.ts
import { defineConfig } from 'tsdown';
export default defineConfig({
entry: 'src/index.ts',
format: ['esm', 'cjs'],
dts: true,
onSuccess: 'echo "TSDOWN build complete"'
});Preview migration changes without applying them to files.
interface MigrateOptions {
/**
* Preview changes without applying them
* @default false
*/
dryRun?: boolean;
}Dry Run Output:
Example Dry Run:
tsdown migrate --dry-run
# Output:
[dry-run] package.json:
--- package.json
+++ package.json
@@ -2,7 +2,7 @@
"name": "my-library",
"devDependencies": {
- "tsup": "^8.0.0"
+ "tsdown": "^0.14.2"
},
"scripts": {
- "build": "tsup src/index.ts"
+ "build": "tsdown src/index.ts"
}
[dry-run] tsup.config.ts -> tsdown.config.ts:
--- tsup.config.ts
+++ tsdown.config.ts
@@ -1,4 +1,4 @@
-import { defineConfig } from 'tsup';
+import { defineConfig } from 'tsdown';Command-line interface for migration operations.
tsdown migrate [options]Options:
-c, --cwd <dir> - Working directory (default: current directory)-d, --dry-run - Preview changes without applying themInteractive Confirmation: The migration command includes safety prompts to prevent accidental changes:
tsdown migrate
# Output:
Before proceeding, review the migration guide at https://tsdown.dev/guide/migrate-from-tsup,
as this process will modify your files.
Uncommitted changes will be lost. Use the --dry-run flag to preview changes without applying them.
Continue? (Y/n)The migration process validates and reports on the success of operations:
package.json found in target directorytsdown migrate
✓ Migrating `devDependencies` to tsdown.
✓ Migrating `build` script to tsdown
✓ Migrating `dev` script to tsdown
✓ Found `tsup.config.ts`
✓ Migrated `tsup.config.ts` to `tsdown.config.ts`
✓ Migration completed. Remember to run install command with your package manager.After successful migration, users should:
Install Dependencies: Run package manager install command
npm install
# or
yarn install
# or
pnpm installVerify Configuration: Test that existing build configurations work
npm run buildUpdate Documentation: Update any documentation referencing tsup
Commit Changes: Commit the migration changes to version control
tsdown maintains high compatibility with tsup configuration options:
Migration works seamlessly with workspace/monorepo setups:
# Migrate root configuration
tsdown migrate
# Migrate individual packages
tsdown migrate --cwd packages/ui-lib
tsdown migrate --cwd packages/utils
# Or migrate all packages with a script
for dir in packages/*/; do
tsdown migrate --cwd "$dir"
doneCommon migration issues and solutions:
Install with Tessl CLI
npx tessl i tessl/npm-tsdown