Десятиліття впливу: Як наші npm-пакети досягли мільярда завантажень та вплинули на JavaScript

Передмова

У світі JavaScript та Node.js деякі пакети є важливими — їх завантажують мільйони разів щодня та вони забезпечують роботу додатків по всьому світу. За цими інструментами стоять розробники, зосереджені на якості з відкритим кодом. Сьогодні ми показуємо, як наша команда допомагає створювати та підтримувати npm-пакети, які стали ключовими частинами екосистеми JavaScript.

Піонери, які нам довіряють: Ісаак З. Шлютер та переадресація електронної пошти

Ми пишаємося тим, що Ісаак З. Шлютер (GitHub: isaacs) є нашим користувачем. Ісаак створив нпм та допоміг створити Node.js. Його довіра до Forward Email свідчить про нашу зосередженість на якості та безпеці. Ісаак використовує Forward Email для кількох доменів, включаючи izs.me.

Вплив Ісаака на JavaScript величезний. У 2009 році він був серед перших, хто побачив потенціал Node.js, працюючи з Раян Дал, який створив платформу. Як сказав Ісаак у інтерв'ю журналу Increment: «Серед цієї дуже маленької спільноти людей, які намагалися зрозуміти, як реалізувати серверний JS, Райан Дал створив 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 файлової системи та потоки» та «виконував обов'язки BDFL (Довічного Довічного Диктатора) проекту протягом 2 років, забезпечуючи постійно зростаючу якість та надійний процес збірки для версій Node.js від v0.6 до v0.10».

Ісаак керував Node.js у ключовий період зростання, встановлюючи стандарти, які досі формують платформу. Пізніше, у 2014 році, він заснував npm, Inc. для підтримки реєстру npm, який до цього керував самостійно.

Ми дякуємо Ісааку за його величезний внесок у JavaScript і продовжуємо використовувати багато створених ним пакетів. Його робота змінила те, як ми створюємо програмне забезпечення та як мільйони розробників діляться кодом по всьому світу.

Архітектор коду: Шлях Ніка Боуга

В основі нашого успіху у сфері відкритого коду лежить Нік Бо, засновник і власник Forward Email. Його робота в JavaScript охоплює майже 20 років і вплинула на те, як незліченна кількість розробників створюють додатки. Його шлях у сфері відкритого коду демонструє як технічні навички, так і лідерство в спільноті.

Експрес-технічний комітет та основні внески

Завдяки досвіду Ніка у веб-фреймворках він отримав місце на Експрес-технічний комітет, де допомагав з одним із найбільш використовуваних фреймворків Node.js. Зараз Нік вказаний як неактивний учасник на Сторінка спільноти Express.

Important

Express був спочатку створений Ті Джей Холовайчуком, плідним учасником розробки з відкритим кодом, який значною мірою сформував екосистему Node.js. Ми вдячні Ті Джей за основоположну роботу та поважаємо його рішення зробити перерву за його значний внесок у розробку з відкритим кодом.

Як член Експрес-технічний комітет, Нік виявив велику увагу до деталей у таких питаннях, як уточнення документації req.originalUrl та виправлення проблем з обробкою багаточастинних форм.

Внески до структури Koa

Робота Ніка з Фреймворк Коа — сучасною, легшою альтернативою Express, також створеною Ті Джей Холовайчуком, — ще раз демонструє його відданість удосконаленню інструментів веб-розробки. Його внесок у Koa включає як вирішення проблем, так і код за допомогою запитів на зняття, вирішення проблем з помилками, управління типами контенту та покращення документації.

Його робота в 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-адрес. Цей пакет демонструє наш підхід до відкритого коду: пошук поширеної проблеми (у цьому випадку, вразливості Повторити у перевірці URL-адрес), створення надійного рішення та його ретельне обслуговування.

Брі: Сучасне планування завдань з робочими потоками

