Десятилетие влияния: как наши пакеты npm достигли 1 миллиарда загрузок и сформировали JavaScript

В JavaScript а также Node.js world, некоторые пакеты являются необходимыми — загружаются миллионы раз ежедневно и обеспечивают работу приложений по всему миру. За этими инструментами стоят разработчики, ориентированные на качество открытого исходного кода. Сегодня мы показываем, как наша команда помогает создавать и поддерживать пакеты npm, которые стали ключевыми частями экосистемы JavaScript.

Пионеры, которые нам доверяют: Айзек З. Шлютер и пересылка электронной почты

Мы гордимся тем, что у нас есть Исаак З. Шлютер (GitHub: исаакс) как пользователь. Айзек создал над уровнем моря и помог построить Node.js. Его доверие к Forward Email показывает нашу нацеленность на качество и безопасность. Айзек использует Forward Email для нескольких доменов, включая izs.me.

Влияние Айзека на JavaScript огромно. В 2009 году он был одним из первых, кто увидел потенциал Node.js, работая с Райан Даль, который создал платформу. Как сказал Айзек в интервью журналу Increment: «Посреди этого очень маленького сообщества, состоящего из группы людей, пытающихся понять, как реализовать серверный JS, Райан Даль выступил с Node, что было совершенно очевидно правильным подходом. Я вложил в это свои силы и включился в работу примерно в середине 2009 года».

[!ПРИМЕЧАНИЕ] Для тех, кто интересуется историей Node.js, доступны прекрасные документальные фильмы, описывающие его развитие, в том числе История Node.js а также 10 вещей, о которых я сожалею в Node.js - Райан Даль. Райан Даль личный веб-сайт также содержит ценную информацию о его работе.

От создания npm до лидерства Node.js

Айзек создал npm в сентябре 2009 года, а первая пригодная к использованию версия была выпущена в начале 2010 года. Этот менеджер пакетов заполнил ключевую потребность в Node.js, позволив разработчикам легко обмениваться и повторно использовать код. Согласно Страница Node.js в Википедии, «В январе 2010 года был представлен менеджер пакетов для среды Node.js под названием npm. Менеджер пакетов позволяет программистам публиковать и обмениваться пакетами Node.js вместе с сопутствующим исходным кодом и предназначен для упрощения установки, обновления и удаления пакетов».

Когда Райан Даль ушел из Node.js в январе 2012 года, Айзек занял пост руководителя проекта. Как отмечено на его резюмеОн «руководил разработкой нескольких фундаментальных основных API Node.js, включая модульную систему CommonJS, API файловой системы и потоки» и «выступал в качестве пожизненного благожелательного диктатора (BDFL) проекта в течение 2 лет, обеспечивая постоянное повышение качества и надежности процесса сборки для версий Node.js v0.6 — v0.10».

Айзек провел Node.js через ключевой период роста, установив стандарты, которые и сегодня формируют платформу. Позже в 2014 году он основал npm, Inc. для поддержки реестра npm, который он ранее вел самостоятельно.

Мы благодарим Айзека за его огромный вклад в JavaScript и продолжаем использовать множество созданных им пакетов. Его работа изменила то, как мы создаем программное обеспечение и как миллионы разработчиков по всему миру делятся кодом.

Архитектор кода: путешествие Ника Бо

В основе нашего успеха с открытым исходным кодом лежит Ник Бо, основатель и владелец Forward Email. Его работа в JavaScript длится почти 20 лет и определила, как бесчисленное множество разработчиков создают приложения. Его путь с открытым исходным кодом демонстрирует как технические навыки, так и лидерство в сообществе.

Экспресс-технический комитет и основные вклады

Опыт Ника в области веб-фреймворков позволил ему занять место в Экспресс Технический Комитет, где он помог с одним из самых используемых фреймворков Node.js. Ник теперь указан как неактивный участник на Страница сообщества Express.

[!ВАЖНО] Express изначально был создан TJ Holowaychuk, плодовитым участником открытого исходного кода, который сформировал большую часть экосистемы Node.js. Мы благодарны за основополагающую работу TJ и уважаем его решение сделать перерыв из его обширного вклада в разработку ПО с открытым исходным кодом.

Как член Экспресс Технический КомитетНик проявил большое внимание к деталям в таких вопросах, как разъяснение req.originalUrl документирование и устранение проблем с обработкой многокомпонентных форм.

Вклад в фреймворк Koa

Работа Ника с Фреймворк Koa—современная, более легкая альтернатива Express, также созданная TJ Holowaychuk — еще раз демонстрирует его приверженность к улучшению инструментов веб-разработки. Его вклад в Koa включает как проблемы, так и код через pull-запросы, решение проблем с обработкой ошибок, управление типами контента и улучшения документации.

Его работа в Express и Koa дает ему уникальный взгляд на веб-разработку Node.js, помогая нашей команде создавать пакеты, которые хорошо работают с различными экосистемами фреймворков.

От индивидуального участника до руководителя организации

То, что начиналось как помощь существующим проектам, переросло в создание и поддержку целых экосистем пакетов. Ник основал несколько организаций GitHub, включая Кабина, Спам сканер, Пересылать сообщения электронной почты, Позволять, а также Бри— каждый из которых решает определенные потребности сообщества JavaScript.

Этот переход от участника к лидеру демонстрирует видение Ника в отношении хорошо спроектированного программного обеспечения, которое решает реальные проблемы. Организовывая связанные пакеты в рамках специализированных организаций GitHub, он создал экосистемы инструментов, которые работают вместе, оставаясь модульными и гибкими для более широкого сообщества разработчиков.

