NETROOM
Крупная новость: TypeORM наконец вышел из бесконечной 0.3.x - в сентябре 2026 опубликован 1.1.1, а старая ветка 0.3.31 живёт под тегом legacy. По сути тот же Data Mapper: репозитории, QueryBuilder, миграции, десяток диалектов вместе с MongoDB. Требует Node 20.19+ и включённых декораторов с emitDecoratorMetadata. Исторические болячки - слабоватая типизация возвращаемых значений и сюрпризы с каскадами - никуда не делись. Для нового проекта с одной базой у Prisma и Drizzle предсказуемее и типы, и миграции.
Тонкая обёртка над jsonwebtoken: JwtService с sign/signAsync/verify/decode, секрет и опции задаются в JwtModule.register или асинхронно через registerAsync с доступом к ConfigService. Токены за вас не проверяет - это работа гварда, обычно в паре с @nestjs/passport и passport-jwt. Если нужны JWK, EdDSA или ротация ключей, смотрите jose: тут упрётесь в ограничения jsonwebtoken. Совместим с Nest с 8-й по 12-ю.
Очереди задач на Redis: повторы, задержки, приоритеты, flow-графы, rate limit, воркеры в отдельных процессах. Написана на TypeScript, прямой наследник Bull от тех же авторов. В шестой версии ioredis перестал быть единственным клиентом - можно взять node-redis, а как хранилище появился Postgres (pg, redis и ioredis идут опциональными peer-зависимостями, ставишь только нужное). Есть платная BullMQ Pro с группами и батчами. В Nest подключают через @nestjs/bullmq.
JSON-логгер, который не тормозит горячий путь: пишет в stdout одной строкой, а форматирование и доставку выносит в отдельный поток через транспорты. В бенчмарках заметно быстрее winston - ради этого его и берут. Человекочитаемый вывод в разработке даёт отдельный пакет pino-pretty, в проде его не подключают. Для Nest есть готовая обвязка nestjs-pino: подменяет штатный Logger и тащит request id по всему запросу. Десятая мажорная версия вышла в феврале 2026, сам пакет по-прежнему CommonJS.
Собирает OpenAPI-схему из DTO и декораторов контроллеров и поднимает Swagger UI на выбранном пути. Тянет swagger-ui-dist внутри себя, так что swagger-ui-express отдельно не нужен. В паре с class-validator правила валидации сами попадают в схему, а CLI-плагин дописывает типы из TypeScript и экономит половину декораторов - но требует правки nest-cli.json. В 12-й ветке подтянут @standard-schema/spec, то есть схемы из Zod описываются без прослоек. Версия строго под Nest 12.
Ядро Apollo GraphQL для сервера: разбор запросов, схема, плагины, кэш, трассировка. С версии 4 это уже не HTTP-сервер, а движок - веб-слой подключаешь интеграцией (Express 5, Fastify, standalone). Версия 5 требует Node 20+ и graphql 16.11+, старые apollo-server-express и apollo-server-koa мертвы, миграция обязательна. В Nest напрямую его ставят редко: берут @nestjs/apollo, он держит @apollo/server как peer. Вне экосистемы Apollo альтернативы - graphql-yoga и mercurius.
Обёртка над DiscoveryService из Nest, которая делает ровно то, за чем к ней приходят: находит все провайдеры и хендлеры, помеченные твоим декоратором. Пишешь собственный декоратор в духе @OnEvent - этот пакет соберёт метаданные за один вызов вместо ручного обхода контейнера. Нужен в основном авторам библиотек и внутренних платформенных модулей, в обычном фиче-коде избыточен. Peer-зависимости - @nestjs/core и @nestjs/common 11.x, под Nest 12 проверяй совместимость.
RabbitMQ в Nest по-человечески: декораторы @RabbitSubscribe и @RabbitRPC, свои обмены и routing keys, dead-letter, конкурентность на каждый хендлер. Главная причина брать вместо встроенного RMQ-транспорта @nestjs/microservices - контроль: там топология спрятана и навязан свой формат сообщения, здесь дизайн обменов твой. Внутри amqplib 0.10 и amqp-connection-manager 5, то есть реконнект из коробки. Peer-зависимости нацелены на Nest 11.x, сверяй перед апгрейдом.
Одна по-настоящему полезная функция - createMock<T>(), которая делает типизированный мок любого интерфейса или класса, включая вложенные объекты, без ручного перечисления методов. В тестах Nest это снимает боль моков ExecutionContext, Repository и сервисов с десятком методов. Заточена под Jest: возвращает jest.fn() и живёт на его матчерах, для Vitest нужен другой инструмент. Пакет маленький и релизится редко ровно потому, что API давно устоялся.
Redis-адаптер для Keyv на официальном клиенте node-redis 5. Умеет namespace отдельными пространствами ключей, кластер (внутри cluster-key-slot) и приём готового инстанса клиента, если соединение уже есть. Именно пара keyv плюс @keyv/redis заменила старые сторы cache-manager-redis-* после cache-manager v6. Пакет дуальный, ESM и CJS, peer - keyv 5.x. Учти: ioredis здесь не используется, так что проект на ioredis получит в зависимостях два разных Redis-клиента.
TypeScript ORM на паттернах Data Mapper, Unit of Work и Identity Map - в отличие от Active Record у TypeORM, сущности живут в EntityManager, а изменения улетают в базу одним flush(). Ловит рассинхрон типов на компиляции, умеет Postgres, MySQL, MariaDB, SQLite и MongoDB. Седьмая версия подняла планку до Node 22.17+, для старых окружений это стоп-фактор. Драйвер ставится отдельным пакетом (@mikro-orm/postgresql и подобные), CLI тоже отдельно.
Мост между MikroORM и Nest: MikroOrmModule.forRoot и forFeature, инъекция EntityManager и репозиториев, request-scoped контекст на AsyncLocalStorage - без него EntityManager расшарился бы между запросами и Identity Map поплыла бы. Версия 7 требует @mikro-orm/core 7 и Nest 11 или 12. Драйвер базы ставится отдельно. По устройству это тот же слой, что @nestjs/typeorm, только под другую модель работы с сущностями.
Клиент NATS для Node - pub/sub, request-reply, JetStream. Пакет помечен deprecated: разработка переехала в монорепозиторий nats.js, ставить нужно @nats-io/transport-node плюс отдельные @nats-io/jetstream и @nats-io/kv. Старое имя застыло на 2.29.x и обновлений не получает. Новый сервис поднимаешь сразу на новых пакетах: модульная раскладка, меньше веса. NATS-транспорт @nestjs/microservices всё ещё завязан на старое имя - проверь это перед апгрейдом.
Отправка писем через nodemailer с шаблонами: Handlebars, Pug, EJS, Liquid или MJML на выбор, инлайнинг CSS встроен. MailerModule.forRootAsync берёт SMTP-настройки из ConfigService, дальше mailerService.sendMail с именем шаблона и контекстом. Пакет community, не от команды Nest, но живой - релизы идут и в 2026-м. Опциональных peer-зависимостей навалом: ставьте только нужный шаблонизатор, иначе npm будет ругаться.
Драйвер Apollo для @nestjs/graphql: связывает схему, резолверы и Nest-DI с движком @apollo/server. Ставится вместе с @nestjs/graphql, graphql и @apollo/server - все три идут peer-зависимостями, версии должны сходиться (14.x под Nest 12 и Apollo Server 5). Отсюда же берётся федерация: @apollo/gateway и @apollo/subgraph подключаются опционально. Если Apollo не нужен, у Nest есть @nestjs/mercurius под Fastify. Работает и code-first, и schema-first.
Обёртка над axios в виде инжектируемого HttpService: методы возвращают rxjs-Observable, а не Promise, так что запросы удобно комбинировать с retry, timeout и takeUntil. Если Observable не нужен, дёргайте firstValueFrom - или вообще берите голый axios либо fetch, модуль больше ничего не добавляет. axios идёт отдельной peer-зависимостью, версию пиньте сами. С Nest 12 пакет стал чистым ESM и требует Node 20.19+/22.12+/24.
Модуль для классического Bull: очереди на Redis, декораторы @Processor и @Process, регистрация воркеров через BullModule.registerQueue. Сам Nest-пакет живой и обновлён под Nest 12, а вот bull последний релиз выпустил в декабре 2024 - автор давно перевёл развитие на BullMQ. Брать стоит, только если проект уже сидит на Bull и мигрировать некуда. Для новых сервисов сразу берите @nestjs/bullmq: там и API богаче.
Тот же репозиторий, что и @nestjs/bull, но под BullMQ - переписанный на TypeScript преемник Bull от того же автора. Даёт flows (родительские и дочерние задачи), rate limiting, воркеры в отдельных процессах и внятную типизацию payload. Декораторы другие: @Processor на классе-наследнике WorkerHost вместо методов @Process. Нужен Redis 6.2+, bullmq ставится отдельно как peer. Дефолтный выбор для очередей на Nest сегодня.
Кэш поверх cache-manager: декораторы @CacheKey и @CacheTTL, CacheInterceptor, который мемоизирует GET-роуты, и инжектируемый CACHE_MANAGER. С третьей мажорной версии под капотом cache-manager 6+ и Keyv, так что стор для Redis подключается через keyv-адаптер, а не старые cache-manager-redis-store. Хорош для простого кэша ответов; для инвалидации по тегам и хитрых стратегий проще ходить в ioredis напрямую.
CLI фреймворка: nest new, nest generate для контроллеров, сервисов и модулей, nest build и nest start --watch. Собирает через tsc по умолчанию, но умеет SWC (-b swc, в разы быстрее) и webpack/rspack ради монорепо и HMR. Раскладка монорепозитория тоже его зона: nest generate app/library. Ставится в devDependencies, требует Node 20.11+. Прожить можно и без него, но schematics и watch-режим экономят кучу времени.
Сердце публичного API Nest: декораторы (@Module, @Injectable, @Controller, @Get), пайпы, гварды, интерцепторы, фильтры исключений, HttpException и встроенная валидация. Ставится вместе с @nestjs/core, отдельно смысла не имеет. В 12-й версии пакет переехал на ESM, а class-validator и class-transformer стали опциональными peer: через Standard Schema теперь можно валидировать хоть Zod, хоть Valibot вместо декораторов.
Конфиг из .env и не только: ConfigModule.forRoot читает файлы через dotenv, ConfigService отдаёт значения с типами, а registerAs собирает namespace-конфиг под конкретный модуль. Валидацию схемы вешают на Joi или, начиная с 12-й версии, на любой Standard Schema - Zod, Valibot. Кэширование и expandVariables включаются флагами. Альтернатива - руками читать process.env, но тогда теряете проверку на старте.
Рантайм фреймворка: IoC-контейнер, сканер модулей, разрешение зависимостей, жизненный цикл приложения, NestFactory. Сам по себе HTTP не поднимает - нужен адаптер платформы, @nestjs/platform-express или platform-fastify. Опирается на reflect-metadata и декораторы, так что TypeScript с emitDecoratorMetadata обязателен. Nest 12 требует Node 20+ и поставляется как ESM; апгрейд с 10/11 не бесплатный, читайте migration guide.
CQRS без тяжёлой инфраструктуры: команды, запросы, события и саги на rxjs, всё внутри одного процесса. CommandBus и QueryBus разводят запись и чтение по разным хендлерам, EventBus вместе с сагами даёт реакции цепочкой. Это не брокер и не event store - при перезапуске события теряются, для доставки между сервисами нужен @nestjs/microservices или Kafka. Оправдан на сложном домене; на CRUD это три лишних файла на операцию.
Мост между приложением и веб-интерфейсом Nest Devtools: рисует граф модулей и зависимостей, показывает, кто кого инжектит, помогает искать циклы и мёртвые импорты. Подключают только в dev-режиме, наружу уходит схема приложения на devtools.nestjs.com. Заметьте: сам сервис Devtools платный (есть бесплатный тариф), пакет под MIT, но без подписки пользы немного. На больших монолитах граф окупается быстро.
Внутрипроцессные события поверх EventEmitter2: вешаете @OnEvent('order.created') на метод и зовёте eventEmitter.emit откуда угодно. Есть wildcard-паттерны, namespace через точку, асинхронные слушатели и emitAsync, когда нужен результат. Дешёвый способ развязать модули без CQRS-церемоний. Помните, что это память одного процесса: ни персистентности, ни ретраев, ни доставки в соседний под - для этого очередь или брокер.
GraphQL для Nest в двух подходах: code-first (декораторы @ObjectType и @Resolver, схема генерируется из классов) и schema-first (пишете SDL, получаете типы). Драйвер выбираете отдельно - @nestjs/apollo или @nestjs/mercurius. Умеет федерацию Apollo, подписки через graphql-ws, генерацию типов на ts-morph. Версия 14 требует Nest 12 и graphql 16.11+. Порог входа выше, чем у REST-контроллеров, зато схема и типы не расходятся.
Утилиты для производных DTO: PartialType, PickType, OmitType, IntersectionType. Пишете CreateUserDto один раз, а UpdateUserDto получаете как PartialType(CreateUserDto) - с сохранением декораторов class-validator и class-transformer. Важно: если в проекте есть @nestjs/swagger или @nestjs/graphql, берите одноимённые функции оттуда, иначе потеряете метаданные схемы. Отдельно ставить обычно не нужно, он приезжает транзитивно.