Claude Code for Unbuild Build Tool (2026)
Claude Code for Unbuild Build Tool Workflow Guide
Unbuild is a modern, modular build system designed for JavaScript and TypeScript libraries. It provides a standardized way to create builds with automatic entry point generation, TypeScript support, and plugin-based extensibility. When combined with Claude Code, you can automate the entire build configuration process, from initial setup to publishing готовые пакеты.
This guide shows you how to use Claude Code to work with Unbuild efficiently, automate repetitive tasks, and create maintainable build configurations.
Understanding Unbuild Fundamentals
Unbuild uses a convention-over-configuration approach where your build behavior is defined through a build.config.ts file in your project root. The tool automatically handles:
- TypeScript compilation and type declarations
- Multiple output formats (ESM, CJS, DTS)
- Entry point discovery and generation
- Bundle optimization
Claude Code can help you scaffold new Unbuild projects, generate configuration files, and maintain build configurations over time.
Why Unbuild Over Other Build Tools?
Before diving into the workflow, it helps to understand what makes Unbuild the right choice for library authors. Unlike bundlers such as Rollup or Vite configured manually, Unbuild wraps Rollup with sensible defaults that cover 90% of library use cases without extra configuration.
| Feature | Rollup (manual) | Webpack | Unbuild |
|---|---|---|---|
| Zero-config TypeScript | No | No | Yes |
| Auto entry discovery | No | Partial | Yes |
| DTS generation | Plugin | Plugin | Built-in |
| ESM + CJS dual output | Manual | Manual | emitCJS: true |
| Monorepo ready | Partial | Partial | Yes |
| Stub mode (dev) | No | No | Yes |
The “stub mode” row deserves extra attention. Unbuild’s --stub flag generates a thin shim that points directly to your TypeScript source during development. This means you can link your library into a consuming app and get instant feedback without a rebuild step. a workflow that dramatically speeds up local development cycles.
Setting Up Unbuild with Claude Code
The fastest way to start a new Unbuild project is to let Claude Code scaffold it for you. Here’s a practical workflow:
Create a new directory for your library
mkdir my-awesome-library
cd my-awesome-library
Initialize with npm and install Unbuild
npm init -y
npm install -D unbuild
After this, you can ask Claude Code to generate your build.config.ts:
// build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
entries: [
'src/index'
],
clean: true,
declaration: true,
rollup: {
emitCJS: true
}
})
Claude Code can generate this configuration automatically based on your project’s requirements. Simply describe your needs, and the AI will create the appropriate configuration.
Prompting Claude Code Effectively for Unbuild
The quality of what Claude generates depends heavily on how you phrase your request. Vague prompts produce generic configurations; specific prompts produce ready-to-ship files. Here are prompts that work well:
For a utility library:
“Create a build.config.ts for a zero-dependency utility library that needs ESM and CJS dual output, TypeScript declarations, and tree-shakable named exports. The main entry is src/index.ts and there is a separate src/cli.ts entry for a CLI tool.”
For a monorepo package:
“Generate an Unbuild config for a monorepo package at packages/core. It has peer dependencies on react and react-dom that should not be bundled. Enable strict declarations and rollup type rollup.”
For debugging a broken build:
“Here is my build.config.ts and the error output from
npx unbuild. Diagnose what’s wrong and provide a corrected config.”
Pasting the error output directly into the Claude Code chat gives it the context needed to produce accurate fixes rather than generic advice.
Automating Entry Point Generation
One of Unbuild’s most powerful features is automatic entry point discovery. When you structure your project correctly, Unbuild automatically generates multiple entry points from your source files.
Recommended Project Structure
my-library/
src/
index.ts # Main entry
utils/
format.ts # Becomes /utils/format
parse.ts # Becomes /utils/parse
core/
engine.ts # Becomes /core/engine
build.config.ts
package.json
With this structure, Unbuild automatically generates:
dist/index.js- Main entrydist/utils/format.js- Utils formatterdist/utils/parse.js- Utils parserdist/core/engine.js- Core engine
You can ask Claude Code to create this structure for you:
Tell Claude: "Create a new Unbuild project with src/index.ts, src/utils/ folder, and src/core/ folder with example files"
Configuring package.json Exports Correctly
The generated dist files are only useful if package.json points to them correctly. Modern bundler resolution depends on the exports field, and getting it wrong means consumers get the wrong format or missing types. Ask Claude Code to generate the exports map alongside the build config:
{
"name": "my-awesome-library",
"version": "1.0.0",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
".": {
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"require": {
"types": "./dist/index.d.cts",
"default": "./dist/index.cjs"
}
},
"./utils": {
"import": {
"types": "./dist/utils/index.d.mts",
"default": "./dist/utils/index.mjs"
},
"require": {
"types": "./dist/utils/index.d.cts",
"default": "./dist/utils/index.cjs"
}
}
},
"files": ["dist"]
}
This pattern. generating package.json exports alongside build.config.ts. is one of the most valuable things Claude Code can do for library authors. The dual-format exports map is tedious to write manually but critical for compatibility with both ESM-first tools like Vite and CJS-only runtimes like older Jest configs.
Using Claude Code to Maintain Build Configurations
As your library grows, your build configuration needs to evolve. Claude Code can help you:
Adding New Entry Points
When you add new modules to your library, update the build config:
// Claude: Add 'src/helpers' entry to the build config
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
entries: [
'src/index',
'src/utils',
'src/core',
'src/helpers' // New entry
],
clean: true,
declaration: true,
rollup: {
emitCJS: true
}
})
Configuring TypeScript Strictly
For production libraries, you want strict TypeScript settings:
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
entries: [
'src/index',
'src/utils',
'src/core'
],
clean: true,
declaration: {
strict: true,
rollupTypes: true
},
rollup: {
emitCJS: true,
inlineDependencies: false
}
})
The rollupTypes: true option merges all .d.ts files into a single declaration file per entry. This is important for library consumers who use “go to definition” in their editors. without type rollup, they end up jumping through intermediate generated files rather than your authored source.
Handling External Dependencies
One of the most common mistakes in library builds is accidentally bundling peer dependencies. If you bundle react into your library, consumers end up with two copies of React at runtime. Ask Claude Code to audit your config:
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
entries: ['src/index'],
clean: true,
declaration: { rollupTypes: true },
externals: [
'react',
'react-dom',
'react/jsx-runtime',
// Add any other peer deps here
],
rollup: {
emitCJS: true,
}
})
Claude Code can scan your package.json peerDependencies field and automatically populate the externals array for you. a tedious but critical task that’s easy to get wrong manually.
Integrating with TypeScript Projects
When your Unbuild project is part of a larger monorepo or TypeScript workspace, Claude Code can help configure proper TypeScript integration:
- Ensure tsconfig.json is properly configured - Set
declaration: trueanddeclarationMap: true - Configure path mappings - Use
pathsin tsconfig for clean imports - Set up references - Use TypeScript project references for faster builds
A well-structured tsconfig.json for an Unbuild library looks like this:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"outDir": "dist",
"rootDir": "src",
"lib": ["ES2020"],
"skipLibCheck": true
},
"include": ["src//*"],
"exclude": ["node_modules", "dist"]
}
Note the "moduleResolution": "bundler" setting. this is the correct choice for Unbuild projects in 2026. It enables importing without file extensions and resolves exports maps in package.json, which is how most modern libraries ship.
Claude Code can audit your configuration and suggest improvements:
Ask Claude: "Audit my build.config.ts and suggest improvements for a production library"
Stub Mode for Development
One workflow improvement Claude Code can set up is a development script that uses Unbuild’s stub mode:
{
"scripts": {
"build": "unbuild",
"build:stub": "unbuild --stub",
"dev": "unbuild --stub && nodemon --watch src --ext ts,tsx --exec 'unbuild --stub'"
}
}
With stub mode active, you can npm link your library into a consuming project and edit source files without running a full build. The stub shim re-exports from your TypeScript source via jiti (a TypeScript runtime) at development time. Claude Code can explain this workflow and set it up for your specific project structure.
Publishing Your Unbuild Package
Once your build is configured, publishing is straightforward:
Build the package
npx unbuild
Publish to npm
npm publish
Claude Code can create a release script in your package.json:
{
"scripts": {
"build": "unbuild",
"prepublishOnly": "npm run build",
"release": "np"
}
}
Pre-publish Checklist with Claude Code
Before publishing, ask Claude Code to run through a pre-publish checklist. A good prompt is: “Check my package.json, build.config.ts, and dist/ output and tell me if anything looks wrong before I publish.”
Claude will look for common issues:
- Missing or incorrect
exportsentries typesfield pointing to a file that doesn’t exist- Peer dependencies that are also listed in
dependencies(they should only be inpeerDependencies) filesarray that accidentally excludesdist/- Source files accidentally included in
files(exposing your TypeScript source when you only want to ship compiled output)
Best Practices for Unbuild with Claude Code
- Version Management
Always keep your dependencies updated. Ask Claude Code periodically to check for updates:
Tell Claude: "Check for outdated dependencies in this Unbuild project"
- Test Your Build Output
Before publishing, verify your build works:
Build and test locally
npm run build
npm pack
npm install ./your-package-*.tgz
A more thorough approach is to write a small consuming script and run it with both node (which uses the CJS output) and a bundler like Vite (which uses the ESM output). Claude Code can generate this test harness for you:
// test-consumer/index.mjs . tests ESM output
import { myFunction } from 'my-awesome-library'
console.assert(typeof myFunction === 'function', 'ESM export works')
console.log('ESM import OK')
// test-consumer/index.cjs . tests CJS output
const { myFunction } = require('my-awesome-library')
console.assert(typeof myFunction === 'function', 'CJS export works')
console.log('CJS require OK')
- Use GitHub Actions
Automate your CI/CD with GitHub Actions:
name: Build and Test
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build
- run: npm test
Claude Code can generate this workflow file for you automatically. For more advanced scenarios, ask Claude to add a matrix build that tests across Node 18, 20, and 22, or to add a separate job that publishes to npm only when a version tag is pushed.
- Document Your Build Configuration
As build configurations grow, comments become essential. Claude Code excels at adding explanatory comments to existing configs:
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
// Each entry generates a separate output chunk. useful for
// tree-shaking in consuming apps that only import parts of the library
entries: ['src/index', 'src/utils', 'src/core'],
// Remove dist/ before each build to avoid stale artifacts
clean: true,
// rollupTypes merges all .d.ts files into a single declaration per entry
// This is critical for clean "go to definition" behavior in editors
declaration: {
rollupTypes: true,
},
rollup: {
// Emit a CommonJS build alongside the default ESM build
// Required for Jest (without experimental VM modules) and older tooling
emitCJS: true,
// Keep peer deps out of the bundle. consumers provide their own copy
inlineDependencies: false,
},
})
Conclusion
Combining Claude Code with Unbuild creates a powerful workflow for JavaScript and TypeScript library development. Claude Code can scaffold projects, generate configurations, maintain build settings, and even create CI/CD workflows. allowing you to focus on writing code rather than managing build tooling.
The key insight is that Unbuild eliminates most of the manual Rollup configuration that library authors used to manage, and Claude Code eliminates the remaining friction: generating the correct package.json exports map, auditing for bundled peer dependencies, setting up stub-mode development scripts, and writing pre-publish test harnesses. Together they reduce the time from “I want to publish a library” to a correctly configured, CI-protected npm package from hours to minutes.
Start small: create a new Unbuild project, let Claude generate the initial configuration, then iterate as your library grows. The combination of AI assistance and modern tooling makes library development more accessible than ever.
Try it: Paste your error into our Error Diagnostic for an instant fix.
Related Reading
- Claude Code for wasm-bindgen Workflow Tutorial
- Jest to Vitest Migration Workflow with Claude Code
- Claude Code NestJS Custom Decorators Workflow Tutorial
- Claude Code for Moon Build System — Guide
- Pieces for Developers AI Review Workflow Tool
Built by theluckystrike. More at zovo.one
Find the right skill → Browse 155+ skills in our Skill Finder.
Quick setup → Launch your project with our Project Starter.