Наши организации GitHub: экосистемы инноваций

Мы организуем нашу работу с открытым исходным кодом вокруг специализированных организаций GitHub, каждая из которых решает определенные потребности в JavaScript. Эта структура создает сплоченные семейства пакетов, которые хорошо работают вместе, оставаясь модульными.

Кабина: Структурированное ведение журнала для современных приложений

Организация каюты это наш взгляд на простую, мощную регистрацию приложений. Основной cabin Пакет имеет почти 900 звезд GitHub и более 100 000 еженедельных загрузок[^1]. Cabin обеспечивает структурированное ведение журнала, которое работает с популярными сервисами, такими как Sentry, LogDNA и Papertrail.

Что делает Cabin особенным, так это его продуманный API и система плагинов. Поддерживающие пакеты, такие как axe для Express промежуточного программного обеспечения и parse-request для анализа HTTP-запросов демонстрируют нашу приверженность комплексным решениям, а не изолированным инструментам.

bson-objectid Пакет заслуживает особого упоминания, с более чем 1,7 миллиона загрузок всего за два месяца[^2]. Эта легкая реализация MongoDB ObjectID стала выбором для разработчиков, которым нужны идентификаторы без полных зависимостей MongoDB.

Спам-сканер: борьба со злоупотреблениями электронной почтой

Организация спам-сканера показывает нашу приверженность решению реальных проблем. Главное spamscanner Пакет обеспечивает расширенное обнаружение спама в электронной почте, но это url-regex-safe пакет, который получил удивительное распространение.

За два месяца было скачано более 1,2 миллиона раз[^3], url-regex-safe исправляет критические проблемы безопасности в других регулярных выражениях обнаружения URL. Этот пакет демонстрирует наш подход к открытому исходному коду: поиск общей проблемы (в данном случае, RedoS уязвимости в проверке URL-адресов), создание надежного решения и его тщательная поддержка.

Бри: Современное планирование работы с рабочими потоками

Организация Бри это наш ответ на распространенную проблему Node.js: надежное планирование заданий. Главное bree Пакет, получивший более 3100 звезд на GitHub, представляет собой современный планировщик заданий, использующий рабочие потоки Node.js для повышения производительности и надежности.

[!ПРИМЕЧАНИЕ] Бри была создана после того, как мы помогли сохранить Повестка дня, применение извлеченных уроков для создания лучшего планировщика заданий. Наши вклады в Agenda помогли нам найти способы улучшить планирование заданий.

Чем Bree отличается от других планировщиков, таких как Agenda:

  • Никаких внешних зависимостей: В отличие от Agenda, которой требуется MongoDB, Bree не требует Redis или MongoDB для управления состоянием задания.
  • Рабочие потоки: Бри использует рабочие потоки Node.js для изолированных процессов, обеспечивая лучшую изоляцию и производительность.
  • Простой API: Bree предлагает детальный контроль и простоту, что упрощает реализацию сложных задач планирования.
  • Встроенная поддержка: Такие функции, как плавная перезагрузка, задания cron, даты и удобное для пользователя время, включены по умолчанию.

Бри является ключевой частью forwardemail.net, обрабатывая критические фоновые задачи, такие как обработка электронной почты, очистка и плановое обслуживание. Использование Bree в Forward Email показывает нашу приверженность использованию собственных инструментов в производстве, гарантируя, что они соответствуют высоким стандартам надежности.

Мы также используем и ценим другие замечательные пакеты рабочих потоков, такие как бассейн и HTTP-клиенты, такие как одиннадцать. Piscina, как и Bree, использует рабочие потоки Node.js для эффективной обработки задач. Мы благодарим Мэтью Хилл, который поддерживает undici и piscina, за его значительный вклад в Node.js. Маттео входит в Технический руководящий комитет Node.js и значительно улучшил возможности HTTP-клиента в Node.js.

Пересылка электронной почты: инфраструктура электронной почты с открытым исходным кодом

Наш самый амбициозный проект — Пересылать сообщения электронной почты, служба электронной почты с открытым исходным кодом, которая обеспечивает пересылку электронной почты, хранение и API-сервисы. Основной репозиторий имеет более 1100 звезд GitHub[^4], что показывает признательность сообщества за эту альтернативу фирменным службам электронной почты.

preview-email Пакет этой организации, с более чем 2,5 миллионами загрузок за два месяца[^5], стал важным инструментом для разработчиков, работающих с шаблонами электронной почты. Предоставляя простой способ предварительного просмотра писем во время разработки, он решает распространенную проблему при создании приложений с поддержкой электронной почты.

Lad: Основные утилиты и инструменты Koa

Парни организация предоставляет набор необходимых утилит и инструментов, в первую очередь направленных на улучшение экосистемы фреймворка Koa. Эти пакеты решают общие проблемы в веб-разработке и предназначены для бесперебойной работы вместе, оставаясь при этом полезными независимо.

koa-better-error-handler: Улучшенная обработка ошибок для Koa

koa-better-error-handler предлагает лучшее решение для обработки ошибок в приложениях Koa. С более чем 50 звездами GitHub этот пакет делает ctx.throw создавать понятные сообщения об ошибках, устраняя при этом ряд ограничений встроенного обработчика ошибок Koa:

  • Обнаруживает и правильно обрабатывает ошибки DNS Node.js, ошибки Mongoose и ошибки Redis
  • Использует Бум для создания последовательных, хорошо отформатированных ответов об ошибках
  • Сохраняет заголовки (в отличие от встроенного обработчика Koa)
  • Поддерживает соответствующие коды статуса, а не 500 по умолчанию
  • Поддерживает мгновенные сообщения и сохранение сеанса
  • Предоставляет списки ошибок HTML для ошибок проверки
  • Поддерживает несколько типов ответов (HTML, JSON и простой текст)

