NETROOM
Excalidraw - виртуальная доска для схем и диаграмм в стиле «от руки»: наброски архитектуры, user flow, wireframes и всё, что проще нарисовать, чем описать словами. Работает прямо в браузере, без регистрации: открыл вкладку и рисуешь. Есть библиотеки готовых элементов, экспорт в PNG и SVG, совместное редактирование по ссылке и сквозное шифрование комнат. Файлы можно хранить локально или подключить своё хранилище. Открытый исходный код, есть self-hosted вариант для команд.
Squoosh - сжатие картинок прямо в браузере: перетащил файл, выбрал формат и качество, скачал результат. Ползунок показывает оригинал и сжатую версию рядом, так что видно, где начинают лезть артефакты, и можно остановиться на грани. Форматов много, у каждого свои настройки - от одной ручки качества до параметров самого кодека. Файлы никуда не отправляются: вся работа идёт на вашем устройстве, даже без интернета - приложение ставится как обычное. Сделано командой Google Chrome Labs, открытый код, регистрация не нужна.
«Швейцарский нож» для данных от британского GCHQ. Собираешь цепочку операций - «рецепт» - и прогоняешь через неё текст или файл: base64, XOR, AES, DES, Blowfish, хеши, hexdump, разбор X.509 и IPv6, распаковка архивов, перекодировка. Всё считается прямо в браузере, ничего не улетает на сервер, страницу можно скачать и открыть офлайн. Лицензия Apache 2.0 плюс Crown Copyright. Незаменим при разборе логов, дампов и подозрительных payload-ов.
Швейцарский нож для PDF в браузере, но на своём сервере: слить и разрезать, повернуть, сжать, конвертировать в офисные форматы и обратно, распознать текст через OCR, подписать, заредактировать чувствительные куски, собрать цепочку операций через REST API. Больше пятидесяти инструментов. Смысл в том, что файлы не уезжают в чужое облако. Поднимается одним docker run, есть десктопный клиент и чарты для Kubernetes. Модель open-core: ядро открыто, часть возможностей в платных Server и Enterprise планах.
Ставит защитные HTTP-заголовки одним app.use(): CSP, HSTS, X-Content-Type-Options, Referrer-Policy, Cross-Origin-*. Дефолты разумные, но CSP почти всегда придётся править под свой фронт, иначе поедут инлайновые скрипты и сторонние виджеты. Версия 8 требует Node 18+, собрана дуально (ESM и CJS), зависимостей нет. В Nest подключают через app.use() до роутов, с Fastify берут @fastify/helmet. Эти же заголовки можно раздавать с реверс-прокси - тогда helmet не нужен.
Обёртка над DiscoveryService из Nest, которая делает ровно то, за чем к ней приходят: находит все провайдеры и хендлеры, помеченные твоим декоратором. Пишешь собственный декоратор в духе @OnEvent - этот пакет соберёт метаданные за один вызов вместо ручного обхода контейнера. Нужен в основном авторам библиотек и внутренних платформенных модулей, в обычном фиче-коде избыточен. Peer-зависимости - @nestjs/core и @nestjs/common 11.x, под Nest 12 проверяй совместимость.
CLI-приложения на Nest: декораторы @Command и @Option поверх commander, а внутри команды работает обычный DI - те же сервисы, что и в HTTP-части. Удобно для миграций, сидов и разовых обслуживающих скриптов, когда поднимать отдельный проект лень. Есть обёртка над inquirer для интерактивных вопросов, она тянет @types/inquirer как peer. Альтернатива - NestFactory.createApplicationContext() и разбор argv руками, но парсинг и help тогда на тебе. Поддерживает Nest с 8 по 12.
Continuation-local storage поверх AsyncLocalStorage, аккуратно завёрнутый в DI. Кладёте request-id, юзера или tenant в ClsService один раз в middleware и достаёте в любом сервисе, не таща контекст параметром через десять слоёв. Есть типизированный store и транзакционные плагины для Prisma, TypeORM и Kysely. Учтите: peer-диапазон пока @nestjs/core >=10 <12, на Nest 12 придётся ставить с --legacy-peer-deps или ждать релиза.
Контракт на Zod описывается один раз и служит обеим сторонам: Nest-контроллер реализует его, а компилятор проверяет пути, тела и ответы. Выигрыш перед голым @nestjs/swagger в том, что фронтенд получает типизированный клиент, а не сгенерированный по OpenAPI код, который надо пересобирать. Минус серьёзный: релиз 3.52.1 висит с марта 2025, в peer-зависимостях Nest до 11 и только Zod 3 - на Zod 4 и Nest 12 переезжает с оговорками. Если весь стек на TypeScript, посмотрите ещё и на tRPC.
Разбирает multipart/form-data - загрузку файлов на Express и, значит, на Nest, где FileInterceptor это тонкая обёртка ровно над ним. Пишет в память или на диск; большие файлы в память класть нельзя, процесс ляжет по RAM. Ветка 2.x вышла после серии CVE в 1.x, обновиться обязательно. Лимиты по размеру и количеству ставь всегда, дефолтов почти нет. У Fastify свой путь - @fastify/multipart. Если файлы едут в S3, разумнее presigned URL мимо приложения.
Локализация ответов бэкенда: переводы в JSON или YAML, резолверы языка из заголовка Accept-Language, query, куки или своего хедера. I18nService.translate работает и в сервисах, и в фильтрах ошибок, есть связка с class-validator - сообщения валидации переводятся тоже. Форматирование через ICU MessageFormat, генерация типов для ключей. Требует Node 22+. Фронтовому i18next это не замена, зона ответственности - серверные строки.
Отправка писем через nodemailer с шаблонами: Handlebars, Pug, EJS, Liquid или MJML на выбор, инлайнинг CSS встроен. MailerModule.forRootAsync берёт SMTP-настройки из ConfigService, дальше mailerService.sendMail с именем шаблона и контекстом. Пакет community, не от команды Nest, но живой - релизы идут и в 2026-м. Опциональных peer-зависимостей навалом: ставьте только нужный шаблонизатор, иначе npm будет ругаться.
Одна по-настоящему полезная функция - createMock<T>(), которая делает типизированный мок любого интерфейса или класса, включая вложенные объекты, без ручного перечисления методов. В тестах Nest это снимает боль моков ExecutionContext, Repository и сервисов с десятком методов. Заточена под Jest: возвращает jest.fn() и живёт на его матчерах, для Vitest нужен другой инструмент. Пакет маленький и релизится редко ровно потому, что API давно устоялся.
Трансформер, который прогоняет TypeScript через настоящий tsc для Jest: полная проверка типов прямо в тестах, path-алиасы из tsconfig и корректные source maps в стеке ошибок. Именно он стоит в шаблоне nest new. Плата - скорость: на большом наборе он заметно медленнее, чем @swc/jest или esbuild, которые типы просто выбрасывают. Версия 29.4.12 от июля 2026, дружит с Jest 29 и 30, TypeScript вплоть до 6.x. Режим ESM настраивается, но до сих пор требует возни с extensionsToTreatAsEsm.
Гоняет HTTP-запросы прямо по приложению, не занимая порт: передаёте app.getHttpServer() и пишете .get('/users').expect(200). Стандарт e2e-тестов в Nest - лежит в шаблоне nest new вместе с @nestjs/testing. Внутри superagent, отсюда чейнинг и .expect(). Версия 7.2.2 от января 2026, пакет живёт под крылом Ladjs. Типы ставятся отдельно, @types/supertest. Когда нужен настоящий сетевой стек - заголовки от прокси, таймауты, keep-alive - лучше поднять сервер и стучаться обычным fetch.
Внутрипроцессные события поверх EventEmitter2: вешаете @OnEvent('order.created') на метод и зовёте eventEmitter.emit откуда угодно. Есть wildcard-паттерны, namespace через точку, асинхронные слушатели и emitAsync, когда нужен результат. Дешёвый способ развязать модули без CQRS-церемоний. Помните, что это память одного процесса: ни персистентности, ни ретраев, ни доставки в соседний под - для этого очередь или брокер.
CQRS без тяжёлой инфраструктуры: команды, запросы, события и саги на rxjs, всё внутри одного процесса. CommandBus и QueryBus разводят запись и чтение по разным хендлерам, EventBus вместе с сагами даёт реакции цепочкой. Это не брокер и не event store - при перезапуске события теряются, для доставки между сервисами нужен @nestjs/microservices или Kafka. Оправдан на сложном домене; на CRUD это три лишних файла на операцию.
Считает запросы по ключу (по умолчанию IP) и отдаёт 429 сверх лимита. Хватает, чтобы прикрыть логин, восстановление пароля и публичный API. По умолчанию счётчик в памяти процесса - в кластере и на нескольких подах лимит размажется, нужен стор: rate-limit-redis или вариант на Memcached. Версия 8 требует Node 16+ и Express 4.11+, работает и на Express 5. За trust proxy следи сам, иначе за балансировщиком все клиенты слипнутся в один IP. У Nest есть свой @nestjs/throttler.
Express-мидлварь, которая жмёт ответы gzip, deflate или brotli по Accept-Encoding. Полезна, когда Node смотрит в интернет напрямую. Если перед приложением стоит nginx, Cloudflare или ALB - включай сжатие там, оно дешевле и не жжёт event loop на каждом ответе. Отдельная засада: с SSE и стримингом ответ буферизуется, нужен явный flush или фильтр по Content-Type. В Nest работает через app.use(). По engines пакет древний (Node 0.8), но живой и на команде Express.
Rate limiting на уровне гардов: глобальный ThrottlerGuard или точечный декоратор @Throttle, несколько именованных лимитов сразу - короткий и длинный интервал вместе. Работает на Express, Fastify, WebSocket и GraphQL. По умолчанию счётчики лежат в памяти процесса, и для нескольких инстансов нужен внешний сторедж вроде @nest-lab/throttler-storage-redis, иначе лимит молча умножается на число подов. Свежий релиз 6.5.0 от декабря 2025, но в peer-зависимостях пока Nest до 11 - на Nest 12 встаёт с оговорками.
Внимание: пакет помечен как deprecated, npm прямо отправляет на @prometheus-io/client - тот же код переехал под официальную организацию Prometheus, репозиторий prometheus/client_js. Сам клиент делает всё то же: счётчики, гистограммы, gauge, метрики процесса и реестр, который отдаётся на /metrics. Переезжать стоит сразу: API почти не изменился, поменялось имя, но новый пакет требует Node 22 и выше, а старый жил с 16-го. Версия 15.1.3 висит с июня 2024, обновлений там уже не будет.
OpenTelemetry в Nest без ручной обвязки: middleware со стандартными HTTP-метриками, декораторы @Span и @OtelInstanceCounter, доступ к активному спану через TraceService. Сам SDK не поднимает - node-трейсер настраиваете отдельным файлом инструментации, который грузится до бутстрапа. Лицензия Apache-2.0, не MIT, нужен Node 22+. Внимание: peer пока @nestjs/core >=11 <12, официальной поддержки Nest 12 ещё нет.
Официальный SDK Sentry под Nest: ловит необработанные исключения через SentryGlobalFilter, снимает трейсы с контроллеров, провайдеров и очередей, показывает span'ы по HTTP-вызовам и запросам к базе. Инициализация обязательно в отдельном файле instrument.ts, который импортируется самым первым - иначе OpenTelemetry не успеет подцепить инструментацию и трейсы будут пустыми. Релиз 10.73.0 от августа 2026, выходят они чуть ли не еженедельно; в peer-зависимостях пока Nest до 11. Нужен Node 18+, есть ESM-сборка.
Оборачивает prom-client в модуль Nest: PrometheusModule.register() поднимает /metrics, а счётчики и гистограммы объявляются через makeCounterProvider и инжектятся декоратором @InjectMetric. Экономит день возни с реестром и DI. Важная деталь на сегодня: в peer-зависимостях стоит prom-client ^15, а сам prom-client уже помечен deprecated в пользу @prometheus-io/client, и Nest указан до 11-го. Пакет живой, 6.1.0 вышла в марте 2026, но переезд на новый клиент впереди - закладывайте в план. Лицензия Apache-2.0.
Health-checks для Nest: ручка /health с проверками базы, диска, памяти, внешних HTTP-зависимостей и gRPC. Готовые индикаторы под TypeORM, Prisma, Mongoose, Sequelize и MikroORM подключаются опциональными peer-зависимостями, лишнее в бандл не едет. Ответ в формате, который понимают kubelet и балансировщики, поэтому readiness и liveness пробы пишутся за вечер. Версия 12 требует Node 20.19+ и Nest 11 или 12. Своя ручка с try/catch дешевле, но тут уже собран весь набор и единый формат ошибок.
Логгер-комбайн: транспорты в файл, консоль, HTTP и сотню сторонних сервисов, форматтеры, уровни, ротация через winston-daily-rotate-file. Берут ради экосистемы транспортов и когда логи надо разложить сразу по нескольким приёмникам. Платите производительностью: pino быстрее в разы, потому что не форматирует в основном потоке. Версия 3.19.0 от декабря 2025, ветка 3.x стабильна годами, обещанной четвёртой так и нет. В контейнерах файловые транспорты обычно не нужны - пишите JSON в stdout и разбирайте снаружи.
Подсовывает winston вместо встроенного логгера Nest: WinstonModule.createLogger в bootstrap, и все Logger-вызовы фреймворка уходят в твои транспорты - файл, JSON в stdout, Elastic. Нужен, когда логи собирает внешняя система и формат диктует она. Диапазон peer-зависимостей заканчивается на @nestjs/common 11, под Nest 12 проверяй перед тем, как закладываться. Альтернатива, которую сейчас берут чаще, - pino через nestjs-pino: заметно быстрее на JSON и не блокирует event loop.
Клиент 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 всё ещё завязан на старое имя - проверь это перед апгрейдом.