OSS TanbouSign in with GitHub

compose maintainable Node.js servers from TypeScript modules

About these scores

OSS scale score is an unbounded metric that log-compresses and weights Stars, Watchers, Forks, and Contributors. Discovery score is the current OSS scale score minus the score at discovery. Update pace is commits in the last 30 days, growth momentum is the OSS scale score difference within the recent observation window, and OSS health is a 0–100 rating based on available recency, Community Health, and release data.

Stars
76,786
Primary language
TypeScript
License
MIT
Repository last updated
Oct 3, 2026
On this page

Overview

Nest is a TypeScript-first framework for building Node.js server applications. Modules, controllers, providers, and dependency injection separate responsibilities, while Express or Fastify supplies the HTTP platform.

Features and best fit

Hands-on tested within the scope below · Content checked:

Key features

Separate responsibilities with modules, controllers, and providers

Controllers receive HTTP requests, providers hold application logic, and modules group related components. Dependency injection connects them, making implementation substitutions and unit-test boundaries explicit.

Sources: [3][1]

Use Express by default or select Fastify

Express is the default HTTP platform, with Fastify available as a compatible alternative. The framework combines object-oriented, functional, and functional-reactive programming ideas under one server-side structure.

Sources: [1]

Best fit

Fits TypeScript APIs that will grow across a team

It suits backends whose contributors need shared feature boundaries, dependency rules, and naming. The CLI generates new projects and components such as modules, allowing development to begin from a consistent layout.

Sources: [4][5]

Before adoption

Check the Node.js requirements for the CLI and runtime separately

Nest Core 12.1.2 requires Node.js 20 or newer. Current CLI documentation requires Node.js 22.22.3 or newer, 24.15 or newer, or 26 for generation commands. CLI 12 creates ECMAScript module projects by default, so CommonJS-based integrations need their loading paths reviewed during migration.

Sources: [2][3][5]

Nest CLI 12.0.8 with @nestjs/core 12.1.2 / Local Node.js 26.7.0 and npm on macOS

Generated the TypeScript ESM starter, verified resolved package versions and LF bytes, then received Hello World! from a bounded loopback server and stopped its scoped process.

Official sources

  1. [1]Nest 12.1.2 README(2026-10-04)
  2. [2]Nest Core 12.1.2 package metadata(2026-10-04)
  3. [3]Nest documentation controllers and providers at e5b515a(2026-10-04)
  4. [4]Nest CLI overview at e5b515a(2026-10-04)
  5. [5]Nest CLI usage at e5b515a(2026-10-04)
  6. [6]Nest CLI 12.0.8 package metadata(2026-10-04)
  7. [7]Nest 12.1.2 source tag(2026-10-04)
  8. [8]Nest 12.1.2 license(2026-10-04)
Supplemental curator note

The CLI establishes a consistent structure whose responsibilities and dependencies remain traceable as an API grows. Agree on module boundaries and dependency-injection conventions, and pin the Node.js version before adoption.

Try it in 3 steps

  1. 1

    Generate a project with CLI 12.0.8

    Use Node.js 22.22.3 or newer, 24.15 or newer, or 26, then select the CLI version and npm while generating an ECMAScript-module TypeScript project. The --no-observe and --skip-git flags avoid optional setup and Git initialization.

    npx --yes @nestjs/cli@12.0.8 new nest-demo --package-manager npm --no-observe --skip-git && cd nest-demo
  2. 2

    Bind to 127.0.0.1 and build the application

    From the same working directory, inspect the resolved versions and LF line endings, bind the generated main.ts explicitly to 127.0.0.1, and build it. The 2026-10-04 run resolved Core 12.1.2 and CLI 12.0.8.

    node --version && npm ls @nestjs/core @nestjs/cli --depth=0 && node -e 'const fs=require("node:fs"); const p="src/main.ts"; const s=fs.readFileSync(p,"utf8"); if (s.includes("\r")) throw new Error("CR byte found"); const before="await app.listen(process.env.PORT ?? 3000);"; const after="await app.listen(process.env.PORT ?? 3000, \"127.0.0.1\");"; if (!s.includes(before)) throw new Error("listen line not found"); fs.writeFileSync(p,s.replace(before,after)); console.log("src/main.ts: LF and 127.0.0.1");' && npm run build
  3. 3

    Bound the built server check and verify its response

    Start the built Node process directly on 127.0.0.1 port 32119 and confirm that the root returns Hello World!. Success, failure, or interruption stops only the PID started by this step.

    ( PORT=32119 node dist/main.js > nest.log 2>&1 & pid=$!; trap 'kill "$pid" 2>/dev/null || true; wait "$pid" 2>/dev/null || true' EXIT INT TERM; curl --fail --silent --retry 20 --retry-delay 1 --retry-connrefused --max-time 3 http://127.0.0.1:32119/ )
Check the official README

Growth

Growth trends · Last 30 days

76,786 Stars

Trend data is still being collected.

Development activity

Last 90 days · weekly

Commits (last 30 days)
272
Open PRs
34

Development activity is still being collected.

Built with

Categories and tags

GitHub data

GitHub dataView detailed GitHub data

GitHub Topics

  • nest
  • javascript
  • typescript
  • nodejs
  • framework
  • nodejs-framework
  • typescript-framework
  • javascript-framework
  • microservices
  • websockets
  • node
  • nestjs
Stars
76,786
Forks
8,571
Watchers
758
Open issues
12
Contributors
769
Owner type
Organization
Primary language
TypeScript
License
MIT
Repository last updated
Oct 3, 2026
Write a related article

Share a guide or use case for this OSS in Markdown. Articles are published after administrator approval.

Report incorrect information

Tell us if any listing information is incorrect or outdated.

After reading this page, do you know what to do next?