Этот пакет особенно ценен при использовании вместе с koa-404-handler для комплексного управления ошибками в приложениях Koa.

паспорт: Аутентификация для Лада

@ladjs/passport расширяет популярное промежуточное ПО аутентификации Passport.js с помощью специальных улучшений для современных веб-приложений. Этот пакет поддерживает несколько стратегий аутентификации из коробки:

  • Локальная аутентификация с помощью электронной почты
  • Войти с помощью Apple
  • Аутентификация GitHub
  • Google-аутентификация
  • Аутентификация с помощью одноразового пароля (OTP)

Пакет обладает высокой степенью настраиваемости, позволяя разработчикам корректировать имена полей и фразы в соответствии с требованиями их приложений. Он разработан для бесшовной интеграции с Mongoose для управления пользователями, что делает его идеальным решением для приложений на основе Koa, которым требуется надежная аутентификация.

graceful: элегантное завершение работы приложения

@ladjs/graceful решает критическую задачу изящного завершения приложений Node.js. С более чем 70 звездами GitHub этот пакет гарантирует, что ваше приложение может быть завершено чисто, без потери данных или зависания соединений. Основные функции включают:

  • Поддержка корректного закрытия HTTP-серверов (Express/Koa/Fastify)
  • Чистое завершение соединений с базой данных (MongoDB/Mongoose)
  • Правильное закрытие клиентов Redis
  • Обработка планировщиков заданий Bree
  • Поддержка пользовательских обработчиков завершения работы
  • Настраиваемые параметры тайм-аута
  • Интеграция с системами регистрации

Этот пакет необходим для производственных приложений, где неожиданные отключения могут привести к потере или повреждению данных. Внедряя надлежащие процедуры отключения, @ladjs/graceful помогает обеспечить надежность и стабильность вашего приложения.

Upptime: Мониторинг времени безотказной работы с открытым исходным кодом

Организация безотказной работы представляет нашу приверженность прозрачному мониторингу с открытым исходным кодом. Основной upptime Репозиторий имеет более 13 000 звезд GitHub, что делает его одним из самых популярных проектов, в которые мы вносим свой вклад. Upptime предоставляет монитор времени безотказной работы на базе GitHub и страницу статуса, которая работает полностью без сервера.

Мы используем Upptime для нашей собственной страницы статуса https://status.forwardemail.net с исходным кодом, доступным по адресу https://github.com/forwardemail/status.forwardemail.net.

Особенным Upptime делает его архитектура:

  • 100% открытый исходный код: Каждый компонент имеет полностью открытый исходный код и может быть настроен.
  • При поддержке GitHub: использует действия, проблемы и страницы GitHub для решения бессерверного мониторинга.
  • Сервер не требуется: В отличие от традиционных инструментов мониторинга, Upptime не требует от вас запуска или обслуживания сервера.
  • Автоматическая страница статуса: Создает красивую страницу статуса, которую можно разместить на GitHub Pages.
  • Мощные уведомления: Интегрируется с различными каналами уведомлений, включая электронную почту, SMS и Slack.

Чтобы улучшить опыт наших пользователей, мы интегрировали @octokit/core в кодовую базу forwardemail.net для отображения обновлений статуса и инцидентов в реальном времени непосредственно на нашем веб-сайте. Эта интеграция обеспечивает нашим пользователям четкую прозрачность в случае возникновения любых проблем во всем нашем стеке (веб-сайт, API, MongoDB, Redis, SQLite, SMTP, POP3, IMAP, Bree и т. д.) с мгновенными уведомлениями, изменениями значков значков, цветами предупреждений и многим другим.

Библиотека @octokit/core позволяет нам получать данные в реальном времени из нашего репозитория Upptime GitHub, обрабатывать их и отображать в удобном для пользователя виде. Когда какой-либо сервис выходит из строя или производительность снижается, пользователи немедленно уведомляются об этом с помощью визуальных индикаторов, не покидая основное приложение. Эта бесшовная интеграция гарантирует, что наши пользователи всегда будут иметь актуальную информацию о состоянии нашей системы, что повышает прозрачность и доверие.

Upptime был принят сотнями организаций, которые ищут прозрачный и надежный способ мониторинга своих услуг и сообщения статуса пользователям. Успех проекта демонстрирует силу создания инструментов, которые используют существующую инфраструктуру (в данном случае GitHub) для решения распространенных проблем новыми способами.

Наш вклад в экосистему пересылки электронной почты

Хотя наши пакеты с открытым исходным кодом используются разработчиками по всему миру, они также формируют основу нашей собственной службы пересылки электронной почты. Эта двойная роль — как создателей, так и пользователей этих инструментов — дает нам уникальный взгляд на их реальное применение и стимулирует постоянное совершенствование.

От упаковок до производства

Путь от отдельных пакетов к целостной производственной системе включает в себя тщательную интеграцию и расширение. Для пересылки электронной почты этот процесс включает:

  • Пользовательские расширения: Создание расширений Forward Email, специально предназначенных для наших пакетов с открытым исходным кодом, которые отвечают нашим уникальным требованиям.
  • Модели интеграции: Разработка шаблонов взаимодействия этих пакетов в производственной среде.
  • Оптимизация производительности: Выявление и устранение узких мест в производительности, которые возникают только при масштабировании.
  • Усиление безопасности: Добавление дополнительных уровней безопасности, специфичных для обработки электронной почты и защиты пользовательских данных.