Організація Брі – це наша відповідь на поширену проблему Node.js: надійне планування завдань. Основний пакет bree, який має понад 3100 зірок на GitHub, надає сучасний планувальник завдань, що використовує робочі потоки Node.js для кращої продуктивності та надійності.

Note

Bree було створено після того, як ми допомогли підтримувати Порядок денний, застосовуючи отриманий досвід для створення кращого планувальника завдань. Наш внесок у порядок денний допоміг нам знайти способи покращення планування завдань.

Чим Bree відрізняється від інших планувальників, таких як Agenda:

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

Bree є ключовою частиною 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 мільйона разів, став важливим інструментом для розробників, які працюють із шаблонами електронних листів. Забезпечуючи простий спосіб попереднього перегляду електронних листів під час розробки, він вирішує поширену проблему створення програм із підтримкою електронної пошти.

Хлопець: Основні утиліти та інструменти 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 має понад 13 000 зірок GitHub, що робить його одним із найпопулярніших проектів, у які ми вносимо свій вклад. Upptime надає монітор часу безвідмовної роботи та сторінку стану на базі GitHub, яка працює повністю без сервера.

Ми використовуємо Upptime для власної сторінки статусу за адресою https://status.forwardemail.net, а вихідний код доступний за адресою https://github.com/forwardemail/status.forwardemail.net.

Особливістю Upptime є його архітектура:

  • 100% відкритий код: Кожен компонент має повністю відкритий код та може бути налаштований.
  • Працює на GitHub: Використовує дії, проблеми та сторінки GitHub для безсерверного рішення для моніторингу.
  • Сервер не потрібен: На відміну від традиційних інструментів моніторингу, Upptime не вимагає запуску чи обслуговування сервера.
  • Автоматична сторінка стану: Генерує гарну сторінку стану, яку можна розмістити на сторінках GitHub.
  • Потужні сповіщення: Інтегрується з різними каналами сповіщень, включаючи електронну пошту, SMS та Slack.

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

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

Сотні організацій, які шукають прозорий та надійний спосіб моніторингу своїх послуг і повідомлення про стан користувачів, використовують Uptime. Успіх проекту демонструє силу створення інструментів, які використовують існуючу інфраструктуру (у цьому випадку GitHub) для вирішення поширених проблем новими способами.

Наш внесок в екосистему пересилання електронної пошти

Хоча наші пакети з відкритим кодом використовуються розробниками по всьому світу, вони також формують основу нашого власного сервісу Forward Email. Ця подвійна роль — як творців, так і користувачів цих інструментів — дає нам унікальний погляд на їхнє реальне застосування та стимулює постійне вдосконалення.

Від пакетів до виробництва

Шлях від окремих пакетів до цілісної виробничої системи включає ретельну інтеграцію та розширення. Для Forward Email цей процес включає:

  • Користувацькі розширення: Створення розширень для переадресації електронної пошти для наших пакетів з відкритим кодом, які відповідають нашим унікальним вимогам.
  • Шаблони інтеграції: Розробка шаблонів взаємодії цих пакетів у робочому середовищі.
  • Оптимізація продуктивності: Виявлення та усунення вузьких місць у продуктивності, які виникають лише у великих масштабах.
  • Посилення безпеки: Додавання додаткових рівнів безпеки, специфічних для обробки електронної пошти та захисту даних користувачів.

Ця робота являє собою тисячі годин розробки, що виходить за рамки самих основних пакетів, результатом чого є надійний та безпечний сервіс електронної пошти, який використовує найкращі з наших внесків у сфері відкритого коду.

Цикл зворотного зв'язку

Мабуть, найціннішим аспектом використання власних пакетів у продакшені є цикл зворотного зв'язку, який він створює. Коли ми стикаємося з обмеженнями або крайніми випадками в Forward Email, ми не просто виправляємо їх локально — ми вдосконалюємо базові пакети, що приносить користь як нашому сервісу, так і ширшій спільноті.

