Pulled ALL skills from 15 source repositories: - anthropics/skills: 16 (docs, design, MCP, testing) - obra/superpowers: 14 (TDD, debugging, agents, planning) - coreyhaines31/marketingskills: 25 (marketing, CRO, SEO, growth) - better-auth/skills: 5 (auth patterns) - vercel-labs/agent-skills: 5 (React, design, Vercel) - antfu/skills: 16 (Vue, Vite, Vitest, pnpm, Turborepo) - Plus 13 individual skills from various repos Mosaic Stack is not limited to coding — the Orchestrator and subagents serve coding, business, design, marketing, writing, logistics, analysis, and more. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
345 lines
9.4 KiB
Markdown
345 lines
9.4 KiB
Markdown
---
|
|
name: tsdown
|
|
description: Bundle TypeScript and JavaScript libraries with blazing-fast speed powered by Rolldown. Use when building libraries, generating type declarations, bundling for multiple formats, or migrating from tsup.
|
|
---
|
|
|
|
# tsdown - The Elegant Library Bundler
|
|
|
|
Blazing-fast bundler for TypeScript/JavaScript libraries powered by Rolldown and Oxc.
|
|
|
|
## When to Use
|
|
|
|
- Building TypeScript/JavaScript libraries for npm
|
|
- Generating TypeScript declaration files (.d.ts)
|
|
- Bundling for multiple formats (ESM, CJS, IIFE, UMD)
|
|
- Optimizing bundles with tree shaking and minification
|
|
- Migrating from tsup with minimal changes
|
|
- Building React, Vue, Solid, or Svelte component libraries
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Install
|
|
pnpm add -D tsdown
|
|
|
|
# Basic usage
|
|
npx tsdown
|
|
|
|
# With config file
|
|
npx tsdown --config tsdown.config.ts
|
|
|
|
# Watch mode
|
|
npx tsdown --watch
|
|
|
|
# Migrate from tsup
|
|
npx tsdown-migrate
|
|
```
|
|
|
|
## Basic Configuration
|
|
|
|
```ts
|
|
import { defineConfig } from 'tsdown'
|
|
|
|
export default defineConfig({
|
|
entry: ['./src/index.ts'],
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
clean: true,
|
|
})
|
|
```
|
|
|
|
## Core References
|
|
|
|
| Topic | Description | Reference |
|
|
|-------|-------------|-----------|
|
|
| Getting Started | Installation, first bundle, CLI basics | [guide-getting-started](references/guide-getting-started.md) |
|
|
| Configuration File | Config file formats, multiple configs, workspace | [option-config-file](references/option-config-file.md) |
|
|
| CLI Reference | All CLI commands and options | [reference-cli](references/reference-cli.md) |
|
|
| Migrate from tsup | Migration guide and compatibility notes | [guide-migrate-from-tsup](references/guide-migrate-from-tsup.md) |
|
|
| Plugins | Rolldown, Rollup, Unplugin support | [advanced-plugins](references/advanced-plugins.md) |
|
|
| Hooks | Lifecycle hooks for custom logic | [advanced-hooks](references/advanced-hooks.md) |
|
|
| Programmatic API | Build from Node.js scripts | [advanced-programmatic](references/advanced-programmatic.md) |
|
|
| Rolldown Options | Pass options directly to Rolldown | [advanced-rolldown-options](references/advanced-rolldown-options.md) |
|
|
| CI Environment | CI detection, `'ci-only'` / `'local-only'` values | [advanced-ci](references/advanced-ci.md) |
|
|
|
|
## Build Options
|
|
|
|
| Option | Usage | Reference |
|
|
|--------|-------|-----------|
|
|
| Entry points | `entry: ['src/*.ts', '!**/*.test.ts']` | [option-entry](references/option-entry.md) |
|
|
| Output formats | `format: ['esm', 'cjs', 'iife', 'umd']` | [option-output-format](references/option-output-format.md) |
|
|
| Output directory | `outDir: 'dist'`, `outExtensions` | [option-output-directory](references/option-output-directory.md) |
|
|
| Type declarations | `dts: true`, `dts: { sourcemap, compilerOptions, vue }` | [option-dts](references/option-dts.md) |
|
|
| Target environment | `target: 'es2020'`, `target: 'esnext'` | [option-target](references/option-target.md) |
|
|
| Platform | `platform: 'node'`, `platform: 'browser'` | [option-platform](references/option-platform.md) |
|
|
| Tree shaking | `treeshake: true`, custom options | [option-tree-shaking](references/option-tree-shaking.md) |
|
|
| Minification | `minify: true`, `minify: 'dce-only'` | [option-minification](references/option-minification.md) |
|
|
| Source maps | `sourcemap: true`, `'inline'`, `'hidden'` | [option-sourcemap](references/option-sourcemap.md) |
|
|
| Watch mode | `watch: true`, watch options | [option-watch-mode](references/option-watch-mode.md) |
|
|
| Cleaning | `clean: true`, clean patterns | [option-cleaning](references/option-cleaning.md) |
|
|
| Log level | `logLevel: 'silent'`, `failOnWarn: 'ci-only'` | [option-log-level](references/option-log-level.md) |
|
|
|
|
## Dependency Handling
|
|
|
|
| Feature | Usage | Reference |
|
|
|---------|-------|-----------|
|
|
| External deps | `external: ['react', /^@myorg\//]` | [option-dependencies](references/option-dependencies.md) |
|
|
| Inline deps | `noExternal: ['dep-to-bundle']` | [option-dependencies](references/option-dependencies.md) |
|
|
| Auto external | Automatic peer/dependency externalization | [option-dependencies](references/option-dependencies.md) |
|
|
|
|
## Output Enhancement
|
|
|
|
| Feature | Usage | Reference |
|
|
|---------|-------|-----------|
|
|
| Shims | `shims: true` - Add ESM/CJS compatibility | [option-shims](references/option-shims.md) |
|
|
| CJS default | `cjsDefault: true` (default) / `false` | [option-cjs-default](references/option-cjs-default.md) |
|
|
| Package exports | `exports: true` - Auto-generate exports field | [option-package-exports](references/option-package-exports.md) |
|
|
| CSS handling | **[experimental]** Still in development | [option-css](references/option-css.md) |
|
|
| Unbundle mode | `unbundle: true` - Preserve directory structure | [option-unbundle](references/option-unbundle.md) |
|
|
| Package validation | `publint: true`, `attw: true` - Validate package | [option-lint](references/option-lint.md) |
|
|
|
|
## Framework & Runtime Support
|
|
|
|
| Framework | Guide | Reference |
|
|
|-----------|-------|-----------|
|
|
| React | JSX transform, Fast Refresh | [recipe-react](references/recipe-react.md) |
|
|
| Vue | SFC support, JSX | [recipe-vue](references/recipe-vue.md) |
|
|
| WASM | WebAssembly modules via `rolldown-plugin-wasm` | [recipe-wasm](references/recipe-wasm.md) |
|
|
|
|
## Common Patterns
|
|
|
|
### Basic Library Bundle
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
entry: ['src/index.ts'],
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
clean: true,
|
|
})
|
|
```
|
|
|
|
### Multiple Entry Points
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
entry: {
|
|
index: 'src/index.ts',
|
|
utils: 'src/utils.ts',
|
|
cli: 'src/cli.ts',
|
|
},
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
})
|
|
```
|
|
|
|
### Browser Library (IIFE/UMD)
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
entry: ['src/index.ts'],
|
|
format: ['iife'],
|
|
globalName: 'MyLib',
|
|
platform: 'browser',
|
|
minify: true,
|
|
})
|
|
```
|
|
|
|
### React Component Library
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
entry: ['src/index.tsx'],
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
external: ['react', 'react-dom'],
|
|
plugins: [
|
|
// React Fast Refresh support
|
|
],
|
|
})
|
|
```
|
|
|
|
### Preserve Directory Structure
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
entry: ['src/**/*.ts', '!**/*.test.ts'],
|
|
unbundle: true, // Preserve file structure
|
|
format: ['esm'],
|
|
dts: true,
|
|
})
|
|
```
|
|
|
|
### CI-Aware Configuration
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
entry: ['src/index.ts'],
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
failOnWarn: 'ci-only',
|
|
publint: 'ci-only',
|
|
attw: 'ci-only',
|
|
})
|
|
```
|
|
|
|
### WASM Support
|
|
|
|
```ts
|
|
import { wasm } from 'rolldown-plugin-wasm'
|
|
import { defineConfig } from 'tsdown'
|
|
|
|
export default defineConfig({
|
|
entry: ['src/index.ts'],
|
|
plugins: [wasm()],
|
|
})
|
|
```
|
|
|
|
### Advanced with Hooks
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
entry: ['src/index.ts'],
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
hooks: {
|
|
'build:before': async (context) => {
|
|
console.log('Building...')
|
|
},
|
|
'build:done': async (context) => {
|
|
console.log('Build complete!')
|
|
},
|
|
},
|
|
})
|
|
```
|
|
|
|
## Configuration Features
|
|
|
|
### Multiple Configs
|
|
|
|
Export an array for multiple build configurations:
|
|
|
|
```ts
|
|
export default defineConfig([
|
|
{
|
|
entry: ['src/index.ts'],
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
},
|
|
{
|
|
entry: ['src/cli.ts'],
|
|
format: ['esm'],
|
|
platform: 'node',
|
|
},
|
|
])
|
|
```
|
|
|
|
### Conditional Config
|
|
|
|
Use functions for dynamic configuration:
|
|
|
|
```ts
|
|
export default defineConfig((options) => {
|
|
const isDev = options.watch
|
|
return {
|
|
entry: ['src/index.ts'],
|
|
format: ['esm', 'cjs'],
|
|
minify: !isDev,
|
|
sourcemap: isDev,
|
|
}
|
|
})
|
|
```
|
|
|
|
### Workspace/Monorepo
|
|
|
|
Use glob patterns to build multiple packages:
|
|
|
|
```ts
|
|
export default defineConfig({
|
|
workspace: 'packages/*',
|
|
entry: ['src/index.ts'],
|
|
format: ['esm', 'cjs'],
|
|
dts: true,
|
|
})
|
|
```
|
|
|
|
## CLI Quick Reference
|
|
|
|
```bash
|
|
# Basic commands
|
|
tsdown # Build once
|
|
tsdown --watch # Watch mode
|
|
tsdown --config custom.ts # Custom config
|
|
npx tsdown-migrate # Migrate from tsup
|
|
|
|
# Output options
|
|
tsdown --format esm,cjs # Multiple formats
|
|
tsdown --outDir lib # Custom output directory
|
|
tsdown --minify # Enable minification
|
|
tsdown --dts # Generate declarations
|
|
|
|
# Entry options
|
|
tsdown src/index.ts # Single entry
|
|
tsdown src/*.ts # Glob patterns
|
|
tsdown src/a.ts src/b.ts # Multiple entries
|
|
|
|
# Development
|
|
tsdown --watch # Watch mode
|
|
tsdown --sourcemap # Generate source maps
|
|
tsdown --clean # Clean output directory
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Always generate type declarations** for TypeScript libraries:
|
|
```ts
|
|
{ dts: true }
|
|
```
|
|
|
|
2. **Externalize dependencies** to avoid bundling unnecessary code:
|
|
```ts
|
|
{ external: [/^react/, /^@myorg\//] }
|
|
```
|
|
|
|
3. **Use tree shaking** for optimal bundle size:
|
|
```ts
|
|
{ treeshake: true }
|
|
```
|
|
|
|
4. **Enable minification** for production builds:
|
|
```ts
|
|
{ minify: true }
|
|
```
|
|
|
|
5. **Add shims** for better ESM/CJS compatibility:
|
|
```ts
|
|
{ shims: true } // Adds __dirname, __filename, etc.
|
|
```
|
|
|
|
6. **Auto-generate package.json exports**:
|
|
```ts
|
|
{ exports: true } // Creates proper exports field
|
|
```
|
|
|
|
7. **Use watch mode** during development:
|
|
```bash
|
|
tsdown --watch
|
|
```
|
|
|
|
8. **Preserve structure** for utilities with many files:
|
|
```ts
|
|
{ unbundle: true } // Keep directory structure
|
|
```
|
|
|
|
9. **Validate packages** in CI before publishing:
|
|
```ts
|
|
{ publint: 'ci-only', attw: 'ci-only' }
|
|
```
|
|
|
|
## Resources
|
|
|
|
- Documentation: https://tsdown.dev
|
|
- GitHub: https://github.com/rolldown/tsdown
|
|
- Rolldown: https://rolldown.rs
|
|
- Migration Guide: https://tsdown.dev/guide/migrate-from-tsup
|