turbodts
Ultra-fast .d.ts bundler designed for modern libraries.
A lightning-fast TypeScript declaration bundler that generates clean, optimized .d.ts files for modern TypeScript libraries.
Tool | Duration | Speed Improvement |
---|---|---|
turbodts (isolated declarations) | ~23ms | 215x faster |
turbodts (standard mode) | ~245ms | 20x faster |
dts-bundle-generator | ~5,066ms | baseline |
- ๐ Blazing Fast - 20-200x faster than alternatives
- ๐ External Resolution - Automatically resolves types from node_modules
- โก Isolated Declarations - 10-50x speed boost
- โ๏ธ Code Splitting - Prevents type duplication across multiple entry points
- ๐๏ธ Minification - Reduces declaration file size significantly
- ๐ Clean Output - Outputs clean, readable declaration files
- ๐ ๏ธ Zero Config - Works out of the box with sensible defaults
- ๐ง CLI & API - Use via command line or programmatically
Generate declaration files from your TypeScript source:
bunx turbodts src/index.ts
This creates dist/index.d.ts
with all your types bundled together.
# Single entry point
bunx turbodts src/index.ts
# Multiple entry points
bunx turbodts src/index.ts src/cli.ts src/utils.ts
# Glob patterns
bunx turbodts "src/**/*.ts" "!src/**/*.test.ts"
# Custom output directory
bunx turbodts src/index.ts --outDir types
When you have multiple entry points that share common types, splitting prevents duplication:
bunx turbodts src/index.ts src/cli.ts --splitting
Without splitting:
dist/
โโโ index.d.ts # 50KB (includes shared types)
โโโ cli.d.ts # 45KB (duplicates shared types)
With splitting:
dist/
โโโ index.d.ts # 15KB (imports from chunk)
โโโ cli.d.ts # 10KB (imports from chunk)
โโโ chunk-abc123.d.ts # 30KB (shared types)
This reduces total bundle size and ensures type consistency and readability across entry points.
Reduce declaration file size with various minification strategies:
# Enable all minification
bunx turbodts src/index.ts --minify
# Granular control
bunx turbodts src/index.ts --minify-jsdoc --minify-whitespace --minify-identifiers
Option | Description |
---|---|
--minify-jsdoc | Removes JSDoc comments |
--minify-whitespace | Removes unnecessary whitespace/newlines |
--minify-identifiers | Shortens internal type variable names while preserving public API names |
--minify | Enables all above options |
Example output comparison:
// Original (6.7KB for example)
interface ApiClientOptions {
/** The base URL for API requests */
baseUrl: string;
/** Request timeout in milliseconds */
timeout?: number;
}
export { ApiClientOptions };
// Minified (807B)
interface t{baseUrl:string;timeout?:number;}export{t as ApiClientOptions};
bunx turbodts src/index.ts --minify-identifiers
You can minify internal type variables while preserving public API names. This approach effectively reduces declaration file size while maintaining developer experience. Minifying whitespace would make JSDoc comments ineffective, and removing JSDoc comments would degrade the developer experience since API consumers would lose important documentation about what the API does.
Control how external dependencies are handled:
# Resolve all external types (includes everything from node_modules)
bunx turbodts src/index.ts --resolve-all
# Resolve specific packages only
bunx turbodts src/index.ts --resolve "react,@types/node"
# Default behavior (externalize all dependencies)
bunx turbodts src/index.ts
Enable TypeScript's isolated declarations mode for dramatic performance improvements:
# Force enable
bunx turbodts src/index.ts --isolated-declarations
# Force disable
bunx turbodts src/index.ts --no-isolated-declarations
# Auto-detect from tsconfig.json (default behavior)
bunx turbodts src/index.ts
Performance Impact:
- Standard mode: ~250ms
- Isolated declarations: ~25ms (10x faster)
If your tsconfig.json has "isolatedDeclarations": true
, turbodts automatically uses this mode.
# Custom output directory structure
bunx turbodts src/index.ts --outDir lib/types
# Skip cleaning (by default it cleans the output directory)
bunx turbodts src/index.ts --clean false
Option | Description | Default |
---|---|---|
--outDir, -o | Output directory for declaration files | dist |
--splitting, -s | Enable code splitting for shared types | false |
--minify, -m | Enable all minification options | false |
--minify-jsdoc, -mj | Remove JSDoc comments | false |
--minify-whitespace, -mw | Remove unnecessary whitespace | false |
--minify-identifiers, -mi | Shorten internal identifiers | false |
--clean, -c | Clean output directory before build | true |
--resolve-all, -ra | Resolve all external dependencies | false |
--resolve, -r | Resolve specific dependencies (comma-separated) | false |
--isolated-declarations, -id | Force enable isolated declarations | auto-detect |
--no-isolated-declarations, -nid | Force disable isolated declarations | auto-detect |
# Production build
bunx turbodts src/index.ts --minify-identifiers --splitting
# Include in package.json scripts
{
"scripts": {
"build:types": "bunx turbodts src/index.ts"
}
}
# Build each package separately with splitting
bunx turbodts packages/*/src/index.ts --splitting --outDir dist/types
# Or use workspace-specific builds
bunx turbodts packages/core/src/index.ts --outDir packages/core/dist
Enable isolated declarations in your tsconfig.json:
{
"compilerOptions": {
"declaration": true,
"isolatedDeclarations": true
}
}
Use code splitting for multiple entry points:
bunx turbodts src/*.ts --splitting
turbodts is designed as a drop-in replacement:
# Before
bunx dts-bundle-generator -o dist/index.d.ts src/index.ts
# After
bunx turbodts src/index.ts --outDir dist
import { generateDts, logIsolatedDeclarationErrors } from 'turbodts';
async function build() {
const result = await generateDts(['src/index.ts'], {
splitting: true,
isolatedDeclarations: true
});
if (result.isolatedDeclarationErrors.length > 0) {
logIsolatedDeclarationErrors(result.isolatedDeclarationErrors, {
shouldExit: true,
});
}
for (const file of result.files) {
await Bun.write(`dist/${file.outputPath}`, file.dts);
}
}
build().catch(console.error);
For guidelines on contributing, please read the contributing guide.
We welcome contributions from the community to enhance turbodts's capabilities and make it even more powerful. โค๏ธ