Такий підхід призвів до численних покращень:

  • Вигідне завершення роботи Bree: Потреба Forward Email у розгортанні з нульовим часом простою призвела до покращених можливостей вимкнення роботи Bree.
  • Розпізнавання шаблонів сканера спаму: Реальні шаблони спаму, виявлені в Forward Email, вплинули на алгоритми виявлення сканера спаму.
  • Оптимізація продуктивності Cabin: Великі обсяги реєстрації у виробничому середовищі виявили можливості оптимізації Cabin, які вигідні для всіх користувачів.

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

Основні принципи пересилання електронної пошти: фундамент досконалості

Пересилання електронної пошти розроблено відповідно до набору основних принципів, якими ми керуємося при прийнятті всіх рішень щодо розробки. Ці принципи, детально описані в нашому вебсайт, гарантують, що наш сервіс залишається зручним для розробників, безпечним та зосередженим на конфіденційності користувачів.

Завжди зручний для розробників, орієнтований на безпеку та прозорий

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

Цей принцип проявляється в нашій детальній документації, чітких повідомленнях про помилки та відкритому спілкуванні як про успіхи, так і про проблеми. Роблячи всю нашу кодову базу відкритою, ми заохочуємо до пильної уваги та співпраці, зміцнюючи як наше програмне забезпечення, так і ширшу екосистему.

Дотримання перевірених часом принципів розробки програмного забезпечення

Ми дотримуємося кількох усталених принципів розробки програмного забезпечення, які довели свою цінність протягом десятиліть:

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

Ці принципи — не просто теоретичні концепції, вони вбудовані в нашу щоденну практику розробки. Наприклад, наша відданість філософії Unix очевидна в тому, як ми структурували наші npm-пакети: невеликі, сфокусовані модулі, які можна об'єднувати для вирішення складних проблем.

Орієнтація на недбалих розробників, що працюють на бутстрэпі

Ми спеціально орієнтуємося на розробників, які працюють недбало, але працюють за принципом рамен-вигідний. Цей фокус впливає на все: від нашої моделі ціноутворення до технічних рішень. Ми розуміємо труднощі створення продуктів з обмеженими ресурсами, бо самі пройшли через це.

Цей принцип особливо важливий у нашому підході до відкритого коду. Ми створюємо та підтримуємо пакети, які вирішують реальні проблеми для розробників без корпоративних бюджетів, роблячи потужні інструменти доступними для всіх, незалежно від їхніх ресурсів.

Принципи на практиці: Кодова база для пересилання електронної пошти

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

  • Пакети, орієнтовані на безпеку, такі як mailauth для автентифікації електронної пошти
  • Зручні для розробників інструменти, такі як preview-email для легшого налагодження
  • Модульні компоненти, такі як різні утиліти p-* від Sindre Sorhus

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

Конфіденційність за проектом

Конфіденційність — це не другорядна чи маркетингова функція для Forward Email, а фундаментальний принцип дизайну, який визначає кожен аспект нашого сервісу та коду:

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

Це зобов'язання поширюється на наші пакети з відкритим кодом, які розроблені з урахуванням найкращих практик безпеки та конфіденційності, вбудованих з самого початку.

Сталий відкритий код

Ми вважаємо, що програмне забезпечення з відкритим кодом потребує стійких моделей для процвітання в довгостроковій перспективі. Наш підхід включає:

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

Зосереджуючись на сталому розвитку, ми гарантуємо, що наш внесок у сфері відкритого коду може продовжувати зростати та вдосконалюватися з часом, а не занедбуватися.

Цифри не брешуть: наша вражаюча статистика завантажень npm

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

Найкращі npm-пакети за кількістю завантажень

Important

Хоча ми пишаємося тим, що допомагаємо підтримувати кілька пакетів, які часто завантажуються, в екосистемі JavaScript, ми хочемо визнати, що багато з цих пакетів були спочатку створені іншими талановитими розробниками. Такі пакети, як superagent та supertest, були спочатку створені Т. Дж. Холовайчуком, чий плідний внесок у розробку програмного забезпечення з відкритим кодом відіграв важливу роль у формуванні екосистеми Node.js.

