| name | robuild |
| description | Zero-config ESM/TS package builder powered by Rolldown and Oxc. Use when building TypeScript libraries, generating type declarations, bundling for multiple formats, or migrating from tsup/unbuild. |
robuild - Zero-Config Package Builder
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)
- Zero-config builds with sensible defaults
- Transforming directories without bundling
- Auto-generating package.json exports field
- Migrating from tsup or unbuild
Quick Start
pnpm add -D robuild
npx robuild
npx robuild ./src/index.ts
npx robuild ./src/index.ts --format esm,cjs
npx robuild --watch
npx robuild --dts
Basic Configuration
Entries-based (unbuild-style)
import { defineConfig } from 'robuild'
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
format: ['esm', 'cjs'],
dts: true,
},
],
})
Flat config (tsup-style)
import { defineConfig } from 'robuild'
export default defineConfig({
entry: ['./src/index.ts'],
format: ['esm', 'cjs'],
dts: true,
clean: true,
})
Core References
Build Options
Entry Types
Bundle Entry
Uses Rolldown for bundling:
{
type: 'bundle',
input: './src/index.ts',
format: ['esm', 'cjs'],
outDir: 'dist',
dts: true,
minify: false,
platform: 'node',
target: 'es2022',
external: [],
noExternal: [],
plugins: [],
generateExports: true,
exportPath: '.',
}
Transform Entry
Uses Oxc for file-by-file transformation:
{
type: 'transform',
input: './src',
outDir: 'dist',
minify: false,
}
Common Patterns
Basic Library Bundle
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
format: ['esm', 'cjs'],
dts: true,
},
],
})
Multiple Entry Points
export default defineConfig({
entries: [
{
type: 'bundle',
input: {
index: './src/index.ts',
utils: './src/utils.ts',
cli: './src/cli.ts',
},
format: ['esm', 'cjs'],
dts: true,
},
],
})
With Package Exports Generation
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
format: ['esm', 'cjs'],
dts: true,
generateExports: true,
exportPath: '.',
},
{
type: 'bundle',
input: './src/utils/index.ts',
format: ['esm', 'cjs'],
dts: true,
generateExports: true,
exportPath: './utils',
clean: false,
},
],
exports: {
enabled: true,
includeTypes: true,
autoUpdate: true,
},
})
CLI Tool with Shebang
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/cli.ts',
format: 'esm',
platform: 'node',
},
],
})
Browser Library (IIFE)
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
format: 'iife',
globalName: 'MyLib',
platform: 'browser',
minify: true,
},
],
})
With ESM/CJS Shims
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
format: ['esm', 'cjs'],
shims: true,
},
],
})
External Dependencies
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
format: ['esm', 'cjs'],
external: ['react', 'react-dom', /^@myorg\//],
noExternal: ['lodash-es'],
},
],
})
With Rolldown Plugins
import { defineConfig } from 'robuild'
import somePlugin from 'some-rolldown-plugin'
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
format: ['esm'],
plugins: [somePlugin()],
rolldown: {
plugins: [anotherPlugin()],
},
},
],
})
Transform Mode (Preserve Structure)
export default defineConfig({
entries: [
{
type: 'transform',
input: './src',
outDir: 'dist',
},
],
})
Stub Mode (Development)
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
stub: true,
},
],
})
CLI Quick Reference
robuild
robuild --watch
robuild --config custom.ts
robuild src/index.ts
robuild src/a.ts src/b.ts
robuild --format esm,cjs
robuild --outDir lib
robuild --minify
robuild --dts
robuild --watch
robuild --sourcemap
robuild --clean
robuild --generate-exports
Configuration Options
Global Options
{
cwd: process.cwd(),
outDir: 'dist',
format: 'esm',
platform: 'node',
target: 'es2022',
clean: true,
sourcemap: false,
minify: false,
dts: false,
exports: {
enabled: false,
includeTypes: true,
autoUpdate: true,
},
onSuccess: async () => {},
failOnWarn: false,
ignoreWatch: [],
}
Best Practices
-
Always generate type declarations for TypeScript libraries:
{ dts: true }
-
Use multi-format builds for maximum compatibility:
{ format: ['esm', 'cjs'] }
-
Externalize peer dependencies:
{ external: ['react', 'react-dom'] }
-
Enable exports generation for proper package.json:
{ generateExports: true, exports: { enabled: true } }
-
Use watch mode during development:
robuild --watch
-
Clean output before production builds:
{ clean: true }
-
Use transform mode for utilities with many files:
{ type: 'transform', input: './src' }
Resources