tsdown

v2026.09.24

tsdown TypeScript bundler built on Rolldown for libraries and packages. Use when bundling TypeScript libraries, generating declaration files, or publishing npm packages. Use for tsdown, bundler, rolldown, dts, declaration, library-build, esm, cjs, treeshake.

GitHub
安装命令
npx skhub add oakoss/tsdown
Markdown
SKILL.md

tsdown

Overview

tsdown is an elegant library bundler built on Rolldown (Rust-based), providing a complete out-of-the-box solution for building TypeScript and JavaScript libraries. It handles source transformation, multiple output formats (ESM, CJS, IIFE, UMD), TypeScript declaration file generation, and package.json exports field generation with sensible defaults.

When to use: Building TypeScript libraries for npm, generating declaration files, producing dual ESM/CJS packages, bundling CLI tools, library development with watch mode, migrating from tsup.

When NOT to use: Application bundling (use Vite/Rolldown directly), server-side rendering frameworks (use framework bundlers), projects that need Webpack-specific features, simple scripts that need no bundling.

Quick Reference

PatternAPIKey Points
Basic buildnpx tsdownAuto-detects src/index.ts entry
Config filetsdown.config.tsdefineConfig() for type safety
Entry pointsentry: ['src/index.ts']String, array, or object for named entries
Output formatsformat: ['esm', 'cjs']ESM, CJS, IIFE, UMD supported
Declaration filesdts: trueAuto-detects from package.json types field
Fixed extensionsfixedExtension: trueForces .mjs/.cjs and .d.mts/.d.cts
Externalsexternal: ['react']node_modules external by default
Bundle depsnoExternal: ['lodash-es']Force-bundle specific dependencies
Targettarget: 'node18'ES version or Node version
Platformplatform: 'node'node, browser, or neutral
Minificationminify: trueTree shaking enabled separately
Tree shakingtreeshake: trueDead code elimination
Source mapssourcemap: trueInline or external source maps
Watch modetsdown --watchAuto-rebuild on file changes
Clean outputclean: trueRemove output directory before build
Validation--publint --attwPackage quality checks post-build
Size report--reportBundle size with gzip/brotli stats
Multiple configsdefineConfig([...])Array of configs for different outputs
Dynamic configdefineConfig((opts) => {})Function receiving CLI options
Programmatic APIimport { build }Use in Node.js scripts
Banner/Footerbanner: { js: '...' }Prepend/append to output files
onSuccess hookonSuccess: async () => {}Run after successful build
Node protocolnodeProtocol: trueAdd/strip node: prefix on built-in imports

Common Mistakes

MistakeCorrect Pattern
Not setting fixedExtension with dual formatsUse fixedExtension: true for .mjs/.cjs when publishing both ESM and CJS
Bundling all node_modules into library outputDependencies are external by default; use noExternal only for specific deps
Using dts: true without TypeScript configuredEnsure tsconfig.json exists with proper compilerOptions
Setting target too low for modern syntaxMatch target to your minimum supported Node/browser version
Missing types field in package.jsonAdd types or exports types condition for declaration resolution
Not cleaning output before format changesUse clean: true to avoid stale files from previous builds
Inline external for Node built-insNode built-ins (node:fs, etc.) are auto-externalized on platform: 'node'
Using interactive CLI flags in CIUse config file or non-interactive CLI flags for CI builds

Delegation

  • Build configuration review: Use Task agent to analyze tsdown config for correctness
  • Package publishing: Use Explore agent to verify package.json exports and types fields
  • Migration from tsup: Use Task agent to map tsup options to tsdown equivalents

References

发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

Sep 24, 2026

分类

未分类

许可证

未指定

源路径

skills/tsdown

默认分支

main

最新提交

85e3a39

Tree SHA

a4c9e7b