NETROOM
Big news: TypeORM finally left the endless 0.3.x line - 1.1.1 shipped in September 2026, with the old 0.3.31 parked under the legacy tag. It is the same Data Mapper at heart: repositories, QueryBuilder, migrations, and a dozen dialects including MongoDB. Requires Node 20.19+ and decorators with emitDecoratorMetadata enabled. The long-standing rough edges - loose typing on returned values and surprising cascades - are still there. For a greenfield project on a single database, Prisma and Drizzle give more predictable types and migrations.
A thin layer over jsonwebtoken: JwtService with sign/signAsync/verify/decode, secrets and options set in JwtModule.register or asynchronously via registerAsync with ConfigService access. It does not validate tokens for you - that's a guard's job, usually paired with @nestjs/passport and passport-jwt. If you need JWK, EdDSA or key rotation, look at jose, since jsonwebtoken is the ceiling here. Works on Nest 8 through 12.
Redis-backed job queues: retries, delays, priorities, flow graphs, rate limiting, workers in separate processes. Written in TypeScript, the direct successor to Bull from the same authors. In v6 ioredis is no longer the only client - node-redis works too, and Postgres arrived as a backing store (pg/redis/ioredis are optional peers, install just what you use). There is a paid BullMQ Pro with groups and batches. In Nest you wire it through @nestjs/bullmq.
A JSON logger that stays out of the hot path: one line to stdout, with formatting and delivery pushed into a worker thread via transports. Benchmarks put it well ahead of winston, and that is the reason to pick it. Human-readable output in development comes from a separate package, pino-pretty, which you never enable in production. Nest has a ready-made wrapper in nestjs-pino: it replaces the built-in Logger and carries a request id through the whole request. Version 10 shipped in February 2026; the package is still CommonJS.
Builds the OpenAPI schema from your DTOs and controller decorators, then serves Swagger UI at a path you pick. It bundles swagger-ui-dist, so you do not need swagger-ui-express alongside it. With class-validator the validation rules land in the schema for free, and the CLI plugin infers types from TypeScript to save you half the decorators - at the cost of editing nest-cli.json. The 12.x line pulls in @standard-schema/spec, so Zod schemas work without a bridge. Pinned to Nest 12.
The Apollo GraphQL server engine: query parsing, schema, plugins, caching, tracing. Since v4 it is no longer an HTTP server but a core you attach a web layer to - Express 5, Fastify, or the standalone one. v5 needs Node 20+ and graphql 16.11+; apollo-server-express and friends are dead and migration is mandatory. You rarely install it directly under Nest - @nestjs/apollo holds it as a peer. Outside the Apollo ecosystem, graphql-yoga or mercurius are the alternatives.
A wrapper over Nest's DiscoveryService that does exactly what you come for: find every provider and handler tagged with your own decorator. If you are building a custom @OnEvent-style decorator, this collects the metadata in one call instead of walking the container by hand. Mostly useful to library authors and internal platform modules; in ordinary feature code it is overkill. Peers are @nestjs/core and @nestjs/common 11.x, so verify compatibility on Nest 12.
RabbitMQ in Nest done properly: @RabbitSubscribe and @RabbitRPC decorators, your own exchanges and routing keys, dead-lettering, per-handler concurrency. The reason to prefer it over the built-in @nestjs/microservices RMQ transport is control - that transport hides the topology and imposes its own message envelope, here you own the exchange design. Under the hood it uses amqplib 0.10 and amqp-connection-manager 5, so reconnect is included. Peers target Nest 11.x.
One genuinely useful function - createMock<T>(), which produces a typed mock of any interface or class, nested objects included, without listing methods by hand. In Nest tests it removes the pain of mocking ExecutionContext, Repository and services with a dozen methods. It is Jest-specific: it returns jest.fn() and relies on Jest matchers, so Vitest needs a different tool. Small package, released rarely because the API settled long ago.
The Redis adapter for Keyv, built on the official node-redis 5 client. It handles namespaces as separate key spaces, supports cluster (via cluster-key-slot) and accepts an existing client instance if you already have a connection. This pair - keyv plus @keyv/redis - is what replaced the old cache-manager-redis-* stores after cache-manager v6. Dual ESM/CJS, peer is keyv 5.x. Note that ioredis is not used here, so an ioredis codebase ends up with two clients.
A TypeScript ORM built on Data Mapper, Unit of Work and Identity Map - unlike TypeORM's Active Record, entities live in the EntityManager and changes reach the database in a single flush(). It catches type drift at compile time and supports Postgres, MySQL, MariaDB, SQLite and MongoDB. v7 raised the bar to Node 22.17+, which is a blocker on older runtimes. The driver is a separate package (@mikro-orm/postgresql and so on), as is the CLI.
The bridge between MikroORM and Nest: MikroOrmModule.forRoot/forFeature, injectable EntityManager and repositories, and request-scoped context via AsyncLocalStorage - without it the EntityManager would be shared across requests and the Identity Map would drift. v7 requires @mikro-orm/core 7 and Nest 11 or 12. The database driver installs separately. Structurally it is the same layer as @nestjs/typeorm, just for a different entity model.
The NATS client for Node - pub/sub, request-reply, JetStream. The package is deprecated: development moved into the nats.js monorepo, and you now install @nats-io/transport-node plus separate @nats-io/jetstream and @nats-io/kv modules. The old name is frozen at 2.29.x and gets no updates. For a new service go straight to the new packages - modular layout, less weight. @nestjs/microservices still targets the old name for its NATS transport, so check before upgrading.
Email through nodemailer with templating: Handlebars, Pug, EJS, Liquid or MJML, with CSS inlining built in. MailerModule.forRootAsync pulls SMTP settings from ConfigService, then mailerService.sendMail takes a template name and a context object. Community-maintained rather than Nest core, but alive - releases through 2026. It declares a long list of optional peers, so install only the template engine you actually use or npm will complain.
The Apollo driver for @nestjs/graphql: it wires schema, resolvers and Nest DI into the @apollo/server engine. Install it alongside @nestjs/graphql, graphql and @apollo/server - all three are peers, and versions must line up (14.x targets Nest 12 and Apollo Server 5). Federation comes from here too: @apollo/gateway and @apollo/subgraph are optional peers. If you do not want Apollo, Nest ships @nestjs/mercurius for Fastify. Both code-first and schema-first work.
An injectable HttpService wrapping axios: every method returns an rxjs Observable instead of a Promise, so calls compose with retry, timeout and takeUntil. If you don't want Observables, unwrap with firstValueFrom - or skip the module and use axios or fetch directly, since it adds nothing else. axios stays a peer dependency so you pin the version yourself. From Nest 12 the package ships as pure ESM and needs Node 20.19+/22.12+/24.
Bindings for classic Bull: Redis-backed queues, @Processor and @Process decorators, workers registered via BullModule.registerQueue. The Nest package is healthy and tracks Nest 12, but bull itself hasn't shipped a release since December 2024 - its author moved development to BullMQ. Reach for this only when a codebase is already on Bull and migration is off the table. New services should start with @nestjs/bullmq.
Same repo as @nestjs/bull but for BullMQ, the TypeScript rewrite by the same author. You get flows (parent and child jobs), rate limiting, sandboxed worker processes and properly typed job payloads. The decorator style differs: @Processor on a class extending WorkerHost instead of @Process methods. Needs Redis 6.2+, and bullmq is a peer you install yourself. This is the default choice for queues on Nest today.
Caching on top of cache-manager: @CacheKey and @CacheTTL decorators, a CacheInterceptor that memoises GET routes, and an injectable CACHE_MANAGER. Since v3 it runs on cache-manager 6+ and Keyv, so a Redis store now comes from a keyv adapter, not the old cache-manager-redis-store packages. Great for plain response caching; for tag-based invalidation or bespoke strategies you'll be happier talking to ioredis directly.
The framework CLI: nest new, nest generate for controllers, services and modules, nest build and nest start --watch. Compiles with tsc by default but can use SWC (-b swc, far faster) or webpack/rspack for monorepos and HMR. It also owns monorepo layout via nest generate app/library. Install it into devDependencies; needs Node 20.11+. You can live without it, but the schematics and watch mode save real time.
Nest's public API surface: decorators (@Module, @Injectable, @Controller, @Get), pipes, guards, interceptors, exception filters, HttpException and built-in validation. Always installed alongside @nestjs/core; on its own it does nothing. Version 12 moved the package to ESM and made class-validator and class-transformer optional peers - with Standard Schema support you can now validate with Zod or Valibot instead of decorators.
Configuration from .env and beyond: ConfigModule.forRoot loads files through dotenv, ConfigService reads values with types, and registerAs builds namespaced config bound to a module. Schema validation hangs off Joi or, since v12, any Standard Schema library - Zod, Valibot. Caching and expandVariables are flags. The alternative is reading process.env by hand, which costs you fail-fast validation at boot.
The framework runtime: IoC container, module scanner, dependency resolution, application lifecycle and NestFactory. It serves no HTTP by itself - you pair it with a platform adapter, @nestjs/platform-express or platform-fastify. It leans on reflect-metadata and decorators, so TypeScript with emitDecoratorMetadata is mandatory. Nest 12 requires Node 20+ and ships ESM; upgrading from 10 or 11 is not free, read the migration guide.
CQRS without heavy infrastructure: commands, queries, events and sagas built on rxjs, all in one process. CommandBus and QueryBus split writes from reads across separate handlers; EventBus plus sagas chain reactions to events. It is neither a broker nor an event store - events vanish on restart, and cross-service delivery needs @nestjs/microservices or Kafka. Worth it on a rich domain; on plain CRUD it is three extra files per operation.
The bridge between your app and the Nest Devtools web UI: it renders the module and dependency graph, shows who injects what, and helps hunt circular and dead imports. Register it in dev mode only - it uploads your application graph to devtools.nestjs.com. Worth knowing: the Devtools service itself is a paid product with a free tier, so the MIT-licensed package buys you little without a subscription. Pays off on large monoliths.
In-process events on EventEmitter2: put @OnEvent('order.created') on a method and call eventEmitter.emit anywhere. Supports wildcard patterns, dot namespaces, async listeners and emitAsync when you need results back. A cheap way to decouple modules without CQRS ceremony. Remember it is one process's memory: no persistence, no retries, no delivery to the pod next door - for that you want a queue or a broker.
GraphQL for Nest in two flavours: code-first (@ObjectType and @Resolver decorators, schema generated from classes) and schema-first (write SDL, get types). The driver is a separate package - @nestjs/apollo or @nestjs/mercurius. Supports Apollo Federation, subscriptions over graphql-ws and type generation via ts-morph. v14 requires Nest 12 and graphql 16.11+. Steeper than REST controllers, but schema and types never drift apart.
Utilities for derived DTOs: PartialType, PickType, OmitType, IntersectionType. Write CreateUserDto once and get UpdateUserDto as PartialType(CreateUserDto), keeping class-validator and class-transformer decorators intact. Important: if your project uses @nestjs/swagger or @nestjs/graphql, import the same-named helpers from those packages instead or you lose schema metadata. You rarely install it directly - it arrives transitively.