---
url: /reference/api/Interface.UserConfig.md
---
# Interface: UserConfig

Defined in: [src/config/types.ts:158](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L158)

Options for tsdown.

## Extended by

* [`InlineConfig`](Interface.InlineConfig.md)

## Properties

### alias?

```ts
optional alias?: Record<string, string>;
```

Defined in: [src/config/types.ts:180](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L180)

***

### attw?

```ts
optional attw?: WithEnabled<AttwOptions>;
```

Defined in: [src/config/types.ts:582](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L582)

Run `arethetypeswrong` after bundling.
Requires `@arethetypeswrong/core` to be installed.

#### Default

```ts
false
```

#### See

https://github.com/arethetypeswrong/arethetypeswrong.github.io

***

### banner?

```ts
optional banner?: ChunkAddon;
```

Defined in: [src/config/types.ts:409](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L409)

***

### checks?

```ts
optional checks?: ChecksOptions & object;
```

Defined in: [src/config/types.ts:334](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L334)

Controls which warnings are emitted during the build process. Each option can be set to `true` (emit warning) or `false` (suppress warning).

#### Type Declaration

##### legacyCjs?

```ts
optional legacyCjs?: boolean;
```

If the config includes the `cjs` format and
one of its targets is a Node.js version that supports `require(esm)`
(`^20.19.0 || >=22.12.0`),
warn the user about the deprecation of CommonJS.

###### Default

```ts
true
```

***

### cjsDefault?

```ts
optional cjsDefault?: boolean;
```

Defined in: [src/config/types.ts:459](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L459)

Converts a single default export from an explicit CJS entry module to
`module.exports`. It does not apply to non-entry chunks emitted in
unbundle mode.

#### Default

```ts
true
```

***

### clean?

```ts
optional clean?: boolean | string[];
```

Defined in: [src/config/types.ts:403](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L403)

Remove stale build output.

Defaults to the output directory. Emitted files are overwritten in
place. After every build that shares that directory has finished,
files that none of them emitted again are deleted. ESM and CJS outputs
in the same directory are kept together.

#### Default

```ts
true
```

***

### copy?

```ts
optional copy?:
  | CopyOptions
  | CopyOptionsFn;
```

Defined in: [src/config/types.ts:626](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L626)

Copy files to another directory.

#### Example

```ts
;[
  'src/assets',
  'src/env.d.ts',
  'src/styles/**/*.css',
  { from: 'src/assets', to: 'dist/assets' },
  { from: 'src/styles/**/*.css', to: 'dist', flatten: true },
]
```

***

### css?

```ts
optional css?: CssOptions;
```

Defined in: [src/config/types.ts:611](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L611)

**\[experimental]** CSS options.
Requires `@tsdown/css` to be installed.

***

### customLogger?

```ts
optional customLogger?: Logger;
```

Defined in: [src/config/types.ts:512](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L512)

Custom logger.

***

### cwd?

```ts
optional cwd?: string;
```

Defined in: [src/config/types.ts:482](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L482)

The working directory of the config file.