Эта работа представляет собой тысячи часов разработки, выходящие за рамки основных пакетов, что привело к созданию надежного и безопасного сервиса электронной почты, использующего лучшие из наших вкладов в области ПО с открытым исходным кодом.

Цикл обратной связи

Возможно, наиболее ценным аспектом использования наших собственных пакетов в производстве является создаваемый им цикл обратной связи. Когда мы сталкиваемся с ограничениями или пограничными случаями в пересылке электронной почты, мы не просто исправляем их локально — мы улучшаем базовые пакеты, принося пользу как нашему сервису, так и более широкому сообществу.

Такой подход привел к многочисленным улучшениям:

  • Изящное отключение Бри: Потребность Forward Email в развертывании с нулевым временем простоя привела к расширению возможностей постепенного завершения работы в Бри.
  • Распознавание образов спам-сканером: Реальные образцы спама, встречающиеся в пересылаемых сообщениях электронной почты, легли в основу алгоритмов обнаружения спам-сканера.
  • Оптимизация производительности кабины: Массовая регистрация в производственных условиях выявила возможности оптимизации в Cabin, которые приносят пользу всем пользователям.

Поддерживая этот эффективный цикл между нашей работой с открытым исходным кодом и производственным сервисом, мы гарантируем, что наши пакеты остаются практичными, проверенными в бою решениями, а не теоретическими реализациями.

Основные принципы пересылки электронных писем: основа совершенства

Пересылка электронной почты разработана в соответствии с набором основных принципов, которые направляют все наши решения по разработке. Эти принципы, подробно описанные на нашем веб-сайт, гарантируем, что наш сервис останется удобным для разработчиков, безопасным и ориентированным на конфиденциальность пользователей.

Всегда дружелюбен к разработчикам, ориентирован на безопасность и прозрачен

Наш первый и главный принцип — создавать программное обеспечение, удобное для разработчиков, при этом сохраняя самые высокие стандарты безопасности и конфиденциальности. Мы считаем, что техническое совершенство никогда не должно идти в ущерб удобству использования, и что прозрачность укрепляет доверие в нашем сообществе.

Этот принцип проявляется в нашей подробной документации, четких сообщениях об ошибках и открытом общении как об успехах, так и о проблемах. Открывая исходный код всей нашей кодовой базы, мы приглашаем к проверке и сотрудничеству, укрепляя как наше программное обеспечение, так и более широкую экосистему.

Соблюдение проверенных временем принципов разработки программного обеспечения

Мы следуем нескольким устоявшимся принципам разработки программного обеспечения, которые доказали свою ценность на протяжении десятилетий:

  • MVC: Разделение интересов с помощью шаблона Модель-Представление-Контроллер
  • Философия Unix: Создание модульных компонентов, которые хорошо выполняют одну задачу
  • KISS: Сохраняя простоту и ясность
  • DRY: Не повторяйтесь, продвижение повторного использования кода
  • YAGNI: Вам это не понадобится, избегая преждевременной оптимизации
  • Двенадцать Факторов: Следование лучшим практикам создания современных масштабируемых приложений
  • бритва Оккама: Выбор наиболее простого решения, отвечающего требованиям
  • Догфудинг: Широкое использование нашей собственной продукции

Эти принципы — не просто теоретические концепции, они встроены в нашу ежедневную практику разработки. Например, наша приверженность философии Unix очевидна в том, как мы структурировали наши пакеты npm: небольшие, сфокусированные модули, которые можно объединять для решения сложных проблем.

Ориентирован на скрап-разработчиков, которые не умеют работать самостоятельно

Мы специально нацелены на неорганизованных, неорганизованных и рамен-выгодно разработчик. Этот фокус формирует все: от нашей модели ценообразования до наших технических решений. Мы понимаем трудности создания продуктов с ограниченными ресурсами, потому что мы сами через это прошли.

Этот принцип особенно важен в нашем подходе к открытому исходному коду. Мы создаем и поддерживаем пакеты, которые решают реальные проблемы для разработчиков без корпоративных бюджетов, делая мощные инструменты доступными для всех, независимо от их ресурсов.

Принципы на практике: кодовая база для пересылки электронных писем

Эти принципы четко видны в кодовой базе Forward Email. Наш файл package.json раскрывает продуманный выбор зависимостей, каждая из которых выбрана для соответствия нашим основным ценностям:

  • Пакеты, ориентированные на безопасность, такие как mailauth для аутентификации по электронной почте
  • Удобные для разработчиков инструменты, такие как preview-email для более легкой отладки
  • Модульные компоненты, такие как различные p-* коммунальные услуги от Sindre Sorhus

Последовательно следуя этим принципам на протяжении долгого времени, мы создали сервис, которому разработчики могут доверять свою инфраструктуру электронной почты — безопасный, надежный и соответствующий ценностям сообщества разработчиков ПО с открытым исходным кодом.

Конфиденциальность по замыслу

