repo
← all guides

Bundler

Rolldown

Switch a Rolldown build to ESM output and drop the CommonJS bundle.

Rolldown is built on ESM-first principles from the ground up, making it an ideal choice for ESM-only packages. Most of the work here is removing the CommonJS output you no longer need.

1. Mark the package as ESM

Add type: "module" to your package.json. Every .js file in the package is now treated as an ES module.

{
	"name": "my-package",
	"type": "module"
}

Any file that genuinely still has to be CommonJS (e.g. a config file for an older tool) can keep the .cjs extension.

2. Emit a single ESM bundle

Drop the cjs entry from your Rolldown config:

export default {
	input: 'src/index.js',
	output: {
		file: 'dist/index.js',
		format: 'es'
	}
};

If you were using output as an array to emit both formats, it can go back to being a single object.

3. Point exports at the bundle

Replace main with an exports field. This is what lets Node.js and bundlers resolve your package, and it stops deep imports into your dist folder from becoming part of your public API by accident.

{
	"exports": {
		".": "./dist/index.js"
	},
	"files": ["dist"]
}

4. Check the result

Run publint to catch problems with leftover CommonJS references, publishing config, etc.

npx publint