Погляд на наш вплив з висоти пташиного польоту

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

Note

Кілька інших пакетів, які ми допомагаємо підтримувати, але не створювали, мають ще більшу кількість завантажень, зокрема form-data (понад 738 млн завантажень), toidentifier (понад 309 млн завантажень), stackframe (понад 116 млн завантажень) та error-stack-parser (понад 113 млн завантажень). Для нас честь зробити свій внесок у ці пакети, поважаючи при цьому працю їхніх оригінальних авторів.

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

Розподіл категорій пакетів

Щоденний вплив у великому масштабі

Щоденні моделі завантажень демонструють стабільне використання з високим обсягом завантажень, причому піки сягають мільйонів завантажень на день[21]. Така стабільність свідчить про стабільність і надійність цих пакетів — розробники не просто випробовують їх; вони інтегрують їх у свої основні робочі процеси та покладаються на них день у день.

Щотижневі показники завантажень демонструють ще вражаючі цифри, постійно коливаючись близько десятків мільйонів завантажень на тиждень[22]. Це являє собою величезний вплив на екосистему JavaScript, оскільки ці пакети працюють у виробничих середовищах по всьому світу.

За межами сирих чисел

Хоча статистика завантажень сама по собі вражає, вона розповідає глибшу історію про довіру спільноти до цих пакетів. Підтримка пакетів у такому масштабі вимагає непохитної відданості:

  • Зворотна сумісність: Зміни необхідно ретельно обмірковувати, щоб уникнути порушення роботи існуючих реалізацій.
  • Безпека: Оскільки мільйони програм залежать від цих пакетів, вразливості безпеки можуть мати далекосяжні наслідки.
  • Продуктивність: У такому масштабі навіть незначні покращення продуктивності можуть мати значні сукупні переваги.
  • Документація: Чітка та вичерпна документація є важливою для пакетів, що використовуються розробниками будь-якого рівня досвіду.

Постійне зростання кількості завантажень з часом відображає успіх у виконанні цих зобов'язань, зміцненні довіри спільноти розробників завдяки надійним та добре підтримуваним пакетам.

Підтримка екосистеми: Наші спонсорські програми з відкритим кодом

Tip

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

Окрім нашого прямого внеску в екосистему JavaScript, ми пишаємося тим, що спонсоруємо видатних розробників Node.js, чия робота є основою багатьох сучасних програм. Наші спонсорські програми включають:

Андріс Рейнман: Піонер інфраструктури електронної пошти

Андріс Рейнман є творцем Nodemailer, найпопулярнішої бібліотеки для надсилання електронної пошти для Node.js з понад 14 мільйонами завантажень щотижня[23]. Його робота поширюється на інші критичні компоненти інфраструктури електронної пошти, такі як SMTP-сервер, Поштовий аналізатор та ДикаКачка.

Наше спонсорство допомагає забезпечити постійну підтримку та розвиток цих важливих інструментів, які забезпечують електронну комунікацію для незліченних Node.js-додатків, включаючи наш власний сервіс пересилання електронної пошти.

Sindre Sorhus: ідея пакета утиліт

Сіндре Сорхус є одним із найплідніших розробників програмного забезпечення з відкритим кодом в екосистемі JavaScript, маючи понад 1000 npm-пакетів. Його утиліти, такі як p-карта, p-повторна спроба та is-stream, є фундаментальними структурними блоками, що використовуються в усій екосистемі Node.js.

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

Ці спонсорські внески відображають нашу відданість ширшій екосистемі відкритого коду. Ми усвідомлюємо, що наш власний успіх побудований на фундаменті, закладеному цими та іншими учасниками, і ми прагнемо забезпечити сталий розвиток усієї екосистеми.

Виявлення вразливостей безпеки в екосистемі JavaScript

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

Рятувальна служба Koa-Router

