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

Предисловие
В мире JavaScript и Node.js некоторые пакеты просто необходимы: их скачивают миллионы раз ежедневно и они обеспечивают работу приложений по всему миру. За этими инструментами стоят разработчики, ориентированные на качество открытого исходного кода. Сегодня мы расскажем, как наша команда помогает создавать и поддерживать пакеты npm, которые стали ключевыми элементами экосистемы JavaScript.
Пионеры, которые нам доверяют: Исаак З. Шлютер и пересылающее письмо
Мы гордимся тем, что у нас есть пользователь Исаак З. Шлютер (GitHub: isaacs). Айзек создал [нпм](https://en.wikipedia.org/wiki/Npm_\(software\) и помог создать Node.js. Его доверие к Forward Email свидетельствует о нашем стремлении к качеству и безопасности. Айзек использует Forward Email для нескольких доменов, включая izs.me.
Влияние Айзека на JavaScript огромно. В 2009 году он был одним из первых, кто увидел потенциал Node.js, работая с Райан Даль, создателем этой платформы. Как сказал Айзек в интервью журналу Increment: «В разгар этого очень небольшого сообщества, состоящего из группы людей, пытающихся понять, как реализовать серверный JavaScript, Райан Даль представил Node, что, безусловно, было правильным подходом. Я вложил в это свои силы и включился в разработку примерно в середине 2009 года».
Note
Для тех, кто интересуется историей 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 файловой системы и потоки» и «выступал в качестве пожизненного благожелательного диктатора проекта в течение двух лет, обеспечивая постоянное повышение качества и надёжность процесса сборки для версий Node.js v0.6 – v0.10».
Айзек руководил Node.js в ключевой период роста, задавая стандарты, которые и по сей день определяют платформу. Позже, в 2014 году, он основал компанию npm, Inc. для поддержки реестра npm, которым ранее занимался самостоятельно.
Мы благодарим Айзека за его огромный вклад в JavaScript и продолжаем использовать множество созданных им пакетов. Его работа изменила подход к разработке программного обеспечения и то, как миллионы разработчиков по всему миру обмениваются кодом.
Архитектор кода: путешествие Ника Бо
В основе нашего успеха в области открытого исходного кода лежит Ник Бо, основатель и владелец Forward Email. Его работа с JavaScript длится почти 20 лет и повлияла на то, как бесчисленное множество разработчиков создают приложения. Его опыт работы с открытым исходным кодом демонстрирует как технические навыки, так и лидерские качества в сообществе.
Экспресс-технический комитет и основные вклады
Благодаря своему опыту в веб-фреймворках Ник получил место в Экспресс Технический Комитет, где он помогал с одним из самых популярных фреймворков Node.js. Сейчас Ник числится неактивным участником в Страница сообщества Экспресс.
Important
Express изначально был создан Т. Дж. Головайчуком, активным участником проектов с открытым исходным кодом, который во многом сформировал экосистему Node.js. Мы благодарны Т. Дж. за его основополагающую работу и уважаем его вклад в разработку проектов с открытым исходным кодом.
Будучи членом Экспресс Технический Комитет, Ник уделял большое внимание деталям в таких вопросах, как уточнение документации req.originalUrl
и устранение проблем с обработкой многокомпонентных форм.
Вклад в фреймворк Koa
Работа Ника с Фреймворк Koa — современной и облегчённой альтернативой Express, также созданной Т. Дж. Головайчуком, — ещё раз демонстрирует его стремление к совершенствованию инструментов веб-разработки. Его вклад в Koa включает в себя как решение проблем, так и код, предоставляемый через запросы на извлечение, обработку ошибок, управление типами контента и улучшение документации.
Его работа в Express и Koa дает ему уникальный взгляд на веб-разработку Node.js, помогая нашей команде создавать пакеты, которые хорошо работают с различными экосистемами фреймворков.
От индивидуального участника к руководителю организации
То, что начиналось как помощь существующим проектам, переросло в создание и поддержку целых экосистем пакетов. Ник основал несколько организаций на GitHub, включая Кабина, Спам-сканер, Переслать электронное письмо, Парень и Бри, каждая из которых решает конкретные задачи сообщества JavaScript.
Этот переход от роли участника к роли лидера демонстрирует видение Ника в отношении качественного программного обеспечения, решающего реальные проблемы. Организуя связанные пакеты в рамках специализированных организаций GitHub, он создал экосистемы инструментов, которые работают вместе, сохраняя при этом модульность и гибкость для более широкого сообщества разработчиков.
Наши организации GitHub: Экосистемы инноваций
Мы организуем нашу работу над открытым исходным кодом вокруг специализированных организаций на GitHub, каждая из которых решает конкретные задачи в JavaScript. Такая структура создаёт сплочённые семейства пакетов, которые хорошо взаимодействуют друг с другом, сохраняя при этом модульность.
Cabin: Структурированное ведение журнала для современных приложений
Организация каюты — это наш подход к простому и эффективному ведению журналов приложений. Основной пакет cabin
имеет почти 900 звёзд на GitHub и более 100 000 еженедельных загрузок[1]. Cabin обеспечивает структурированное ведение журналов, работающее с такими популярными сервисами, как Sentry, LogDNA и Papertrail.
Cabin выделяется продуманным API и системой плагинов. Поддержка таких пакетов, как axe
для промежуточного ПО Express и parse-request
для анализа HTTP-запросов, демонстрирует нашу приверженность комплексным решениям, а не изолированным инструментам.
Особого упоминания заслуживает пакет bson-objectid
, который всего за два месяца скачали более 1,7 миллиона раз[2]. Эта лёгкая реализация ObjectID в MongoDB стала незаменимым инструментом для разработчиков, которым нужны идентификаторы без полноценной зависимости от MongoDB.
Спам-сканер: борьба со злоупотреблением электронной почтой
Пакет Организация спам-сканера демонстрирует нашу приверженность решению реальных проблем. Основной пакет spamscanner
обеспечивает расширенное обнаружение спама в электронной почте, но именно пакет url-regex-safe
получил впечатляющее распространение.
url-regex-safe
, получивший более 1,2 миллиона загрузок за два месяца[3], устраняет критические проблемы безопасности в других регулярных выражениях обнаружения URL-адресов. Этот пакет демонстрирует наш подход к открытому исходному коду: поиск распространённой проблемы (в данном случае уязвимостей RedoS в проверке URL-адресов), создание надёжного решения и его тщательная поддержка.
Бри: Современное планирование заданий с рабочими потоками
Организация Бри — наш ответ на распространённую проблему Node.js: надёжное планирование заданий. Основной пакет bree
, набравший более 3100 звёзд на GitHub, представляет собой современный планировщик заданий, использующий рабочие потоки Node.js для повышения производительности и надёжности.
Note
Бри была создана после того, как мы помогли поддерживать Повестка дня, применяя полученный опыт для создания более эффективного планировщика заданий. Наш вклад в Agenda помог нам найти способы улучшить планирование заданий.
Что отличает Bree от других планировщиков, таких как Agenda:
- Отсутствие внешних зависимостей: В отличие от Agenda, которому требуется MongoDB, Bree не требует Redis или MongoDB для управления состоянием заданий.
- Рабочие потоки: Bree использует рабочие потоки Node.js для изолированных процессов, обеспечивая лучшую изоляцию и производительность.
- Простой API: Bree предлагает детальный контроль и простоту, упрощая реализацию сложных задач планирования.
- Встроенная поддержка: Такие функции, как плавная перезагрузка, задания cron, даты и удобное для пользователя время, включены по умолчанию.
Бри — ключевой компонент forwardemail.net, выполняющий критически важные фоновые задачи, такие как обработка электронной почты, очистка и плановое обслуживание. Использование Бри для пересылки электронной почты демонстрирует нашу приверженность использованию собственных инструментов в производстве, гарантируя их соответствие высоким стандартам надежности.
Мы также используем и высоко ценим другие замечательные пакеты рабочих потоков, такие как бассейн, и HTTP-клиенты, такие как одиннадцать. Piscina, как и Бри, использует рабочие потоки Node.js для эффективной обработки задач. Мы благодарим Мэтью Хилл, который поддерживает undici и piscina, за его значительный вклад в Node.js. Маттео входит в Технический руководящий комитет Node.js и значительно улучшил возможности HTTP-клиента в Node.js.
Пересылка электронной почты: инфраструктура электронной почты с открытым исходным кодом
Наш самый амбициозный проект — Переслать электронное письмо, почтовый сервис с открытым исходным кодом, предоставляющий услуги пересылки, хранения и API электронной почты. Основной репозиторий имеет более 1100 звёзд на GitHub[4], что свидетельствует о высокой оценке сообществом этой альтернативы проприетарным почтовым сервисам.
Пакет preview-email
от этой организации, скачанный более 2,5 миллионов раз за два месяца[5], стал незаменимым инструментом для разработчиков, работающих с шаблонами электронных писем. Предоставляя простой способ предварительного просмотра писем во время разработки, он решает распространённую проблему при создании приложений с поддержкой электронной почты.
Парень: Основные утилиты и инструменты 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 Actions, Issues и Pages для бессерверного мониторинга.
- Не требует сервера: В отличие от традиционных инструментов мониторинга, 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 для наших пакетов с открытым исходным кодом, отвечающих нашим уникальным требованиям.
- Шаблоны интеграции: Разработка шаблонов взаимодействия этих пакетов в производственной среде.
- Оптимизация производительности: Выявление и устранение узких мест производительности, возникающих только при масштабировании.
- Усиление безопасности: Добавление дополнительных уровней безопасности, специфичных для обработки электронной почты и защиты пользовательских данных.
Эта работа потребовала тысяч часов разработки, выходящих за рамки основных пакетов, что привело к созданию надежной и безопасной службы электронной почты, которая использует все лучшее из наших вкладов в области ПО с открытым исходным кодом.
Цикл обратной связи
Возможно, самый ценный аспект использования наших собственных пакетов в рабочей среде — это создаваемый ими цикл обратной связи. Когда мы сталкиваемся с ограничениями или особыми ситуациями в пересылке электронной почты, мы не просто устраняем их локально, а улучшаем базовые пакеты, что приносит пользу как нашему сервису, так и всему сообществу.
Такой подход привел к многочисленным улучшениям:
- Мягкое завершение работы Bree: Необходимость развертывания Forward Email без простоев привела к расширению возможностей постепенного завершения работы Bree.
- Распознавание шаблонов в Spam Scanner: Реальные шаблоны спама, обнаруженные в Forward Email, легли в основу алгоритмов обнаружения Spam Scanner.
- Оптимизация производительности Cabin: Высокообъемное журналирование в рабочей среде выявило возможности оптимизации Cabin, которые выгодны всем пользователям.
Поддерживая этот эффективный цикл между нашей работой с открытым исходным кодом и производственным сервисом, мы гарантируем, что наши пакеты остаются практичными, проверенными на практике решениями, а не теоретическими реализациями.
Основные принципы пересылки электронных писем: основа совершенства
Система пересылки электронных писем разработана в соответствии с набором основных принципов, которыми мы руководствуемся при принятии всех решений в области разработки. Эти принципы, подробно описанные в документе веб-сайт, гарантируют, что наш сервис остаётся удобным для разработчиков, безопасным и ориентированным на конфиденциальность пользователей.
Всегда удобный для разработчиков, ориентированный на безопасность и прозрачный
Наш главный принцип — создавать программное обеспечение, удобное для разработчиков, при этом соблюдая высочайшие стандарты безопасности и конфиденциальности. Мы считаем, что техническое совершенство никогда не должно идти в ущерб удобству использования, а прозрачность укрепляет доверие к нашему сообществу.
Этот принцип проявляется в нашей подробной документации, понятных сообщениях об ошибках и открытом обсуждении как успехов, так и трудностей. Открывая весь наш код, мы поощряем к изучению и сотрудничеству, укрепляя как наше программное обеспечение, так и экосистему в целом.
Соблюдение проверенных временем принципов разработки программного обеспечения
Мы следуем нескольким устоявшимся принципам разработки программного обеспечения, которые доказали свою ценность за десятилетия:
- MVC: Разделение задач с помощью шаблона «Модель-Представление-Контроллер»
- Философия Unix: Создание модульных компонентов, которые хорошо выполняют одну задачу
- KISS: Простота и понятность
- DRY: Не повторяйтесь, способствуя повторному использованию кода
- YAGNI: Вам это не понадобится, избегая преждевременной оптимизации
- Двенадцать факторов: Следование лучшим практикам для создания современных масштабируемых приложений
- Бритва Оккама: Выбор наиболее простого решения, отвечающего требованиям
- Догфудинг: Широкое использование собственных продуктов
Эти принципы — не просто теоретические концепции, они внедрены в нашу повседневную практику разработки. Например, наша приверженность философии Unix очевидна в том, как мы структурировали наши пакеты npm: небольшие, узкоспециализированные модули, которые можно объединять для решения сложных задач.
Ориентирован на инициативных разработчиков
Мы ориентированы на разработчиков, которые не спешат разрабатывать собственные продукты, и на разработчиков, которые находятся в состоянии рамен-прибыльный. Этот подход определяет всё: от нашей модели ценообразования до технических решений. Мы понимаем сложности разработки продуктов в условиях ограниченных ресурсов, потому что сами прошли через это.
Этот принцип особенно важен в нашем подходе к открытому исходному коду. Мы создаём и поддерживаем пакеты, которые решают реальные проблемы разработчиков без корпоративного бюджета, делая мощные инструменты доступными для всех, независимо от их ресурсов.
Принципы на практике: Кодовая база пересылки электронной почты
Эти принципы чётко прослеживаются в кодовой базе Forward Email. Наш файл package.json демонстрирует продуманный набор зависимостей, каждая из которых соответствует нашим основным ценностям:
- Пакеты, ориентированные на безопасность, такие как
mailauth
для аутентификации электронной почты - Удобные для разработчиков инструменты, такие как
preview-email
, для упрощения отладки - Модульные компоненты, такие как различные утилиты
p-*
от Синдре Сорхуса
Последовательно следуя этим принципам на протяжении долгого времени, мы создали сервис, которому разработчики могут доверить свою инфраструктуру электронной почты — безопасный, надежный и соответствующий ценностям сообщества разработчиков ПО с открытым исходным кодом.
Конфиденциальность по замыслу
Конфиденциальность — это не второстепенная задача или маркетинговая функция для пересылки электронной почты, а основополагающий принцип проектирования, который определяет каждый аспект нашего сервиса и кода:
- Шифрование с нулевым доступом: Мы внедрили системы, которые делают чтение электронных писем пользователей технически невозможным.
- Минимальный сбор данных: Мы собираем только те данные, которые необходимы для предоставления наших услуг, и ничего лишнего.
- Прозрачные политики: Наша политика конфиденциальности написана понятным языком без использования юридических терминов.
- Проверка открытого исходного кода: Наша база открытого исходного кода позволяет специалистам по безопасности проверять наши заявления о конфиденциальности.
Это обязательство распространяется и на наши пакеты с открытым исходным кодом, которые изначально разрабатываются с учетом лучших практик обеспечения безопасности и конфиденциальности.
Устойчивый открытый исходный код
Мы считаем, что для долгосрочного процветания программного обеспечения с открытым исходным кодом необходимы устойчивые модели. Наш подход включает в себя:
- Коммерческая поддержка: Премиум-поддержка и услуги, связанные с нашими инструментами с открытым исходным кодом.
- Сбалансированное лицензирование: Использование лицензий, защищающих как свободы пользователей, так и устойчивость проекта.
- Взаимодействие с сообществом: Активное взаимодействие с участниками для создания поддерживающего сообщества.
- Прозрачные дорожные карты: Предоставление доступа к нашим планам разработки, чтобы пользователи могли планировать соответствующим образом.
Сосредоточившись на устойчивом развитии, мы гарантируем, что наши вклады в разработку ПО с открытым исходным кодом будут продолжать расти и совершенствоваться с течением времени, а не будут заброшены.
Цифры не лгут: наша ошеломляющая статистика загрузок npm
Когда мы говорим о влиянии программного обеспечения с открытым исходным кодом, статистика загрузок служит ощутимым показателем уровня принятия и доверия. Многие пакеты, которые мы поддерживаем, достигли масштабов, которых редко достигают проекты с открытым исходным кодом: общее количество загрузок исчисляется миллиардами.
Important
Мы гордимся тем, что помогаем поддерживать несколько популярных пакетов в экосистеме JavaScript, но хотим отметить, что многие из них изначально были созданы другими талантливыми разработчиками. Такие пакеты, как superagent и supertest, изначально были созданы TJ Holowaychuk, чей плодотворный вклад в развитие открытого исходного кода сыграл решающую роль в формировании экосистемы Node.js.
Вид с высоты птичьего полета на наше влияние
Всего за два месяца с февраля по март 2025 года ведущие пакеты, в разработке и поддержке которых мы принимали участие, зафиксировали ошеломляющие показатели загрузок:
- суперагент: 84 575 829 загрузок[6] (создано TJ Holowaychuk)
- супер тест: 76 432 591 загрузка[7] (создано TJ Holowaychuk)
- также: 28 539 295 загрузок[8] (создано TJ Holowaychuk)
- @koa/router: 11 007 327 загрузок[9]
- koa-router: 3 498 918 загрузок[10]
- URL-регулярное выражение: 2 819 520 Загрузки[11]
- предварительный просмотр по электронной почте: 2 500 000 загрузок[12]
- кабина: 1 800 000 загрузок[13]
- @breejs/later: 1 709 938 загрузок[14]
- шаблоны электронной почты: 1 128 139 загрузок[15]
- __PROTECTED_LINK_259__0: 1 124 686 загрузок[16]
- __PROTECTED_LINK_259__1: 1 200 000 загрузок[17]
- __PROTECTED_LINK_259__2: 894 666 загрузок[18]
- __PROTECTED_LINK_259__3: 839 585 загрузок[19]
- __PROTECTED_LINK_259__4: 145 000 загрузок[20]
- __PROTECTED_LINK_259__5: 24 270 загрузок[21]
Note
Несколько других пакетов, которые мы поддерживаем, но не создавали, имеют ещё большее количество загрузок, включая form-data
(более 738 млн загрузок), toidentifier
(более 309 млн загрузок), stackframe
(более 116 млн загрузок) и error-stack-parser
(более 113 млн загрузок). Для нас большая честь вносить свой вклад в эти пакеты, уважая при этом труд их авторов.
Это не просто впечатляющие цифры — это реальные разработчики, которые решают реальные проблемы с помощью кода, который мы помогаем поддерживать. Каждая загрузка — это пример того, как эти пакеты помогли кому-то создать что-то значимое: от любительских проектов до корпоративных приложений, используемых миллионами.
Ежедневное воздействие в масштабе
Ежедневные тенденции загрузок демонстрируют стабильно высокий уровень использования, достигающий миллионов загрузок в день[22]. Эта стабильность говорит о стабильности и надежности этих пакетов — разработчики не просто тестируют их, а интегрируют в свои основные рабочие процессы и используют их изо дня в день.
Еженедельные тенденции загрузок демонстрируют ещё более впечатляющие цифры, стабильно колеблясь около десятков миллионов загрузок в неделю[23]. Это свидетельствует о колоссальном влиянии на экосистему JavaScript, поскольку эти пакеты работают в производственных средах по всему миру.
За пределами сырых цифр
Хотя статистика загрузок сама по себе впечатляет, она красноречивее говорит о доверии сообщества к этим пакетам. Поддержание такого масштаба пакетов требует неукоснительного соблюдения следующих принципов:
- Обратная совместимость: Изменения должны быть тщательно продуманы, чтобы избежать нарушения существующих реализаций.
- Безопасность: Поскольку от этих пакетов зависят миллионы приложений, уязвимости безопасности могут иметь далеко идущие последствия.
- Производительность: В таком масштабе даже незначительное улучшение производительности может дать значительный совокупный эффект.
- Документация: Понятная и исчерпывающая документация необходима для пакетов, используемых разработчиками любого уровня опыта.
Постоянный рост числа загрузок с течением времени отражает успешное выполнение этих обязательств и укрепление доверия со стороны сообщества разработчиков посредством надежных, хорошо поддерживаемых пакетов.
Поддержка экосистемы: наше спонсорство открытого исходного кода
Tip
Устойчивое развитие открытого исходного кода — это не только предоставление кода, но и поддержка разработчиков, которые обслуживают критически важную инфраструктуру.
Помимо нашего прямого вклада в экосистему JavaScript, мы гордимся тем, что поддерживаем выдающихся разработчиков Node.js, чьи работы легли в основу многих современных приложений. Мы спонсорствуем:
Андрис Рейнман: пионер инфраструктуры электронной почты
Андрис Рейнман — создатель Nodemailer, самой популярной библиотеки для отправки электронной почты на Node.js, скачанной более чем 14 миллионов раз в неделю[24]. Его работа распространяется и на другие критически важные компоненты инфраструктуры электронной почты, такие как SMTP-сервер, Mailparser и WildDuck.
Наша спонсорская поддержка помогает обеспечить постоянную поддержку и развитие этих важных инструментов, которые обеспечивают работу электронной почты для бесчисленных приложений Node.js, включая нашу собственную службу пересылки электронной почты.
Синдре Сорхус: вдохновитель пакета служебных программ
Синдре Сорхус — один из самых активных разработчиков открытого кода в экосистеме JavaScript, создавший более 1000 npm-пакетов. Его утилиты, такие как p-карта, p-повтор и is-stream, являются основополагающими строительными блоками, используемыми во всей экосистеме Node.js.
Спонсируя работу Синдре, мы помогаем поддерживать разработку этих важнейших утилит, которые делают разработку JavaScript более эффективной и надежной.
Эти спонсорские контракты отражают нашу приверженность более широкой экосистеме открытого исходного кода. Мы осознаём, что наш успех основан на фундаменте, заложенном этими и другими участниками, и стремимся обеспечить устойчивость всей экосистемы.
Выявление уязвимостей безопасности в экосистеме JavaScript
Наша приверженность принципам открытого исходного кода выходит за рамки разработки функций и включает в себя выявление и устранение уязвимостей безопасности, которые могут повлиять на миллионы разработчиков. Некоторые из наших наиболее значимых вкладов в экосистему JavaScript связаны с безопасностью.
Спасение Koa-Router
В феврале 2019 года Ник обнаружил критическую проблему с поддержкой популярного пакета koa-router. Поскольку он имел статус сообщил на Hacker News, пакет был заброшен первоначальным разработчиком, что оставило уязвимости безопасности неустранёнными, а сообщество — без обновлений.
Warning
Заброшенные пакеты с уязвимостями безопасности представляют значительную угрозу для всей экосистемы, особенно если их загружают миллионы раз в неделю.
В ответ на это Ник создал @koa/router и помог оповестить сообщество о ситуации. С тех пор он поддерживает этот критически важный пакет, обеспечивая пользователям 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
Nodemailer — это основа отправки электронной почты в Node.js, и наш вклад помог сделать ее более надежной:
- Улучшения SMTP-сервера: Мы исправили ошибки парсинга, проблемы с обработкой потоков и проблемы с настройкой TLS в компоненте SMTP-сервера[25][26].
- Улучшения парсера почты: Мы исправили ошибки декодирования последовательности символов и проблемы парсера, которые могли приводить к сбоям в обработке электронной почты[27][28].
Благодаря этим вкладам Nodemailer по-прежнему остается надежной основой для обработки электронной почты в приложениях Node.js, включая пересылку электронной почты.
Расширенная аутентификация электронной почты с помощью Mailauth
Майлаут обеспечивает критически важную функциональность аутентификации электронной почты, и наши предложения значительно улучшили ее возможности:
-
Улучшения проверки DKIM: Мы обнаружили и сообщили о проблемах с кэшем DNS в X/Twitter, приводящих к сбоям DKIM для исходящих сообщений, и сообщили об этом на Hacker One[29].
-
Улучшения DMARC и ARC: Мы исправили проблемы с проверкой DMARC и ARC, которые могли приводить к неверным результатам аутентификации[30][31].
-
Оптимизация производительности: Мы внесли улучшения, повышающие производительность процессов аутентификации электронной почты[32][33][34][35].
Эти улучшения помогают обеспечить точность и надежность аутентификации электронной почты, защищая пользователей от фишинговых и спуфинговых атак.
Ключевые улучшения времени бесперебойной работы
Наш вклад в Upptime включает:
- Мониторинг SSL-сертификатов: Мы добавили функцию отслеживания истечения срока действия SSL-сертификатов, предотвращая непредвиденные простои из-за просроченных сертификатов[36].
- Поддержка нескольких SMS-номеров: Мы реализовали поддержку оповещения нескольких членов команды по SMS при возникновении инцидентов, что сокращает время реагирования[37].
- Исправления проверки IPv6: Мы исправили проблемы с проверкой подключения IPv6, обеспечив более точный мониторинг в современных сетевых средах[38].
- Поддержка темного/светлого режимов: Мы добавили поддержку тем для улучшения пользовательского опыта на страницах состояния[39].
- Улучшенная поддержка TCP-Ping: Мы улучшили функцию TCP-Ping для более надежного тестирования соединения[40].
Эти улучшения не только улучшают мониторинг статуса 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-подключение: Использование mx-connect с интеграцией Tangerine для надежного подключения к почтовому серверу.
- Планирование заданий: Использование Bree для надежной обработки фоновых задач с рабочими потоками.
- Шаблоны: Использование шаблонов электронной почты для повторного использования таблиц стилей с веб-сайта в коммуникациях с клиентами.
- Хранилище электронной почты: Реализация индивидуально зашифрованных почтовых ящиков SQLite с использованием алгоритма better-sqlite3-multiple-ciphers и шифрования ChaCha20-Poly1305 для квантово-безопасной конфиденциальности, обеспечивающей полную изоляцию между пользователями и доступ к их данным только у пользователя. почтовый ящик
Каждая из этих интеграций требует тщательного анализа пограничных случаев, влияния на производительность и вопросов безопасности. Результатом является надёжная система, надёжно обрабатывающая миллионы почтовых транзакций. Наша реализация SQLite также использует msgpackr для эффективной двоичной сериализации и WebSockets (через ws) для обновления статуса в режиме реального времени в рамках всей нашей инфраструктуры.
DNS-инфраструктура с Tangerine и mx-connect
Важнейшим компонентом инфраструктуры Forward Email является наша система разрешения DNS, построенная на двух ключевых пакетах:
-
мандарин: Наша реализация Node.js DNS-over-HTTPS обеспечивает замену стандартного DNS-преобразователя со встроенными повторными попытками, тайм-аутами, интеллектуальной ротацией серверов и поддержкой кэширования.
-
mx-connect: Этот пакет устанавливает TCP-подключения к серверам MX, принимая целевой домен или адрес электронной почты, разрешая соответствующие серверы MX и подключаясь к ним в порядке приоритета.
Мы интегрировали Tangerine с mx-connect через Запрос на включение (#4, обеспечивающий DNS-запросы на уровне приложений по HTTP для всех запросов Forward Email. Это обеспечивает глобальное кэширование DNS в масштабе с согласованностью 1:1 для любого региона, приложения или процесса, что критически важно для надежной доставки электронной почты в распределенной системе.
Влияние на предприятие: от открытого исходного кода до критически важных решений
Кульминацией нашего десятилетнего пути в разработке ПО с открытым исходным кодом стала возможность Forward Email обслуживать не только отдельных разработчиков, но и крупные предприятия и образовательные учреждения, составляющие основу движения открытого исходного кода.
Примеры использования критически важной инфраструктуры электронной почты
Наша приверженность принципам надежности, конфиденциальности и открытого исходного кода сделала Forward Email надежным выбором для организаций с высокими требованиями к электронной почте:
-
Учебные заведения: Как подробно описано в нашем [примере использования пересылки электронной почты выпускников]](https://forwardemail.net/blog/docs/alumni-email-forwarding-university-case-study), крупнейшие университеты полагаются на нашу инфраструктуру для поддержания постоянных связей с сотнями тысяч выпускников посредством надежных служб пересылки электронной почты.
-
Решения для корпоративного Linux: Пример использования Canonical Ubuntu для корпоративной электронной почты демонстрирует, как наш подход с открытым исходным кодом идеально соответствует потребностям поставщиков корпоративного Linux, предлагая им необходимую прозрачность и контроль.
-
Open Source Foundations: Возможно, наиболее показательным является наше партнерство с Linux Foundation, как это задокументировано в Пример использования электронной почты Linux Foundation для предприятий, где наша служба обеспечивает коммуникацию для той самой организации, которая курирует разработку Linux.
Есть прекрасная симметрия в том, как наши пакеты с открытым исходным кодом, которые мы бережно поддерживаем уже много лет, позволили нам создать почтовый сервис, который теперь поддерживает те самые сообщества и организации, которые продвигают программное обеспечение с открытым исходным кодом. Этот замкнутый круг — от разработки отдельных пакетов до создания корпоративной почтовой инфраструктуры для лидеров в области программного обеспечения с открытым исходным кодом — представляет собой окончательное подтверждение правильности нашего подхода к разработке программного обеспечения.
Десятилетие открытого исходного кода: взгляд в будущее
Оглядываясь назад на десятилетие работы над ПО с открытым исходным кодом и заглядывая вперед в следующие десять лет, мы испытываем благодарность к сообществу, поддерживавшему нашу работу, и волнение в отношении того, что нас ждет впереди.
Наш путь от отдельных разработчиков пакетов до разработчиков комплексной инфраструктуры электронной почты, используемой крупными предприятиями и фондами с открытым исходным кодом, был впечатляющим. Это свидетельствует о силе разработки с открытым исходным кодом и о влиянии, которое продуманное и хорошо поддерживаемое программное обеспечение может оказывать на более широкую экосистему.
В ближайшие годы мы намерены:
- Продолжение поддержки и совершенствования наших существующих пакетов, гарантируя, что они останутся надежными инструментами для разработчиков по всему миру.
- Расширение нашего вклада в критически важные инфраструктурные проекты, особенно в области электронной почты и безопасности.
- Расширение возможностей Forward Email, сохраняя при этом нашу приверженность принципам конфиденциальности, безопасности и прозрачности.
- Поддержка следующего поколения разработчиков ПО с открытым исходным кодом посредством наставничества, спонсорства и взаимодействия с сообществом.
Мы верим, что будущее разработки программного обеспечения — это открытость, сотрудничество и доверие. Продолжая вносить свой вклад в экосистему JavaScript, предлагая высококачественные пакеты, ориентированные на безопасность, мы надеемся внести свой вклад в построение этого будущего.
Спасибо всем, кто воспользовался нашими пакетами услуг, внёс вклад в наши проекты, сообщал о проблемах или просто рассказывал о нашей работе. Ваша поддержка сделала это десятилетие возможным, и мы с нетерпением ждём возможности увидеть, чего мы сможем достичь вместе за следующие десять лет.
Статистика загрузок npm для cabin, апрель 2025 г. ↩︎
Статистика загрузок npm для bson-objectid, февраль-март 2025 г. ↩︎
Статистика загрузок npm для url-regex-safe, апрель 2025 г. ↩︎
Количество звёзд на GitHub для forwardemail/forwardemail.net по состоянию на апрель 2025 г. ↩︎
Статистика загрузок npm для preview-email, апрель 2025 г. ↩︎
Статистика загрузок npm для superagent, февраль-март 2025 г. ↩︎
Статистика загрузок npm для supertest, февраль-март 2025 г. ↩︎
Статистика загрузок npm для koa, февраль-март 2025 ↩︎
Статистика загрузок npm для @koa/router, февраль-март 2025 ↩︎
Статистика загрузок npm для koa-router, февраль-март 2025 ↩︎
Статистика загрузок npm для url-regex, февраль-март 2025 ↩︎
Статистика загрузок npm для preview-email, февраль-март 2025 г. ↩︎
Статистика загрузок npm для cabin, февраль-март 2025 г. ↩︎
Статистика загрузок npm для @breejs/later, февраль-март 2025 ↩︎
Статистика загрузок email-templates, февраль-март 2025 ↩︎
Статистика загрузок get-paths, февраль-март 2025 ↩︎
Статистика загрузок npm для url-regex-safe, февраль-март 2025 г. ↩︎
Статистика загрузок dotenv-parse-variables, февраль-март 2025 ↩︎
Статистика загрузок npm для @koa/multer, февраль-март 2025 ↩︎
Статистика загрузок npm для spamscanner, февраль-март 2025 г. ↩︎
Статистика загрузок npm для bree, февраль-март 2025 г. ↩︎
Ежедневные закономерности загрузок из статистики npm, апрель 2025 г. ↩︎
Еженедельные закономерности загрузок из статистики npm, апрель 2025 г. ↩︎
Статистика загрузок npm для nodemailer, апрель 2025 г. ↩︎
https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min ↩︎
https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min0 ↩︎
На основе проблем GitHub в репозитории Upptime ↩︎
На основе проблем GitHub в репозитории Upptime ↩︎
На основе проблем GitHub в репозитории Upptime ↩︎
На основе запросов на извлечение GitHub в Upptime ↩︎
На основе запросов на извлечение GitHub в Upptime ↩︎