Конфиденциальность — это не второстепенная идея или маркетинговая функция для пересылки электронной почты, а основополагающий принцип проектирования, который определяет каждый аспект нашего сервиса и кода:

  • Шифрование с нулевым доступом: Мы внедрили системы, которые делают технически невозможным чтение электронных писем пользователей.
  • Минимальный сбор данных: Мы собираем только те данные, которые необходимы для предоставления наших услуг, и ничего более.
  • Прозрачная политика: Наша политика конфиденциальности написана ясным и понятным языком без использования юридического жаргона.
  • Проверка открытого исходного кода: Наша открытая кодовая база позволяет исследователям безопасности проверять наши заявления о конфиденциальности.

Это обязательство распространяется и на наши пакеты с открытым исходным кодом, которые изначально разработаны с учетом лучших практик безопасности и конфиденциальности.

Устойчивый открытый исходный код

Мы считаем, что ПО с открытым исходным кодом нуждается в устойчивых моделях для долгосрочного процветания. Наш подход включает:

  • Коммерческая поддержка: Премиальная поддержка и услуги по нашим инструментам с открытым исходным кодом.
  • Сбалансированное лицензирование: Использование лицензий, защищающих как свободы пользователя, так и устойчивость проекта.
  • Взаимодействие с сообществом: Активное взаимодействие с участниками для создания поддерживающего сообщества.
  • Прозрачные дорожные карты: Делимся нашими планами развития, чтобы пользователи могли планировать соответствующим образом.

Сосредоточившись на устойчивом развитии, мы гарантируем, что наши вклады в разработку программного обеспечения с открытым исходным кодом будут продолжать расти и совершенствоваться с течением времени, а не будут заброшены.

Цифры не лгут: наша ошеломляющая статистика загрузки npm

Когда мы говорим о влиянии программного обеспечения с открытым исходным кодом, статистика загрузок дает ощутимую меру принятия и доверия. Многие из пакетов, которые мы помогаем поддерживать, достигли масштабов, которых мало кто из проектов с открытым исходным кодом достигает, с общим количеством загрузок, исчисляемым миллиардами.

Top npm Packages by Downloads

[!ВАЖНО] Хотя мы гордимся тем, что помогаем поддерживать несколько высокозагружаемых пакетов в экосистеме JavaScript, мы хотим признать, что многие из этих пакетов изначально были созданы другими талантливыми разработчиками. Такие пакеты, как superagent и supertest, изначально были созданы TJ Holowaychuk, чей плодотворный вклад в открытый исходный код сыграл важную роль в формировании экосистемы Node.js.

Взгляд с высоты птичьего полета на наше влияние

Всего за два месяца с февраля по март 2025 года основные пакеты, в которые мы вносим свой вклад и помогаем поддерживать, зафиксировали ошеломляющие показатели загрузок:

[!ПРИМЕЧАНИЕ] Несколько других пакетов, которые мы помогаем поддерживать, но не создавали, имеют еще большее количество загрузок, включая form-data (738M+ загрузок), toidentifier (309M+ загрузок), stackframe (более 116 млн загрузок) и error-stack-parser (113M+ загрузок). Для нас большая честь внести свой вклад в эти пакеты, уважая при этом работу их оригинальных авторов.

Это не просто впечатляющие цифры — они представляют реальных разработчиков, решающих реальные проблемы с кодом, который мы помогаем поддерживать. Каждая загрузка — это пример того, как эти пакеты помогли кому-то создать что-то значимое, от любительских проектов до корпоративных приложений, используемых миллионами.

Package Categories Distribution

Ежедневное воздействие в масштабе

Ежедневные шаблоны загрузок показывают постоянное, высокообъемное использование, с пиками, достигающими миллионов загрузок в день[^13]. Эта последовательность говорит о стабильности и надежности этих пакетов — разработчики не просто пробуют их; они интегрируют их в свои основные рабочие процессы и полагаются на них изо дня в день.

Еженедельные шаблоны загрузок показывают еще более впечатляющие цифры, постоянно колеблясь около десятков миллионов загрузок в неделю[^14]. Это представляет собой огромный след в экосистеме JavaScript, поскольку эти пакеты работают в производственных средах по всему миру.

За пределами голых цифр

Хотя статистика загрузок сама по себе впечатляет, она рассказывает более глубокую историю о доверии, которое сообщество оказывает этим пакетам. Поддержание пакетов в таком масштабе требует непоколебимой приверженности:

  • Обратная совместимость: Изменения должны быть тщательно продуманы, чтобы не нарушить существующие реализации.
  • Безопасность: Поскольку от этих пакетов зависят миллионы приложений, уязвимости безопасности могут иметь далеко идущие последствия.
  • Производительность: В этом масштабе даже незначительные улучшения производительности могут иметь значительные совокупные преимущества.
  • Документация: Понятная и исчерпывающая документация необходима для пакетов, используемых разработчиками всех уровней опыта.

Постоянный рост числа загрузок с течением времени отражает успешное выполнение этих обязательств и укрепление доверия со стороны сообщества разработчиков посредством надежных, хорошо поддерживаемых пакетов.

Поддержка экосистемы: наше спонсорство открытого исходного кода

[!СОВЕТ] Устойчивость открытого исходного кода заключается не только в предоставлении кода, но и в поддержке разработчиков, которые поддерживают критически важную инфраструктуру.

Помимо наших прямых вкладов в экосистему JavaScript, мы гордимся тем, что спонсируем выдающихся участников Node.js, чья работа составляет основу многих современных приложений. Наши спонсорства включают:

Андрис Рейнман: пионер инфраструктуры электронной почты

Андрис Рейнман является создателем Почтовая программа заметок, самая популярная библиотека отправки электронной почты для Node.js с более чем 14 миллионами еженедельных загрузок[^15]. Его работа распространяется на другие критические компоненты инфраструктуры электронной почты, такие как SMTP-сервер, Mailparser, а также WildDuck.