У лютому 2019 року Нік виявив критичну проблему з підтримкою популярного пакета koa-router. Оскільки він мав статус повідомляється на Hacker News, пакет був покинутий його початковим розробником, що залишило вразливості безпеки неусунутими, а спільноту — без оновлень.

Warning

Покинуті пакети з вразливостями безпеки становлять значні ризики для всієї екосистеми, особливо коли їх завантажують мільйони разів на тиждень.

У відповідь Нік створив @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

Nodemailer є основою надсилання електронної пошти в Node.js, і наш внесок допоміг зробити її надійнішою:

  • Покращення SMTP-сервера: Ми виправили помилки парсингу, проблеми з обробкою потоків та проблеми з конфігурацією TLS у компоненті SMTP-сервера[24][25].
  • Покращення парсера пошти: Ми виправили помилки декодування послідовності символів та проблеми з парсером, які могли спричиняти збої обробки електронної пошти[26][27].

Ці внески гарантують, що Nodemailer залишається надійною основою для обробки електронної пошти в Node.js-додатках, включаючи Forward Email.

Покращення автентифікації електронної пошти за допомогою Mailauth

Пошта забезпечує критично важливу функцію автентифікації електронної пошти, а наші внески значно покращили її можливості:

  • Покращення перевірки DKIM: Ми виявили та повідомили про проблеми з кешем DNS у X/Twitter, які призводили до збою DKIM для вихідних повідомлень, про що повідомлялося на Hacker One[28].
  • Покращення DMARC та ARC: Ми виправили проблеми з перевіркою DMARC та ARC, які могли призвести до неправильних результатів автентифікації[29][30].
  • Оптимізація продуктивності: Ми внесли оптимізації, які покращують продуктивність процесів автентифікації електронної пошти[31][32][33][34].

Ці покращення допомагають забезпечити точність і надійність автентифікації електронної пошти, захищаючи користувачів від фішингових та спуфінгових атак.

Ключові покращення часу безперебійної роботи

Наш внесок у Uptime включає:

  • Моніторинг сертифікатів SSL: Ми додали функцію моніторингу закінчення терміну дії сертифікатів SSL, запобігаючи неочікуваним простоям через прострочені сертифікати[35].
  • Підтримка кількох номерів SMS: Ми реалізували підтримку сповіщення кількох членів команди через SMS про виникнення інцидентів, що покращило час реагування[36].
  • Виправлення перевірки IPv6: Ми виправили проблеми з перевірками підключення IPv6, забезпечивши точніший моніторинг у сучасних мережевих середовищах[37].
  • Підтримка темного/світлого режиму: Ми додали підтримку тем для покращення взаємодії користувача зі сторінками стану[38].
  • Покращена підтримка TCP-Ping: Ми покращили функцію TCP ping, щоб забезпечити надійніше тестування з’єднання[39].

Ці покращення не лише покращують моніторинг статусу 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 Connection: Використовує mx-connect з інтеграцією Tangerine для надійного підключення до поштового сервера
  • Планування завдань: Використовує Bree для надійної фонової обробки завдань з робочими потоками
  • Шаблони: Використовує email-templates для повторного використання таблиць стилів з веб-сайту в повідомленнях клієнтів
  • Сховище електронної пошти: Реалізує індивідуально зашифровані поштові скриньки 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 через pull request #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, пропонуючи їм прозорість та контроль, які їм потрібні.

  • Фонд відкритого коду: Мабуть, найбільш підтверджуючим є наше партнерство з Linux Foundation, як задокументовано в Тематичне дослідження корпоративної електронної пошти Linux Foundation, де наш сервіс забезпечує комунікацію для тієї самої організації, яка відповідає за розробку Linux.

Існує чудова симетрія в тому, як наші пакети з відкритим кодом, які дбайливо підтримувалися протягом багатьох років, дозволили нам створити поштовий сервіс, який тепер підтримує саме ті спільноти та організації, що підтримують програмне забезпечення з відкритим кодом. Цей повний цикл — від надання окремих пакетів до забезпечення корпоративної поштової інфраструктури для лідерів у сфері відкритого коду — є остаточним підтвердженням нашого підходу до розробки програмного забезпечення.