* Defaults to process.cwd | process.cwd() for root config.
* Defaults to the package directory for [`workspace`](#workspace) config.

#### Default

```ts
process.cwd()
```

***

### define?

```ts
optional define?: Record<string, string>;
```

Defined in: [src/config/types.ts:255](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L255)

***

### deps?

```ts
optional deps?: DepsConfig;
```

Defined in: [src/config/types.ts:178](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L178)

Dependency handling options.

***

### devtools?

```ts
optional devtools?: WithEnabled<DevtoolsOptions>;
```

Defined in: [src/config/types.ts:541](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L541)

**\[experimental]** Enable devtools.

DevTools is still under development, and this is for early testers only.

This may slow down the build process significantly.

#### Default

```ts
false
```

***

### dts?

```ts
optional dts?: WithEnabled<DtsOptions>;
```

Defined in: [src/config/types.ts:559](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L559)

Enables generation of TypeScript declaration files (`.d.ts`).

By default, this option is auto-detected:

* If [`exe`](#exe) is enabled, declaration file generation is disabled by default.
* If the `types` or `typings` field is present in `package.json`, or if its `exports` field contains a `types` entry, declaration file generation is enabled by default.
* Otherwise, if the resolved `tsconfig.json` has `declaration: true`, declaration file generation is enabled by default.
* Otherwise, declaration file generation is disabled by default.

***

### entry?

```ts
optional entry?: TsdownInputOption;
```

Defined in: [src/config/types.ts:173](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L173)

Defaults to `'src/index.ts'` if it exists.

Supports glob patterns with negation to exclude files:

#### Example

```ts
entry: {
  "hooks/*": ["./src/hooks/*.ts", "!./src/hooks/index.ts"],
}
```

#### Default

```ts
{
  index: 'src/index.ts'
}
```

***

### env?

```ts
optional env?: Record<string, any>;
```

Defined in: [src/config/types.ts:243](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L243)

Compile-time env variables, which can be accessed via `import.meta.env` or `process.env`.

#### Example

```json
{
  "DEBUG": true,
  "NODE_ENV": "production"
}
```

#### Default

```ts
{
}
```

***

### envFile?

```ts
optional envFile?: string;
```

Defined in: [src/config/types.ts:249](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L249)

Path to env file providing compile-time env variables.

#### Example

```ts
`.env`, `.env.production`, etc.
```

***

### envPrefix?

```ts
optional envPrefix?: string | string[];
```

Defined in: [src/config/types.ts:254](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L254)

When loading env variables from `envFile`, only include variables with these prefixes.

#### Default

```ts
'TSDOWN_'
```

***

### exe?

```ts
optional exe?: WithEnabled<ExeOptions>;
```

Defined in: [src/config/types.ts:639](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L639)

**\[experimental]** Bundle as executable using Node.js SEA (Single Executable Applications).

This will bundle the output into a single executable file using Node.js SEA.
Note that this is only supported on Node.js 25.7.0 and later, and is not supported in Bun or Deno.

#### Default

```ts
false
```

***

### exports?

```ts
optional exports?: WithEnabled<ExportsOptions>;
```

Defined in: [src/config/types.ts:605](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L605)

Generate package exports for `package.json`.

This will set the `exports` field in `package.json` to point to the
generated files.

#### Default

```ts
false
```

***

### ~~external?~~

```ts
optional external?: string | RegExp | (string | RegExp)[] | ExternalOptionFunction;
```

Defined in: [src/config/types.ts:655](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L655)

Cannot be combined with `deps.neverBundle`; setting both throws an error.

#### Deprecated

Use [`deps.neverBundle`](Interface.DepsConfig.md#neverbundle) instead.

***

### failOnWarn?

```ts
optional failOnWarn?: boolean | CIOption;
```

Defined in: [src/config/types.ts:500](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L500)

If true, fails the build on warnings.

#### Default

```ts
false
```

***

### fixedExtension?

```ts
optional fixedExtension?: boolean;
```

Defined in: [src/config/types.ts:438](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L438)

Use a fixed extension for output files.
The extension will always be `.cjs` or `.mjs`.
Otherwise, it will depend on the package type.

Defaults to `true` if [`platform`](#platform) is set to `node`,
`false` otherwise.

#### Default

```ts
platform === 'node'
```

***

### footer?

```ts
optional footer?: ChunkAddon;
```

Defined in: [src/config/types.ts:408](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L408)

***

### format?

```ts
optional format?:
  | "es" | "cjs" | "iife" | "umd" | "commonjs" | "module" | "esm"
  | ("es" | "cjs" | "iife" | "umd" | "commonjs" | "module" | "esm")[]
| Partial<Record<"es" | "cjs" | "iife" | "umd" | "commonjs" | "module" | "esm", Partial<ResolvedConfig>>>;
```

Defined in: [src/config/types.ts:371](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L371)

Output format(s). Available formats are

* `esm`: ESM
* `cjs`: CommonJS
* `iife`: IIFE
* `umd`: UMD

#### Default

```ts
'esm'
```

***

### fromVite?

```ts
optional fromVite?: boolean | "vitest";
```

Defined in: [src/config/types.ts:521](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L521)

Reuse config from Vite or Vitest (experimental)

#### Default

```ts
false
```

***

### globalName?

```ts
optional globalName?: string;
```

Defined in: [src/config/types.ts:372](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L372)

***

### globImport?

```ts
optional globImport?: boolean;
```

Defined in: [src/config/types.ts:595](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L595)

`import.meta.glob` support.

#### See

https://vite.dev/guide/features.html#glob-import

#### Default

```ts
true
```

***

### hash?

```ts
optional hash?: boolean;
```

Defined in: [src/config/types.ts:450](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L450)

If enabled, appends hash to chunk filenames.

#### Default

```ts
true
```

***

### hooks?

```ts
optional hooks?:
  | Partial<TsdownHooks>
  | ((hooks) => Awaitable<void>);
```

Defined in: [src/config/types.ts:628](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L628)

***

### ignoreWatch?

```ts
optional ignoreWatch?: Arrayable<string | RegExp>;
```

Defined in: [src/config/types.ts:530](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L530)

Files or patterns to not watch while in watch mode.

***

### inputOptions?

```ts
optional inputOptions?:
  | InputOptions
  | ((options, format, context) => Awaitable<void | InputOptions | null>);
```

Defined in: [src/config/types.ts:351](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L351)

Use with caution; ensure you understand the implications.

***

### loader?

```ts
optional loader?: ModuleTypes;
```

Defined in: [src/config/types.ts:285](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L285)

Sets how input files are processed.
For example, use 'js' to treat files as JavaScript or 'base64' for images.
Lets you import or require files like images or fonts.

#### Example

```json
{ ".jpg": "asset", ".png": "base64" }
```

***

### logLevel?

```ts
optional logLevel?: LogLevel;
```

Defined in: [src/config/types.ts:495](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L495)

Log level.

#### Default

```ts
'info'
```

***

### minify?

```ts
optional minify?: boolean | "dce-only" | MinifyOptions;
```

Defined in: [src/config/types.ts:407](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L407)

#### Default

```ts
'dce-only'
```

***

### name?

```ts
optional name?: string;
```

Defined in: [src/config/types.ts:489](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L489)

The name to show in CLI output. This is useful for monorepos or workspaces.
When using workspace mode, this option defaults to the package name from package.json.
In non-workspace mode, this option must be set explicitly for the name to show in the CLI output.

***

### nodeProtocol?

```ts
optional nodeProtocol?: boolean | "strip";
```

Defined in: [src/config/types.ts:329](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L329)

Control whether built-in Node.js module imports use the `node:` protocol.

* `true`: Add the `node:` prefix to built-in module imports.
* `'strip'`: Remove the `node:` prefix from built-in module imports.
* `false`: Do not transform built-in module imports.

#### Default

```ts
false
```

#### Examples

```ts
// Input
import 'fs'

// Output
import 'node:fs'
```

```ts
// Input
import 'node:fs'

// Output
import 'fs'
```

```ts
// Input
import 'node:fs'

// Output
import 'node:fs'
```

***

### ~~noExternal?~~

```ts
optional noExternal?:
  | Arrayable<string | RegExp>
  | NoExternalFn;
```

Defined in: [src/config/types.ts:660](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L660)

Cannot be combined with `deps.alwaysBundle`; setting both throws an error.

#### Deprecated

Use [`deps.alwaysBundle`](Interface.DepsConfig.md#alwaysbundle) instead.

***

### onSuccess?

```ts
optional onSuccess?: string | ((config, signal) => void | Promise<void>);
```

Defined in: [src/config/types.ts:546](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L546)

You can specify command to be executed after a successful build, specially useful for Watch mode

***

### outDir?

```ts
optional outDir?: string;
```

Defined in: [src/config/types.ts:376](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L376)

#### Default

```ts
'dist'
```

***

### outExtensions?

```ts
optional outExtensions?: OutExtensionFactory;
```

Defined in: [src/config/types.ts:444](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L444)

Custom extensions for output files.
[`fixedExtension`](#fixedextension) will be overridden by this option.

***

### outputOptions?

```ts
optional outputOptions?:
  | OutputOptions
  | ((options, format, context) => Awaitable<void | OutputOptions | null>);
```

Defined in: [src/config/types.ts:464](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L464)

Use with caution; ensure you understand the implications.

***

### platform?

```ts
optional platform?: "node" | "neutral" | "browser";
```

Defined in: [src/config/types.ts:198](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L198)

Specifies the target runtime platform for the build.

* `node`: Node.js and compatible runtimes (e.g., Deno, Bun).
  For CJS format, this is always set to `node` and cannot be changed.
* `neutral`: A platform-agnostic target with no specific runtime assumptions.
* `browser`: Web browsers.

#### Default

```ts
'node'
```

#### See

https://tsdown.dev/options/platform

***

### plugins?

```ts
optional plugins?: TsdownPluginOption;
```

Defined in: [src/config/types.ts:346](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L346)

***

### publint?

```ts
optional publint?: WithEnabled<PublintOptions>;
```

Defined in: [src/config/types.ts:573](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L573)

Run `publint` after bundling.
Requires `publint` to be installed.

#### Default

```ts
false
```

***

### report?

```ts
optional report?: WithEnabled<ReportOptions>;
```

Defined in: [src/config/types.ts:588](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L588)

Enable size reporting after bundling.

#### Default

```ts
true
```

***

### root?

```ts
optional root?: string;
```

Defined in: [src/config/types.ts:426](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L426)

Specifies the root directory of input files, similar to TypeScript's `rootDir`.
This determines the output directory structure.

By default, the root is computed as the common base directory of all entry files.

#### See

https://www.typescriptlang.org/tsconfig/#rootDir

***

### shims?

```ts
optional shims?: boolean;
```

Defined in: [src/config/types.ts:267](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L267)

Inject CJS `__dirname` and `__filename` shims into ESM output.
Only applies when [`platform`](#platform) is set to `node`.

Note: `import.meta.url`, `import.meta.dirname`, and `import.meta.filename`
are always shimmed in CJS output, regardless of this option.

#### See

https://tsdown.dev/options/shims

#### Default

```ts
false
```

***

### sourcemap?

```ts
optional sourcemap?: Sourcemap;
```

Defined in: [src/config/types.ts:392](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L392)

Whether to generate source map files.

Note that this option will always be `true` if you have
[\`declarationMap\`](https://www.typescriptlang.org/tsconfig/#declarationMap)
option enabled in your `tsconfig.json`.

#### Default

```ts
false
```

***

### suppressWarnings?

```ts
optional suppressWarnings?: Arrayable<string | RegExp> | ((msg) => boolean);
```

Defined in: [src/config/types.ts:508](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L508)

Suppress warnings whose message matches the given pattern(s).

Accepts a string (substring match), a `RegExp`, an array of either, or a
predicate function. Matched warnings are dropped before `failOnWarn` is
applied, so they won't fail the build.

***

### target?

```ts
optional target?: string | false | string[];
```

Defined in: [src/config/types.ts:229](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L229)

Specifies the compilation target environment(s).

Determines the JavaScript version or runtime(s) for which the code should be compiled.
If not set, defaults to the value of `engines.node` in your project's `package.json`.
If no `engines.node` field exists, no syntax transformations are applied.

Accepts a single target (e.g., `'es2020'`, `'node18'`, `'baseline-widely-available'`), an array of targets, or `false` to disable all transformations.

#### See

<https://tsdown.dev/options/target#supported-targets> for a list of valid targets and more details.

#### Examples

```jsonc
// Target a single environment
{ "target": "node18" }
```

```jsonc
// Target multiple environments
{ "target": ["node18", "es2020"] }
```

```jsonc
// Disable all syntax transformations
{ "target": false }
```

***

### treeshake?

```ts
optional treeshake?: boolean | TreeshakingOptions;
```

Defined in: [src/config/types.ts:274](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L274)

Configure tree shaking options.

#### See

<https://rolldown.rs/reference/InputOptions.treeshake> for more details.

#### Default

```ts
true
```

***

### tsconfig?

```ts
optional tsconfig?: string | boolean;
```

Defined in: [src/config/types.ts:185](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L185)

#### Default

```ts
true
```

***

### unbundle?

```ts
optional unbundle?: boolean;
```

Defined in: [src/config/types.ts:416](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L416)

Determines whether `unbundle` is enabled.
When set to `true`, the output files will mirror the input file structure.

#### Default

```ts
false
```

***

### unused?

```ts
optional unused?: WithEnabled<Options>;
```

Defined in: [src/config/types.ts:566](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L566)

Enable unused dependencies check with `unplugin-unused`
Requires `unplugin-unused` to be installed.

#### Default

```ts
false
```

***

### watch?

```ts
optional watch?: boolean | Arrayable<string>;
```

Defined in: [src/config/types.ts:526](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L526)

#### Default

```ts
false
```

***

### workspace?

```ts
optional workspace?: true | Arrayable<string> | Workspace;
```

Defined in: [src/config/types.ts:645](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L645)

**\[experimental]** Enable workspace mode.
This allows you to build multiple packages in a monorepo.

***

### write?

```ts
optional write?: boolean;
```

Defined in: [src/config/types.ts:382](https://github.com/rolldown/tsdown/blob/a00f9fe3140ed2870584864d18815f3573583c09/src/config/types.ts#L382)

Whether to write the files to disk.
This option is incompatible with watch mode.

#### Default

```ts
true
```