Наша спонсорская поддержка помогает обеспечить постоянное обслуживание и развитие этих важнейших инструментов, обеспечивающих обмен электронными письмами для бесчисленных приложений Node.js, включая нашу собственную службу пересылки электронной почты.

Синдре Сорхус: вдохновитель служебных пакетов

Синдре Сорхус является одним из самых плодовитых разработчиков открытого исходного кода в экосистеме JavaScript, имея на своем счету более 1000 пакетов npm. Его утилиты, такие как p-карта, p-повторить попытку, а также is-поток являются фундаментальными строительными блоками, используемыми во всей экосистеме Node.js.

Спонсируя работу Синдре, мы помогаем поддерживать разработку этих важнейших утилит, которые делают разработку на JavaScript более эффективной и надежной.

Эти спонсорские соглашения отражают нашу приверженность более широкой экосистеме открытого исходного кода. Мы осознаем, что наш собственный успех строится на фундаменте, заложенном этими и другими участниками, и мы стремимся обеспечить устойчивость всей экосистемы.

Выявление уязвимостей безопасности в экосистеме JavaScript

Наша приверженность открытому исходному коду выходит за рамки разработки функций и включает в себя выявление и устранение уязвимостей безопасности, которые могут повлиять на миллионы разработчиков. Некоторые из наших наиболее значительных вкладов в экосистему JavaScript были в сфере безопасности.

Спасение Коа-Роутера

В феврале 2019 года Ник выявил критическую проблему с обслуживанием популярного пакета koa-router. Когда он сообщил о Hacker News, первоначальный разработчик пакета отказался от него, оставив уязвимости безопасности неустраненными, а сообщество — без обновлений.

[!ВНИМАНИЕ] Заброшенные пакеты с уязвимостями безопасности представляют значительную угрозу для всей экосистемы, особенно если их загружают миллионы раз в неделю.

В ответ Ник создал @koa/маршрутизатор и помог предупредить сообщество о ситуации. С тех пор он поддерживает этот критически важный пакет, гарантируя пользователям Koa безопасное, хорошо поддерживаемое решение маршрутизации.

Устранение уязвимостей ReDoS

В 2020 году Ник выявил и устранил критическую проблему Отказ в обслуживании с использованием регулярных выражений (ReDoS) уязвимость в широко используемом url-regex Пакет. Эта уязвимость (SNYK-JS-URLREGEX-569472) может позволить злоумышленникам вызвать отказ в обслуживании, предоставив специально созданные входные данные, которые вызовут катастрофический возврат в регулярном выражении.

Вместо того, чтобы просто исправить существующий пакет, Ник создал url-regex-safe, полностью переписанная реализация, которая устраняет уязвимость, сохраняя совместимость с исходным API. Он также опубликовал всеобъемлющий пост в блоге объяснение уязвимости и способов ее смягчения.

Эта работа демонстрирует наш подход к безопасности: не просто устранение проблем, но и обучение сообщества и предоставление надежных альтернатив, которые предотвратят возникновение подобных проблем в будущем.

Отстаивание безопасности Node.js и Chromium

Ник также активно выступал за улучшение безопасности в более широкой экосистеме. В августе 2020 года он выявил существенную проблему безопасности в Node.js, связанную с обработкой заголовков HTTP, о которой сообщалось в Регистр.

Эта проблема, возникшая из-за патча в Chromium, потенциально может позволить злоумышленникам обойти меры безопасности. Пропаганда Ника помогла обеспечить быстрое решение проблемы, защитив миллионы приложений Node.js от потенциальной эксплуатации.

Обеспечение безопасности инфраструктуры npm

Позже в том же месяце Ник выявил еще одну критическую проблему безопасности, на этот раз в инфраструктуре электронной почты npm. Как сообщается в Регистрnpm не реализовал должным образом протоколы аутентификации электронной почты DMARC, SPF и DKIM, что потенциально позволяло злоумышленникам отправлять фишинговые письма, которые выглядели как отправленные от npm.

Отчет Ника привел к улучшению положения дел в области безопасности электронной почты npm, что позволило защитить миллионы разработчиков, использующих npm для управления пакетами, от потенциальных фишинговых атак.

Наш вклад в экосистему пересылки электронной почты

Forward Email создан на основе нескольких критических проектов с открытым исходным кодом, включая Nodemailer, WildDuck и mailauth. Наша команда внесла значительный вклад в эти проекты, помогая выявлять и устранять глубокие проблемы, которые влияют на доставку и безопасность электронной почты.

Улучшение основных функций Nodemailer

Почтовая программа заметок является основой отправки электронной почты в Node.js, и наш вклад помог сделать ее более надежной:

  • Улучшения SMTP-сервера: Мы исправили ошибки синтаксического анализа, проблемы с обработкой потоков и проблемы с настройкой TLS в компоненте SMTP-сервера[^16][^17].
  • Улучшения почтового парсера: Мы устранили ошибки декодирования последовательности символов и устранили проблемы с парсером, которые могли привести к сбоям обработки электронной почты[^18][^19].

Эти вклады гарантируют, что Nodemailer останется надежной основой для обработки электронной почты в приложениях Node.js, включая пересылку электронной почты.

Расширение аутентификации электронной почты с помощью Mailauth

