nest
A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications with TypeScript/JavaScript 🚀
Top Related Projects
Fast, unopinionated, minimalist web framework for node.
Expressive middleware for node.js using ES2017 async functions
Fast and low overhead web framework, for Node.js
The API and real-time application framework
AdonisJS is a TypeScript-first web framework for building web apps and API servers. It comes with support for testing, modern tooling, an ecosystem of official packages, and more.
:rocket: Progressive microservices framework for Node.js
Quick Overview
Nest (NestJS) is a progressive Node.js framework for building efficient, scalable, and maintainable server-side applications. It leverages TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Programming) to provide a robust development experience.
Pros
- Strong TypeScript support, enhancing code quality and developer productivity
- Modular architecture, promoting code reusability and maintainability
- Built-in dependency injection system, facilitating loose coupling and testability
- Extensive ecosystem with a wide range of official and community modules
Cons
- Steeper learning curve compared to simpler frameworks like Express
- Overhead in terms of performance and bundle size for smaller applications
- Opinionated structure may not suit all project requirements
- Requires TypeScript knowledge for optimal usage
Code Examples
- Creating a basic controller:
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
- Defining a service with dependency injection:
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
private readonly cats: string[] = ['Fluffy', 'Whiskers'];
findAll(): string[] {
return this.cats;
}
}
- Using middleware:
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log('Request...');
next();
}
}
Getting Started
To start a new Nest project:
-
Install the Nest CLI:
npm i -g @nestjs/cli
-
Create a new project:
nest new project-name
-
Navigate to the project directory and start the development server:
cd project-name npm run start:dev
Your Nest application is now running at http://localhost:3000
.
Competitor Comparisons
Fast, unopinionated, minimalist web framework for node.
Pros of Express
- Lightweight and minimalist, allowing for greater flexibility and customization
- Simpler learning curve, ideal for beginners or small projects
- Extensive ecosystem with a wide range of middleware and plugins
Cons of Express
- Lack of built-in structure, requiring developers to make architectural decisions
- No out-of-the-box TypeScript support, necessitating additional setup
- Less opinionated, which can lead to inconsistent code organization across projects
Code Comparison
Express:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
Nest:
import { Controller, Get } from '@nestjs/common';
@Controller()
export class AppController {
@Get()
getHello(): string {
return 'Hello World!';
}
}
The Express example shows its simplicity and straightforward approach, while the Nest example demonstrates its use of decorators and TypeScript for a more structured, object-oriented style.
Expressive middleware for node.js using ES2017 async functions
Pros of Koa
- Lightweight and minimalist, offering a small core with extensibility through middleware
- Simpler learning curve, ideal for developers who prefer a more hands-on approach
- Excellent performance due to its streamlined architecture
Cons of Koa
- Less opinionated, requiring more setup and configuration for complex applications
- Smaller ecosystem compared to Nest, with fewer out-of-the-box features
- Limited TypeScript support, as it's primarily designed for JavaScript
Code Comparison
Koa:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
Nest:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Summary
Koa is a lightweight, flexible framework that excels in simplicity and performance, making it suitable for developers who prefer a minimalist approach. However, it may require more setup for complex applications and has a smaller ecosystem compared to Nest. Nest, on the other hand, offers a more structured, feature-rich environment with better TypeScript support, but comes with a steeper learning curve and more opinionated architecture.
Fast and low overhead web framework, for Node.js
Pros of Fastify
- Extremely fast performance, often outperforming NestJS in benchmarks
- Lightweight and minimalist design, allowing for greater flexibility
- Built-in support for JSON Schema validation
Cons of Fastify
- Less opinionated structure, which may lead to inconsistent code organization in larger projects
- Smaller ecosystem and fewer out-of-the-box integrations compared to NestJS
- Steeper learning curve for developers new to Node.js frameworks
Code Comparison
Fastify:
const fastify = require('fastify')()
fastify.get('/', async (request, reply) => {
return { hello: 'world' }
})
fastify.listen(3000)
NestJS:
import { Controller, Get } from '@nestjs/common';
@Controller()
export class AppController {
@Get()
getHello(): string {
return 'Hello World!';
}
}
Both frameworks offer simple ways to create routes and handle requests, but NestJS uses decorators and a more structured approach, while Fastify opts for a more straightforward functional style. NestJS provides a more opinionated architecture out of the box, which can be beneficial for larger, more complex applications. Fastify, on the other hand, offers more flexibility and raw performance, making it suitable for smaller projects or microservices where speed is crucial.
The API and real-time application framework
Pros of Feathers
- Lightweight and flexible, allowing for quick setup and development
- Strong real-time capabilities out of the box with WebSocket support
- Extensive plugin ecosystem for easy integration of additional features
Cons of Feathers
- Less opinionated structure, which may lead to inconsistencies in large projects
- Smaller community compared to Nest, potentially resulting in fewer resources and third-party integrations
Code Comparison
Feathers service creation:
const messages = {
async find(params) {
return [];
},
async create(data, params) {}
};
app.use('messages', messages);
Nest controller creation:
@Controller('messages')
export class MessagesController {
@Get()
findAll(): string[] {
return [];
}
@Post()
create(@Body() createMessageDto: CreateMessageDto) {}
}
Both frameworks offer straightforward ways to create services or controllers. Feathers uses a more functional approach, while Nest leverages decorators and TypeScript for a more structured, object-oriented style.
AdonisJS is a TypeScript-first web framework for building web apps and API servers. It comes with support for testing, modern tooling, an ecosystem of official packages, and more.
Pros of AdonisJS
- Simpler learning curve and more straightforward setup
- Built-in ORM (Lucid) with excellent database integration
- Strong focus on developer experience and productivity
Cons of AdonisJS
- Smaller ecosystem and community compared to NestJS
- Less flexibility for complex, enterprise-level applications
- Fewer built-in features for microservices architecture
Code Comparison
AdonisJS route definition:
Route.get('/users', 'UsersController.index')
Route.post('/users', 'UsersController.store')
NestJS route definition:
@Controller('users')
export class UsersController {
@Get()
index() {}
@Post()
store() {}
}
Key Differences
- AdonisJS uses a more traditional MVC structure, while NestJS follows a modular architecture
- NestJS leverages TypeScript's decorators extensively, whereas AdonisJS uses a more conventional approach
- AdonisJS provides a full-stack framework experience, while NestJS focuses primarily on the backend
Conclusion
AdonisJS is ideal for developers seeking a straightforward, productive framework with excellent database integration. NestJS, on the other hand, offers more flexibility and scalability for complex applications, particularly in microservices architectures. The choice between the two depends on project requirements, team expertise, and long-term scalability needs.
:rocket: Progressive microservices framework for Node.js
Pros of Moleculer
- Lightweight and flexible microservices framework
- Built-in service discovery and load balancing
- Supports multiple transport layers (TCP, NATS, Redis, etc.)
Cons of Moleculer
- Smaller community and ecosystem compared to Nest
- Less opinionated, which may lead to inconsistent project structures
- Limited built-in decorators and metadata capabilities
Code Comparison
Moleculer service:
const { ServiceBroker } = require("moleculer");
module.exports = {
name: "math",
actions: {
add(ctx) {
return ctx.params.a + ctx.params.b;
}
}
};
Nest controller:
import { Controller, Get, Query } from '@nestjs/common';
@Controller('math')
export class MathController {
@Get('add')
add(@Query('a') a: number, @Query('b') b: number): number {
return a + b;
}
}
Key Differences
- Moleculer focuses on microservices architecture, while Nest is a full-featured web application framework
- Nest provides stronger TypeScript support and decorators for dependency injection
- Moleculer offers built-in service discovery and load balancing, which Nest requires additional setup for
- Nest has a larger ecosystem and community support
- Moleculer is more lightweight and flexible, while Nest provides a more structured, opinionated approach
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
A progressive Node.js framework for building efficient and scalable server-side applications.
Description
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses modern JavaScript, is built with TypeScript (preserves compatibility with pure JavaScript) and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Programming).
Under the hood, Nest makes use of Express, but also provides compatibility with a wide range of other libraries, like Fastify, allowing for easy use of the myriad of third-party plugins which are available.
Philosophy
In recent years, thanks to Node.js, JavaScript has become the âlingua francaâ of the web for both front and backend applications, giving rise to awesome projects like Angular, React, and Vue, which improve developer productivity and enable the construction of fast, testable, and extensible frontend applications. However, on the server-side, while there are a lot of superb libraries, helpers, and tools for Node, none of them effectively solve the main problem - the architecture.
Nest aims to provide an application architecture out of the box which allows for effortless creation of highly testable, scalable, and loosely coupled and easily maintainable applications. The architecture is heavily inspired by Angular.
Getting started
- To check out the guide, visit docs.nestjs.com. :books:
- è¦æ¥çä¸æ æå, è¯·è®¿é® docs.nestjs.cn. :books:
- ê°ì´ë 문ìë docs.nestjs.comìì íì¸íì¤ ì ììµëë¤. :books:
- ã¬ã¤ã㯠docs.nestjs.comã§ã確èªãã ããã :books:
Questions
For questions and support please use the official Discord channel. The issue list of this repo is exclusively for bug reports and feature requests.
Issues
Please make sure to read the Issue Reporting Checklist before opening an issue. Issues not conforming to the guidelines may be closed immediately.
Consulting
With official support, you can get expert help straight from Nest core team. We provide dedicated technical support, migration strategies, advice on best practices (and design decisions), PR reviews, and team augmentation. Read more about support here.
Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support from the amazing backers. If you'd like to join them, please read more here.
Principal Sponsors
Gold Sponsors
Silver Sponsors
Sponsors
Backers
Stay in touch
- Author - Kamil MyÅliwiec
- Website - https://nestjs.com
- X - @nestframework
License
Nest is MIT licensed.
Top Related Projects
Fast, unopinionated, minimalist web framework for node.
Expressive middleware for node.js using ES2017 async functions
Fast and low overhead web framework, for Node.js
The API and real-time application framework
AdonisJS is a TypeScript-first web framework for building web apps and API servers. It comes with support for testing, modern tooling, an ecosystem of official packages, and more.
:rocket: Progressive microservices framework for Node.js
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot