The Elegant Bundler for Libraries built on Rolldown with TypeScript support, comprehensive plugin ecosystem, and zero-configuration setup
npx @tessl/cli install tessl/npm-tsdown@0.14.0tsdown is a modern JavaScript/TypeScript bundler for libraries built on top of Rolldown (powered by Oxc). It serves as a high-performance alternative to tsup, offering blazing fast builds with declaration file generation, comprehensive plugin ecosystem support (Rollup, Rolldown, unplugin, and some Vite plugins), and zero-configuration setup for immediate productivity.
npm install tsdownimport { build, defineConfig } from "tsdown";For CommonJS:
const { build, defineConfig } = require("tsdown");For plugins:
import { ExternalPlugin, ShebangPlugin, ReportPlugin, NodeProtocolPlugin } from "tsdown/plugins";For CLI usage:
npx tsdown [files]import { build, defineConfig } from "tsdown";
// Simple build with defaults
await build({
entry: "src/index.ts",
format: ["esm", "cjs"],
dts: true
});
// Using defineConfig for type safety
export default defineConfig({
entry: "src/index.ts",
format: ["esm", "cjs"],
outDir: "dist",
dts: true,
sourcemap: true,
clean: true
});tsdown is built around several key components:
Main build functionality for bundling TypeScript/JavaScript libraries with Rolldown. Supports multiple output formats, TypeScript declaration generation, and extensive configuration options.
function build(userOptions?: Options): Promise<void>;
interface Options {
entry?: InputOption;
format?: Format | Format[];
outDir?: string;
dts?: boolean | DtsOptions;
sourcemap?: boolean | 'inline' | 'hidden';
clean?: boolean | string[];
// ... extensive options interface
}
type Format = 'es' | 'cjs' | 'iife' | 'umd';Type-safe configuration system with defineConfig helper and extensive options for customizing the build process.
function defineConfig(options: UserConfig): UserConfig;
function defineConfig(options: UserConfigFn): UserConfigFn;
type UserConfig = Arrayable<Omit<Options, 'config' | 'filter'>>;
type UserConfigFn = (cliOptions: Options) => Awaitable<UserConfig>;Built-in plugins for common bundling tasks and integration with external plugin ecosystems.
function ExternalPlugin(options: ResolvedOptions): Plugin;
function ShebangPlugin(logger: Logger, cwd: string, name?: string, isMultiFormat?: boolean): Plugin;
function ReportPlugin(options: ReportOptions, logger: Logger, cwd: string, cjsDts?: boolean, name?: string, isMultiFormat?: boolean): Plugin;
function NodeProtocolPlugin(nodeProtocolOption: 'strip' | true): Plugin;Command-line interface with comprehensive options for building, watching, and managing projects.
function runCLI(): Promise<void>;Available CLI commands:
tsdown [files] - Build command with extensive optionstsdown migrate - Migration utility from tsup to tsdownMulti-package support for monorepos with filtering and configuration management.
interface Workspace {
include?: Arrayable<string> | 'auto';
exclude?: Arrayable<string>;
config?: boolean | string;
}Built-in migration utilities for moving from tsup to tsdown with automatic configuration conversion.
function migrate(options: { cwd?: string; dryRun?: boolean }): Promise<void>;// Core types
type Sourcemap = boolean | 'inline' | 'hidden';
type Format = 'es' | 'cjs' | 'iife' | 'umd';
type NormalizedFormat = 'es' | 'cjs' | 'iife' | 'umd';
// Platform and target types
type Platform = 'node' | 'neutral' | 'browser';
// Module types for file processing
type ModuleTypes = Record<string, 'js' | 'jsx' | 'ts' | 'tsx' | 'json' | 'text' | 'base64' | 'dataurl' | 'binary' | 'empty' | 'css' | 'asset'>;
// Logging types
type LogLevel = 'silent' | 'error' | 'warn' | 'info';
interface Logger {
info(...args: any[]): void;
warn(...args: any[]): void;
error(...args: any[]): void;
success(...args: any[]): void;
}
// Utility types
type Arrayable<T> = T | T[];
type Awaitable<T> = T | Promise<T>;