Майлаут обеспечивает критически важную функциональность аутентификации электронной почты, и наш вклад значительно улучшил ее возможности:

  • Улучшения проверки DKIM: Мы обнаружили и сообщили, что у X/Twitter возникли проблемы с кэшем DNS, из-за которых произошел сбой DKIM для исходящих сообщений, сообщив об этом на Hacker One[^20].
  • Улучшения DMARC и ARC: Мы исправили проблемы с проверкой DMARC и ARC, которые могли приводить к неверным результатам аутентификации[^21][^22].
  • Оптимизация производительности: Мы внесли улучшения, которые повышают производительность процессов аутентификации электронной почты[^23][^24][^25][^26].

Эти улучшения помогают гарантировать точность и надежность аутентификации электронной почты, защищая пользователей от фишинговых и спуфинговых атак.

Ключевые улучшения времени безотказной работы

Наш вклад в Upptime включает:

  • Мониторинг SSL-сертификатов: Мы добавили функцию отслеживания истечения срока действия SSL-сертификата, предотвращая неожиданные простои из-за истекших сертификатов[^27].
  • Поддержка нескольких номеров SMS: Мы реализовали поддержку оповещения нескольких членов команды с помощью SMS при возникновении инцидентов, что позволило сократить время реагирования[^28].
  • Исправления проверки IPv6: Мы исправили проблемы с проверкой подключения IPv6, обеспечив более точный мониторинг в современных сетевых средах[^29].
  • Поддержка темного/светлого режима: Мы добавили поддержку тем, чтобы улучшить пользовательский опыт на страницах статуса[^31].
  • Лучшая поддержка TCP-Ping: Мы улучшили функциональность TCP-пинга, чтобы обеспечить более надежное тестирование соединения[^32].

Эти улучшения не только улучшают мониторинг статуса Forward Email, но и доступны всему сообществу пользователей Upptime, демонстрируя нашу приверженность совершенствованию инструментов, от которых мы зависим.

Клей, который держит все вместе: масштабируемый пользовательский код

Хотя наши пакеты npm и вклад в существующие проекты значительны, именно пользовательский код, который интегрирует эти компоненты, действительно демонстрирует нашу техническую экспертизу. Кодовая база Forward Email представляет собой десятилетие усилий по разработке, начиная с 2017 года, когда проект начинался как бесплатная пересылка электронной почты до объединения в монорепозиторий.

Масштабные усилия по развитию

Масштаб этого кода пользовательской интеграции впечатляет:

  • Всего взносов: Более 3217 коммитов
  • Размер кодовой базы: Более 421 545 строк кода в файлах JavaScript, Pug, CSS и JSON[^33]

Это представляет собой тысячи часов разработки, сеансов отладки и оптимизации производительности. Это «секретный соус», который превращает отдельные пакеты в целостный, надежный сервис, используемый тысячами клиентов ежедневно.

Интеграция основных зависимостей

Кодовая база Forward Email объединяет многочисленные зависимости в единое целое:

  • Обработка электронной почты: Интегрирует Nodemailer для отправки, SMTP-сервер для получения и Mailparser для анализа
  • Аутентификация: Использует Mailauth для проверки DKIM, SPF, DMARC и ARC
  • Разрешение DNS: Использует Tangerine для DNS-over-HTTPS с глобальным кэшированием
  • МХ-соединение: Использует mx-connect с интеграцией Tangerine для надежного подключения к почтовому серверу
  • Планирование работы: Использует Bree для надежной обработки фоновых задач с рабочими потоками
  • Шаблонирование: Использует шаблоны электронной почты для повторного использования таблиц стилей с веб-сайта в коммуникациях с клиентами.
  • Хранение электронной почты: Реализует индивидуально зашифрованные почтовые ящики SQLite с использованием better-sqlite3-multiple-ciphers с шифрованием ChaCha20-Poly1305 для квантово-безопасной конфиденциальности, гарантируя полную изоляцию между пользователями и то, что только пользователь имеет доступ к своему почтовому ящику

Каждая из этих интеграций требует тщательного рассмотрения пограничных случаев, последствий для производительности и проблем безопасности. Результатом является надежная система, которая надежно обрабатывает миллионы транзакций электронной почты. Наша реализация SQLite также использует msgpackr для эффективной двоичной сериализации и WebSockets (через ws) для обновления статуса в реальном времени по всей нашей инфраструктуре.

Инфраструктура DNS с Tangerine и mx-connect

Важнейшим компонентом инфраструктуры Forward Email является наша система разрешения DNS, построенная на основе двух ключевых пакетов:

  • мандарин: Наша реализация DNS-over-HTTPS на базе Node.js представляет собой готовую замену стандартному DNS-резолверу со встроенными повторными попытками, тайм-аутами, интеллектуальной ротацией серверов и поддержкой кэширования.

  • MX-подключение: Этот пакет устанавливает TCP-подключения к MX-серверам, беря целевой домен или адрес электронной почты, разрешая соответствующие MX-серверы и подключаясь к ним в порядке приоритета.

Мы интегрировали Tangerine с mx-connect через запрос на извлечение №4, обеспечивая DNS-запросы на уровне приложений по HTTP-запросам во всей пересылке электронной почты. Это обеспечивает глобальное кэширование для DNS в масштабе с согласованностью 1:1 в любом регионе, приложении или процессе — критически важно для надежной доставки электронной почты в распределенной системе.

Влияние на предприятие: от открытого исходного кода до критически важных решений

Кульминация нашего десятилетнего пути в разработке ПО с открытым исходным кодом позволила Forward Email обслуживать не только отдельных разработчиков, но и крупные предприятия и образовательные учреждения, которые составляют костяк самого движения с открытым исходным кодом.

