NestJS Logo

Overview

The Nest CLI is a command-line tool that helps you initialize, develop, and maintain Nest applications. It scaffolds projects, serves them in development mode, and builds and bundles them for production. It also embodies best-practice architectural patterns to encourage well-structured applications.

Installation#

Note: This guide uses npm to install packages, including the Nest CLI. You can use another package manager if you prefer. npm offers several ways to control how your OS command line resolves the nest binary. Here, we install it globally with the -g option. This is convenient, and it is the approach the rest of the documentation assumes. Keep in mind that when you install any npm package globally, you are responsible for making sure you run the correct version. It also means that all your projects run the same version of the CLI. A reasonable alternative is the npx program built into the npm CLI (other package managers have similar features), which ensures that you run a managed version of the Nest CLI. For more information, consult the npx documentation or your DevOps team.

Install the CLI globally using the npm install -g command (see the Note above for details about global installs).


$ npm install -g @nestjs/cli
Hint Alternatively, run npx @nestjs/cli@latest to use the CLI without installing it globally.

Basic workflow#

Once the CLI is installed, you can invoke its commands from your OS command line through the nest executable. To list the available commands, run:


$ nest --help

To get detailed help on an individual command, pass --help to it. Substitute any command, such as new or add, for generate in the example below:


$ nest generate --help

To create, build, and run a new Nest project in development mode, go to the folder that should contain your new project and run the following commands:


$ nest new my-nest-project
$ cd my-nest-project
$ npm run start:dev

The new command prompts you to choose a module system: ESM (the default), which uses Vitest for testing, or CommonJS, which uses Jest. Both use oxlint for linting. See nest new for the other prompts and options.

In your browser, open http://localhost:3000 to see the new application running. The application recompiles and reloads automatically whenever you change a source file.

Hint For faster builds, we recommend the SWC builder, which is about 10x faster than the default TypeScript compiler.

Project structure#

When you run nest new, Nest creates a new folder and populates it with a boilerplate application. You can keep working in this default structure and add new components as described throughout this documentation. We refer to the project structure generated by nest new as standard mode. Nest also supports an alternate structure for managing multiple projects and libraries, called monorepo mode.

The two modes differ only in how the build process works (monorepo mode simplifies build complexities that can arise in monorepo-style project structures) and in built-in library support. All other Nest features, and this documentation, apply equally to both. You can switch from standard mode to monorepo mode at any time, so you can safely defer this decision while you're still learning Nest.

You can use either mode to manage multiple projects. The following table summarizes the differences:

FeatureStandard ModeMonorepo Mode
Multiple projectsSeparate file system structureSingle file system structure
node_modules & package.jsonSeparate instancesShared across monorepo
Default compilertscrspack
Compiler settingsSpecified separatelyMonorepo defaults that can be overridden per project
Lint and formatter config filesSpecified separatelyShared across monorepo
nest build and nest start commandsTarget defaults automatically to the (only) project in the contextTarget defaults to the default project in the monorepo
LibrariesManaged manually, usually via npm packagingBuilt-in support, including path management and bundling

See Workspaces and Libraries for more detail to help you decide which mode suits you best.

CLI command syntax#

All nest commands follow the same format:


nest commandOrAlias requiredArg [optionalArg] [options]

For example:


$ nest new my-nest-project --dry-run

Here, new is the commandOrAlias; its alias is n. my-nest-project is the requiredArg. If you don't supply a requiredArg on the command line, nest prompts for it. The --dry-run option has the short form -d. The following command is therefore equivalent to the one above:


$ nest n my-nest-project -d

Most commands, and some options, have aliases. Run nest new --help to see them.

Command overview#

Run nest <command> --help for any of the following commands to see its options. See the CLI command reference for a detailed description of each command.

CommandAliasDescription
newnScaffolds a new standard mode application with all the boilerplate files it needs to run.
generategGenerates and/or modifies files based on a schematic.
buildCompiles an application or workspace into an output folder.
startCompiles and runs an application (or the default project in a workspace).
addImports a library that has been packaged as a nest library, running its install schematic.
upgradeupdateUpgrades an existing project to the latest NestJS major version.
deployDeploys your application to the cloud, powered by Mau.
infoiDisplays information about installed Nest packages and other useful system information.

Requirements#

The CLI binary itself runs on Node.js v20.11 or later, but the schematics behind nest new, nest generate, and nest upgrade (@nestjs/schematics) require Node.js v22.22.3+, v24.15+, or v26+. Running a Nest application has a lower floor (see Node.js requirements in the migration guide). If you generate code on the machine you develop on, use the latest active LTS release.

The Nest CLI also requires a Node.js binary built with internationalization support (ICU), such as the official binaries from the Node.js download page. If you encounter ICU-related errors, check that your binary meets this requirement:


node -p process.versions.icu

If the command prints undefined, your Node.js binary has no internationalization support.

Edit on GitHub

Support us

Nest is an MIT-licensed open source project. It can grow thanks to the support of these awesome people. If you'd like to join them, please read more here.

Principal Sponsors

SerpApi LogoTrilon LogoMojam Logo

Sponsors / Partners

Become a sponsor