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

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

Піонери, які нам довіряють: Айзек З. Шлютер і Forward Email

Ми пишаємося тим, що маємо Ісаак З. Шлютер (GitHub: isaacs) як користувач. Ісаак створив над рівнем моря і допомагав будувати Node.js. Його довіра до Forward Email свідчить про нашу увагу до якості та безпеки. Isaac використовує 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 версій від 0.6 до v0.10».

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

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

Архітектор, що стоїть за кодом: подорож Ніка Бо

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

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

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

[!ВАЖЛИВО] Express був спочатку створений TJ Holowaychuk, плідним учасником відкритого коду, який сформував більшу частину екосистеми Node.js. Ми вдячні TJ за основоположну роботу та поважаємо його рішення зробити перерву з його обширних внесків у відкритий код.

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

Внески в Koa Framework

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

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

Від індивідуального учасника до лідера організації

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

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

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

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

Кабіна: структуроване журналювання для сучасних застосувань

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

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

The bson-objectid пакет заслуговує на особливу згадку, його понад 1,7 мільйона завантажень лише за два місяці[^2]. Ця легка реалізація MongoDB ObjectID стала вибором для розробників, яким потрібні ідентифікатори без повних залежностей MongoDB.

Сканер спаму: боротьба зі зловживанням електронною поштою

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

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

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

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

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

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

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

Брі є ключовою частиною forwardemail.net, виконуючи важливі фонові завдання, як-от обробка електронної пошти, очищення та планове обслуговування. Використання Bree у пересиланні електронної пошти свідчить про наше прагнення використовувати наші власні інструменти у виробництві, гарантуючи, що вони відповідають високим стандартам надійності.

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

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

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

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

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

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

витончений: Elegant Application Shutdown

@ladjs/graceful вирішує критичну проблему елегантного завершення роботи програм Node.js. Завдяки понад 70 зіркам GitHub, цей пакет гарантує, що ваша програма може завершити роботу без втрати даних або зависання з’єднань. Ключові особливості:

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

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

Upptime: Відстеження часу безвідмовної роботи з відкритим кодом

The Організація 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.
  • Потужні сповіщення: інтегрується з різними каналами сповіщень, включаючи електронну пошту, SMS і Slack.

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

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

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

Наші внески в екосистему Forward Email

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

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

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

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

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

Петля зворотного зв'язку

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

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

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

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

Основні принципи Forward Email: основа досконалості

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

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

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

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

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

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

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

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

Орієнтація на Scrappy, Bootstrapped розробника

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Цифри не брешуть: наша приголомшлива статистика завантажень npm

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

Top npm Packages by Downloads

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

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

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

[!ПРИМІТКА] Кілька інших пакетів, які ми підтримуємо, але не створювали, мають ще більшу кількість завантажень, зокрема form-data (738 млн+ завантажень), toidentifier (309 млн+ завантажень), stackframe (116 млн+ завантажень) і error-stack-parser (113 млн+ завантажень). Ми маємо честь зробити внесок у ці пакети, поважаючи роботу їхніх оригінальних авторів.

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

Package Categories Distribution

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

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

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

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

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

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

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

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

[!ПОРАДА] Стабільність відкритого вихідного коду полягає не лише в додаванні коду, а й у підтримці розробників, які підтримують критичну інфраструктуру.

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

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

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

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

Sindre Sorhus: головний керівник пакета службових програм

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

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

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

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

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

Порятунок Koa-Router

У лютому 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

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

Розширення основної функціональності Nodemailer

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

  • Покращення сервера SMTP: ми виправили помилки синтаксичного аналізу, проблеми обробки потоку та проблеми конфігурації TLS у компоненті сервера SMTP[^16][^17].
  • Покращення аналізатора пошти: ми усунули помилки декодування послідовності символів і проблеми синтаксичного аналізатора, які могли спричинити збої обробки електронної пошти[^18][^19].

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

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

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 ping, щоб забезпечити більш надійне тестування з’єднання[^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 через 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-запити впродовж пересилання електронної пошти. Це забезпечує глобальне кешування для DNS у масштабі з узгодженістю 1:1 у будь-якому регіоні, програмі чи процесі, що є критичним для надійної доставки електронної пошти в розподіленій системі.

Вплив на підприємство: від відкритого коду до критично важливих рішень

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

Тематичні дослідження критично важливої інфраструктури електронної пошти

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

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

  • Enterprise Linux Solutions: The Практичний приклад корпоративної електронної пошти Canonical Ubuntu демонструє, як наш підхід із відкритим вихідним кодом ідеально відповідає потребам корпоративних постачальників Linux, пропонуючи їм прозорість і контроль, яких вони потребують.

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

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

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

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

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

У найближчі роки ми зобов’язуємося:

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

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

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

[^1]: статистика завантажень npm для салону, квітень 2025 р [^2]: статистика завантажень npm для bson-objectid, лютий-березень 2025 р. [^3]: статистика завантажень npm для url-regex-safe, квітень 2025 р [^4]: кількість зірок GitHub для forwardemail/forwardemail.net станом на квітень 2025 р. [^5]: статистика завантажень npm для електронного листа попереднього перегляду, квітень 2025 р [^7]: статистика завантажень npm для суперагента, лютий-березень 2025 р [^8]: статистика завантажень npm для супертесту, лютий-березень 2025 р [^9]: статистика завантажень npm для електронного листа попереднього перегляду, лютий-березень 2025 р [^10]: статистика завантажень npm для салону, лютий-березень 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 для шаблонів електронної пошти, лютий-березень 2025 р. [^40]: статистика завантажень npm для get-paths, лютий-березень 2025 р. [^41]: статистика завантажень npm для dotenv-parse-variables, лютий-березень 2025 р. [^42]: статистика завантажень npm для @koa/multer, лютий-березень 2025 р.