Практические примеры критически важной инфраструктуры электронной почты

Наша приверженность принципам надежности, конфиденциальности и открытого исходного кода сделала Forward Email надежным выбором для организаций с высокими требованиями к электронной почте:

Есть прекрасная симметрия в том, как наши пакеты с открытым исходным кодом, которые тщательно поддерживались в течение многих лет, позволили нам создать службу электронной почты, которая теперь поддерживает те самые сообщества и организации, которые отстаивают программное обеспечение с открытым исходным кодом. Этот путь полного круга — от предоставления отдельных пакетов до поддержки инфраструктуры электронной почты корпоративного уровня для лидеров программного обеспечения с открытым исходным кодом — представляет собой окончательное подтверждение нашего подхода к разработке программного обеспечения.

Десятилетие открытого исходного кода: взгляд в будущее

Оглядываясь на десятилетие работы над проектами с открытым исходным кодом и глядя вперед на следующие десять лет, мы испытываем благодарность к сообществу, которое поддерживало нашу работу, и волнение в ожидании того, что нас ждет дальше.

Наш путь от отдельных разработчиков пакетов до тех, кто поддерживает комплексную инфраструктуру электронной почты, используемую крупными предприятиями и фондами с открытым исходным кодом, был замечательным. Это свидетельство силы разработки с открытым исходным кодом и влияния, которое продуманное, хорошо поддерживаемое программное обеспечение может оказать на более широкую экосистему.

В ближайшие годы мы намерены:

  • Продолжаем поддерживать и улучшать наши существующие пакеты, гарантируя, что они останутся надежными инструментами для разработчиков по всему миру.
  • Расширение нашего вклада в критически важные инфраструктурные проекты, особенно в области электронной почты и безопасности.
  • Расширение возможностей пересылки электронной почты сохраняя при этом нашу приверженность принципам конфиденциальности, безопасности и прозрачности.
  • Поддержка следующего поколения разработчиков ПО с открытым исходным кодом посредством наставничества, спонсорства и взаимодействия с сообществом.

Мы считаем, что будущее разработки программного обеспечения открыто, совместно и основано на доверии. Продолжая вносить высококачественные пакеты, ориентированные на безопасность, в экосистему JavaScript, мы надеемся сыграть небольшую роль в построении этого будущего.

Спасибо всем, кто использовал наши пакеты, вносил вклад в наши проекты, сообщал о проблемах или просто распространял информацию о нашей работе. Ваша поддержка сделала возможным это десятилетие воздействия, и мы с нетерпением ждем, чего мы сможем достичь вместе за следующие десять лет.

[^1]: статистика загрузок npm для cabin, апрель 2025 г. [^2]: статистика загрузок npm для bson-objectid, февраль-март 2025 г. [^3]: статистика загрузок npm для url-regex-safe, апрель 2025 г. [^4]: количество звезд GitHub для forwardemail/forwardemail.net по состоянию на апрель 2025 г. [^5]: статистика загрузок npm для preview-email, апрель 2025 г. [^7]: статистика загрузок npm для superagent, февраль-март 2025 г. [^8]: статистика загрузок npm для supertest, февраль-март 2025 г. [^9]: статистика загрузок npm для preview-email, февраль-март 2025 г. [^10]: статистика загрузок npm для cabin, февраль-март 2025 г. [^11]: статистика загрузок npm для url-regex-safe, Февраль-март 2025 г. [^12]: статистика загрузок npm для spamscanner, февраль-март 2025 г. [^13]: ежедневные шаблоны загрузок из статистики npm, апрель 2025 г. [^14]: еженедельные шаблоны загрузок из статистики npm, апрель 2025 г. [^15]: статистика загрузок npm для nodemailer, апрель 2025 г. [^16]: https://github.com/nodemailer/smtp-server/issues/155 [^17]: https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min [^18]: https://github.com/nodemailer/mailparser/issues/261 [^19]: https://github.com/nodemailer/nodemailer/issues/1102 [^20]: https://github.com/postalsys/mailauth/issues/30 [^21]: https://github.com/postalsys/mailauth/issues/58 [^22]: https://github.com/postalsys/mailauth/issues/48 [^23]: https://github.com/postalsys/mailauth/issues/74 [^24]: https://github.com/postalsys/mailauth/issues/75 [^25]: https://github.com/postalsys/mailauth/issues/60 [^26]: https://github.com/postalsys/mailauth/issues/73 [^27]: На основе проблем GitHub в репозитории Upptime [^28]: На основе проблем GitHub в репозитории Upptime [^29]: На основе проблем GitHub в репозитории Upptime [^30]: статистика загрузок npm для bree, февраль-март 2025 г. [^31]: На основе запросов на извлечение GitHub в Upptime [^32]: На основе запросов на извлечение GitHub в Upptime [^34]: статистика загрузок npm для koa, февраль-март 2025 г. [^35]: статистика загрузок npm для @koa/router, февраль-март 2025 г. [^36]: статистика загрузок npm для koa-router, февраль-март 2025 г. [^37]: статистика загрузок npm для url-regex, февраль-март 2025 г. [^38]: статистика загрузок npm для @breejs/later, февраль-март 2025 г. [^39]: статистика загрузок npm для email-templates, февраль-март 2025 г. [^40]: статистика загрузок npm для get-paths, февраль-март 2025 г. [^41]: статистика загрузок npm для dotenv-parse-variables, февраль-март 2025 г. [^42]: статистика загрузок npm для @koa/multer, февраль-март 2025 г.