Десятиліття відкритого коду: погляд у майбутнє

Озираючись на десятиліття внесків у розробку програмного забезпечення з відкритим кодом і сподіваючись на наступні десять років, ми сповнені вдячності спільноті, яка підтримувала нашу роботу, і з нетерпінням чекаємо на майбутнє.

Наш шлях від окремих розробників пакетів до тих, хто підтримує комплексну інфраструктуру електронної пошти, що використовується великими підприємствами та фондами з відкритим кодом, був вражаючим. Це свідчить про силу розробки з відкритим кодом та вплив, який продумане, добре підтримуване програмне забезпечення може мати на ширшу екосистему.

У найближчі роки ми прагнемо:

  • Продовжуємо підтримувати та вдосконалювати наші існуючі пакети, забезпечуючи їхню надійність для розробників у всьому світі.
  • Розширюємо наш внесок у критично важливі інфраструктурні проекти, зокрема в сферах електронної пошти та безпеки.
  • Розширення можливостей 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 для superagent, лютий-березень 2025 р. ↩︎

  6. статистика завантажень npm для supertest, лютий-березень 2025 р. ↩︎

  7. статистика завантажень npm для koa, лютий-березень 2025 р. ↩︎

  8. статистика завантажень npm для @koa/router, лютий-березень 2025 р. ↩︎

  9. статистика завантажень npm для koa-router, лютий-березень 2025 ↩︎

  10. статистика завантажень npm для url-regex, лютий-березень 2025 р. ↩︎

  11. статистика завантажень npm для preview-email, лютий-березень 2025 р. ↩︎

  12. статистика завантажень npm для cabin, лютий-березень 2025 р. ↩︎

  13. статистика завантажень npm для @breejs/later, лютий-березень 2025 р. ↩︎

  14. статистика завантажень npm для email-templates, лютий-березень 2025 р. ↩︎

  15. статистика завантажень npm для get-paths, лютий-березень 2025 р. ↩︎

  16. статистика завантажень npm для url-regex-safe, лютий-березень 2025 ↩︎

  17. статистика завантажень npm для dotenv-parse-variables, лютий-березень 2025 р. ↩︎

  18. статистика завантажень npm для @koa/multer, лютий-березень 2025 р. ↩︎

  19. статистика завантажень npm для spamscanner, лютий-березень 2025 ↩︎

  20. статистика завантажень npm для bree, лютий-березень 2025 р. ↩︎

  21. Щоденні моделі завантажень зі статистики npm, квітень 2025 ↩︎

  22. Щотижневі моделі завантажень зі статистики npm, квітень 2025 ↩︎

  23. статистика завантажень npm для nodemailer, квітень 2025 ↩︎

  24. https://github.com/nodemailer/smtp-server/issues/155 ↩︎

  25. https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min ↩︎

  26. https://github.com/nodemailer/mailparser/issues/261 ↩︎

  27. https://github.com/nodemailer/nodemailer/issues/1102 ↩︎

  28. https://github.com/postalsys/mailauth/issues/30 ↩︎

  29. https://github.com/postalsys/mailauth/issues/58 ↩︎

  30. https://github.com/postalsys/mailauth/issues/48 ↩︎

  31. https://github.com/postalsys/mailauth/issues/74 ↩︎

  32. https://github.com/postalsys/mailauth/issues/75 ↩︎

  33. https://github.com/postalsys/mailauth/issues/60 ↩︎

  34. https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min0 ↩︎

  35. На основі проблем GitHub у репозиторії Upptime ↩︎

  36. На основі проблем GitHub у репозиторії Upptime ↩︎

  37. На основі проблем GitHub у репозиторії Upptime ↩︎

  38. На основі запитів на зняття даних GitHub до Upptime ↩︎

  39. На основі запитів на зняття даних GitHub до Upptime ↩︎