ncc
What it is
ncc is a free command-line tool that compiles a Node.js module and its dependencies into one file. The project presents this as useful for publishing minimal npm packages or shipping only the application code needed by serverless environments. It aims to provide zero-configuration builds and includes TypeScript support, accepting Node.js programs as input and output. Supported inputs include TypeScript, binary addons, and dynamic requires. Build options include minification, source maps, watched builds, external modules, and ECMAScript target selection. Node.js programs can also call ncc programmatically, with options for caching, externals, minification, source maps, and asset builds. The README gives `npm i -g @vercel/ncc` as the global install command, and the package is distributed on npm as `@vercel/ncc`. TypeScript files ending in `.ts` or `.tsx` require a `tsconfig.json`. The project provides configuration examples for Sequelize with MariaDB and `@google-cloud/vision` with `google-proto-files`; some packages may need additional options for static analysis. Dynamically loaded assets that cannot be statically analyzed may not work correctly. The repository is MIT licensed.
For and against
For
- Free, MIT-licensed CLI
- Compiles Node.js modules and dependencies into one file
- Supports TypeScript and binary addons
- Offers minification, source maps, and watched builds
- Can be called programmatically from Node.js
Against
- TypeScript inputs require a `tsconfig.json`
- Some packages may need extra configuration
- Unanalyzable dynamic assets may not work correctly
The verdict
ncc gives Node.js developers command-line and programmatic options for producing single-file builds. Check package-specific setup and dynamic asset behavior for projects that rely on them.
Who it suits
ncc suits Node.js developers who want to bundle a module and its dependencies into a single file for npm packages or serverless deployments. It is free and supports TypeScript, with a `tsconfig.json` required for `.ts` and `.tsx` inputs.
Plans and prices
@vercel/ncc
MIT-licensed open-source CLI
Read 9 Oct 2026 · github.com
On the record
- Build options
- The CLI offers minification, source maps, asset builds, externals, watch mode, and ECMAScript target selection.github.com · read 9 Oct 2026
- Compatibility caveat
- Dynamically loaded assets that cannot be statically analyzed may not work correctly because files and assets are relocated using a static evaluator.github.com · read 9 Oct 2026
- Configuration
- The design goals include zero configuration and built-in TypeScript support.github.com · read 4 Oct 2026
- Design goals
- Its design goals include zero configuration, built-in TypeScript support, and support for Node.js programs and npm modules.github.com · read 9 Oct 2026
- Distribution
- The README directs users to install ncc from npm as `@vercel/ncc`.github.com · read 4 Oct 2026
- Install
- The README gives `npm i -g @vercel/ncc` as the global installation command.github.com · read 4 Oct 2026
- Installation
- The README gives `npm i -g @vercel/ncc` as the installation command.github.com · read 9 Oct 2026
- Integrations
- The package support guide gives configuration examples for Sequelize with MariaDB and for `@google-cloud/vision` with `google-proto-files`.github.com · read 4 Oct 2026
- Intended uses
- The project lists publishing minimal npm packages and shipping relevant app code to serverless environments as motivations.github.com · read 9 Oct 2026
- License
- The repository lists an MIT license.github.com · read 9 Oct 2026
- Module formats
- When building an `.mjs` file or a `.js` file inside a `type: module` package boundary, ncc automatically creates ES module output.github.com · read 9 Oct 2026
- Node.js scope
- The project supports Node.js programs as input and output.github.com · read 4 Oct 2026
- Package integration examples
- The package support guide gives configuration examples for Sequelize with MariaDB and `@google-cloud/vision`.github.com · read 9 Oct 2026
- Package-specific setup
- The project says some packages may need extra options to work better with ncc static analysis and directs users to its issue queue for troubleshooting.github.com · read 9 Oct 2026
- Programmatic use
- The README documents using ncc from Node.js with options for caching, externals, minification, source maps, asset builds, and watch mode.github.com · read 9 Oct 2026
- Purpose
- ncc is a CLI that compiles a Node.js module and its dependencies into a single file.github.com · read 4 Oct 2026
- Support channel
- The package support guide suggests searching the issue queue or posting an issue when a package does not run with ncc.github.com · read 9 Oct 2026
- Supported inputs
- It supports TypeScript, binary addons, and dynamic requires.github.com · read 9 Oct 2026
The review
ncc is a focused bundler for Node.js developers who need a module and its dependencies reduced to one distributable file. It suits npm publishers and teams packaging serverless functions, especially when a zero-configuration workflow and TypeScript support matter. Its controls are practical, but projects with runtime-discovered assets need careful qualification before committing.
Overview
ncc compiles a Node.js module and its dependencies into a single file. That narrow objective makes it useful for publishing minimal npm packages or shipping only the relevant application code to a serverless environment, without turning the build into a larger project-management system.
Zero configuration is a stated design goal, and Node.js programs and npm modules are supported as both input and output. The package accepts TypeScript, binary addons, and dynamic requires. Install the command-line package globally with npm i -g @vercel/ncc, or invoke it from another Node.js program when builds need to be part of an automated process.
Module format handling is sensible for modern Node projects: an .mjs entry, or a .js file inside a package boundary marked type: module, produces ES module output automatically. TypeScript inputs require a tsconfig.json, so the zero-configuration goal does not remove that project-level requirement.
Key features
- Single-file compilation: Bundling dependencies into one file can simplify deployment and distribution for npm packages and serverless workloads. It is less relevant when a project needs a broad multi-asset output structure.
- Build controls: Minification reduces output size, source maps preserve a path toward debugging, watch mode supports iterative development, external modules let you keep selected dependencies outside the bundle, and ECMAScript target selection helps align output with a runtime.
- Programmatic API: Node.js callers can configure caching, externals, minification, source maps, and asset builds. This makes ncc suitable for build scripts and tooling that need repeatable configuration rather than a shell command alone.
- TypeScript and Node coverage: Built-in TypeScript support, plus handling for binary addons and dynamic requires, broadens the kinds of Node.js packages it can package. TypeScript projects still need a valid tsconfig.json.
- Package integrations: Support guidance includes configuration examples for Sequelize with MariaDB and for @google-cloud/vision with google-proto-files. These examples show where package-specific settings can matter rather than promising universal drop-in compatibility.
The important limitation is static analysis. Dynamically loaded assets that cannot be analyzed may not work correctly, and the project notes that some packages need extra options. When a dependency fails, its support guidance points developers to the issue queue for troubleshooting.
Pricing
| Plan | Price | What it includes |
|---|---|---|
| @vercel/ncc | free | MIT-licensed open-source CLI |
There is one free plan, no free trial, and no paid tier or seat, quota, or renewal condition stated. That makes ncc straightforward for individual developers and teams that can operate an open-source command-line tool. The trade-off is that package-specific troubleshooting remains part of the user’s build work rather than a priced support tier.
Platforms
ncc is listed for Linux. It is distributed through npm as @vercel/ncc, with command-line and Node.js programmatic usage.
Who it's for
Choose ncc when a Node.js or TypeScript project benefits from a single-file artifact, such as a minimal npm package or a serverless deployment containing only relevant application code. It also fits developers who want minification, source maps, watch builds, externals, and target selection without adopting a larger build platform.
Look elsewhere when runtime asset discovery is central to the application or when dependencies require extensive package-specific configuration. ncc's static-analysis caveat can turn an apparently simple bundle into a troubleshooting exercise.
Pros and cons
Pros
- Clear deployment target: A single-file result directly serves compact npm and serverless distribution goals.
- Useful output controls: Minification, source maps, watch mode, externals, and ECMAScript targets cover common packaging decisions.
- CLI and API options: Teams can use a global command or configure builds from Node.js code.
- Open-source cost: The MIT-licensed tool is free with no paid tiers.
Cons
- Static-analysis boundary: Assets loaded in ways ncc cannot analyze may fail in the resulting build.
- Package-specific setup: Some dependencies need extra options, so zero configuration is not universal.
- TypeScript prerequisite: tsconfig.json is required for .ts and .tsx inputs.
- Linux listing: Linux is the stated platform, which may not suit teams seeking a broader platform commitment.
Alternatives
For a wider survey of bundlers, start with JavaScript Build Tools. Choose Rolldown instead when you want a free, open-source tool listed across Android, API, Linux, macOS, web, and Windows. SWC is another free, open-source Rust-based developer toolchain with broad platform listings. esbuild suits readers seeking free MIT-licensed software available as a native executable or WebAssembly version.
Rslib is a free MIT-licensed option associated with ByteDance Inc. TypeScript Playground is better for browser-based work focused on a single text document. Google Closure Compiler offers a free open-source Java application, Bazel library, and npm package. Oxc is a free, open-source choice for Linux, macOS, and Windows, while Rsbuild is free MIT-licensed software listed for the web.
Verdict
ncc is a strong choice for Node.js developers who want a free, MIT-licensed path to compact single-file builds, with both CLI and programmatic workflows and useful control over minification, maps, externals, and targets. Choose it for npm or serverless packaging where dependencies can be statically understood; look elsewhere when dynamic assets or unusual package loading are fundamental to the application.