Десятиліття впливу: як наші npm пакети досягли 1 мільярда завантажень і сформували JavaScript
Передмова
У світі JavaScript та Node.js деякі пакети є незамінними — їх завантажують мільйони разів щодня, і вони живлять додатки по всьому світу. За цими інструментами стоять розробники, які зосереджені на якості відкритого коду. Сьогодні ми показуємо, як наша команда допомагає створювати та підтримувати npm-пакети, які стали ключовими частинами екосистеми JavaScript.
Піонери, які нам довіряють: Айзек З. Шлюетер та Forward Email
Ми пишаємося тим, що Айзек З. Шлюетер (GitHub: isaacs) є нашим користувачем. Айзек створив npm і допоміг побудувати Node.js. Його довіра до Forward Email демонструє нашу увагу до якості та безпеки. Айзек використовує Forward Email для кількох доменів, включно з izs.me.
Вплив Айзека на JavaScript величезний. У 2009 році він був одним із перших, хто побачив потенціал Node.js, працюючи з Раяном Далем, який створив платформу. Як сказав Айзек в інтерв’ю для журналу Increment: "Посеред цієї дуже маленької спільноти людей, які намагалися зрозуміти, як реалізувати серверний JS, Райан Даль представив Node, що було дуже чітко правильним підходом. Я приєднався до цього і дуже активно долучився приблизно в середині 2009 року."
Note
Для тих, хто цікавиться історією Node.js, існують чудові документальні фільми, що описують його розвиток, зокрема The Story of Node.js та 10 Things I Regret About Node.js - Ryan Dahl. Особистий вебсайт Раяна Даля personal website також містить цінні відомості про його роботу.
Від створення 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 через ключовий період зростання, встановивши стандарти, які й досі формують платформу. Пізніше він заснував npm, Inc. у 2014 році для підтримки реєстру npm, який раніше керував самостійно.
Ми дякуємо Айзеку за його величезний внесок у JavaScript і продовжуємо використовувати багато пакетів, які він створив. Його робота змінила спосіб створення програмного забезпечення та те, як мільйони розробників діляться кодом у всьому світі.
Архітектор коду: шлях Ніка Бауга
У центрі нашого успіху з відкритим кодом — Нік Бауг, засновник і власник Forward Email. Його робота з JavaScript триває майже 20 років і сформувала спосіб, у який безліч розробників створюють додатки. Його шлях у відкритому коді демонструє як технічні навички, так і лідерство в спільноті.
Технічний комітет Express та основні внески
Експертиза Ніка у веб-фреймворках принесла йому місце в Технічному комітеті Express, де він допомагав з одним із найпопулярніших фреймворків Node.js. Наразі Нік зазначений як неактивний учасник на сторінці спільноти Express.
Important
Express спочатку був створений TJ Holowaychuk, плідним контрибутором відкритого коду, який сформував значну частину екосистеми Node.js. Ми вдячні TJ за його фундаментальну роботу і поважаємо його рішення зробити паузу від численних внесків у відкритий код.
Як член Технічного комітету Express, Нік проявив велику увагу до деталей у питаннях, таких як уточнення документації req.originalUrl та виправлення проблем з обробкою multipart форм.
Внески у фреймворк Koa
Робота Ніка з фреймворком Koa — сучасною, більш легкою альтернативою Express, також створеною TJ Holowaychuk — ще більше демонструє його відданість покращенню інструментів веб-розробки. Його внески у Koa включають як питання, так і код через pull-запити, що стосуються обробки помилок, керування типами контенту та покращення документації.
Його робота як з Express, так і з Koa дає йому унікальний погляд на веб-розробку в Node.js, допомагаючи нашій команді створювати пакети, які добре працюють у кількох екосистемах фреймворків.
Від індивідуального контрибутору до лідера організації
Те, що почалося як допомога існуючим проєктам, переросло у створення та підтримку цілих екосистем пакетів. Нік заснував кілька організацій на GitHub — зокрема Cabin, Spam Scanner, Forward Email, Lad та Bree — кожна з яких вирішує конкретні потреби спільноти JavaScript.
Цей перехід від контрибутору до лідера демонструє бачення Ніка щодо добре спроєктованого програмного забезпечення, яке вирішує реальні проблеми. Організовуючи пов’язані пакети під сфокусованими організаціями GitHub, він створив екосистеми інструментів, які працюють разом, залишаючись модульними та гнучкими для ширшої спільноти розробників.
Наші організації на GitHub: екосистеми інновацій
Ми організовуємо нашу роботу з відкритим кодом навколо сфокусованих організацій на GitHub, кожна з яких вирішує конкретні потреби в JavaScript. Ця структура створює цілісні сімейства пакетів, які добре працюють разом, залишаючись модульними.
Cabin: структуроване логування для сучасних додатків
Організація Cabin — це наш підхід до простого, потужного логування додатків. Основний пакет cabin має майже 900 зірок на GitHub та понад 100 000 щотижневих завантажень[1]. Cabin забезпечує структуроване логування, яке працює з популярними сервісами, такими як Sentry, LogDNA та Papertrail.
Особливість Cabin — це продуманий API та система плагінів. Підтримуючі пакети, такі як axe для middleware Express та parse-request для парсингу HTTP-запитів, демонструють нашу відданість комплексним рішенням, а не ізольованим інструментам.
Пакет bson-objectid заслуговує на особливу увагу, з понад 1,7 мільйонами завантажень лише за два місяці[2]. Ця легка реалізація MongoDB ObjectID стала вибором розробників, яким потрібні ідентифікатори без повної залежності від MongoDB.
Spam Scanner: боротьба з зловживаннями електронною поштою
Організація Spam Scanner демонструє нашу відданість вирішенню реальних проблем. Основний пакет spamscanner забезпечує розширене виявлення спаму в електронній пошті, але саме пакет url-regex-safe здобув вражаюче поширення.
З понад 1,2 мільйонами завантажень за два місяці[3], url-regex-safe виправляє критичні проблеми безпеки в інших регулярних виразах для виявлення URL. Цей пакет демонструє наш підхід до відкритого коду: знаходити поширену проблему (у цьому випадку, вразливості ReDoS у валідації URL), створювати надійне рішення та ретельно його підтримувати.
Bree: Сучасне планування завдань з використанням Worker Threads
Організація Bree — це наша відповідь на поширену проблему в Node.js: надійне планування завдань. Основний пакет bree, який має понад 3 100 зірок на GitHub, забезпечує сучасний планувальник завдань, використовуючи worker threads Node.js для кращої продуктивності та надійності.
Note
Bree було створено після того, як ми допомагали підтримувати Agenda, застосовуючи отримані уроки для створення кращого планувальника завдань. Наші внески в Agenda допомогли нам знайти способи покращення планування завдань.
Що відрізняє Bree від інших планувальників, таких як Agenda:
- Відсутність зовнішніх залежностей: на відміну від Agenda, яка потребує MongoDB, Bree не вимагає Redis або MongoDB для керування станом завдань.
- Worker Threads: Bree використовує worker threads Node.js для ізольованих процесів, що забезпечує кращу ізоляцію та продуктивність.
- Простий API: Bree пропонує детальний контроль із простотою, що полегшує реалізацію складних потреб у плануванні.
- Вбудована підтримка: такі речі, як плавне перезавантаження, cron-завдання, дати та зручний для людини формат часу, включені за замовчуванням.
Bree є ключовою частиною forwardemail.net, обробляючи критичні фонові завдання, такі як обробка електронної пошти, очищення та планове обслуговування. Використання Bree у Forward Email демонструє нашу відданість використанню власних інструментів у виробництві, забезпечуючи їх відповідність високим стандартам надійності.
Ми також використовуємо та цінуємо інші чудові пакети для worker threads, такі як piscina, та HTTP-клієнти, як-от undici. Piscina, як і Bree, використовує worker threads Node.js для ефективної обробки завдань. Ми дякуємо Matteo Collina, який підтримує як undici, так і piscina, за його значний внесок у Node.js. Matteo входить до Технічного керівного комітету Node.js і суттєво покращив можливості HTTP-клієнтів у Node.js.
Forward Email: Відкрита інфраструктура електронної пошти
Наш найамбітніший проєкт — це Forward Email, сервіс відкритої електронної пошти, який надає пересилання пошти, зберігання та API-сервіси. Основний репозиторій має понад 1 100 зірок на GitHub[4], що свідчить про визнання спільнотою цієї альтернативи пропрієтарним поштовим сервісам.
Пакет preview-email цієї організації, який за два місяці завантажили понад 2,5 мільйона разів[5], став незамінним інструментом для розробників, що працюють із шаблонами електронної пошти. Забезпечуючи простий спосіб перегляду листів під час розробки, він вирішує поширену проблему при створенні додатків із підтримкою електронної пошти.
Lad: Основні утиліти та інструменти для Koa
Організація Lad надає колекцію основних утиліт та інструментів, орієнтованих насамперед на покращення екосистеми фреймворку Koa. Ці пакети вирішують поширені проблеми веб-розробки і розроблені так, щоб працювати бездоганно разом, залишаючись при цьому корисними окремо.
koa-better-error-handler: Покращена обробка помилок для Koa
koa-better-error-handler пропонує кращу обробку помилок для додатків Koa. З понад 50 зірками на GitHub, цей пакет робить ctx.throw здатним генерувати дружні для користувача повідомлення про помилки, усуваючи кілька обмежень вбудованого обробника помилок Koa:
- Виявляє та коректно обробляє помилки Node.js DNS, помилки Mongoose та Redis
- Використовує Boom для створення послідовних, добре відформатованих відповідей з помилками
- Зберігає заголовки (на відміну від вбудованого обробника Koa)
- Підтримує відповідні коди стану замість стандартного 500
- Підтримує flash-повідомлення та збереження сесій
- Надає HTML-списки помилок для валідації
- Підтримує кілька типів відповідей (HTML, JSON та plain text)
Цей пакет особливо цінний при використанні разом із
koa-404-handlerдля комплексного управління помилками в додатках Koa.
passport: Аутентифікація для Lad
@ladjs/passport розширює популярний middleware аутентифікації 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 відображає нашу відданість прозорому, відкритому моніторингу. Головний репозиторій 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 тощо) з миттєвими toast-сповіщеннями, змінами іконок бейджів, кольорами попередження та іншим.
Бібліотека @octokit/core дозволяє нам отримувати дані в реальному часі з нашого репозиторію Upptime на GitHub, обробляти їх і відображати у зручному для користувача вигляді. Коли будь-який сервіс має збій або погіршення продуктивності, користувачі негайно отримують сповіщення через візуальні індикатори без необхідності залишати основний додаток. Ця безшовна інтеграція гарантує, що наші користувачі завжди мають актуальну інформацію про стан системи, підвищуючи прозорість і довіру.
Upptime було прийнято сотнями організацій, які шукають прозорий і надійний спосіб моніторингу своїх сервісів та комунікації статусу з користувачами. Успіх проєкту демонструє силу створення інструментів, що використовують існуючу інфраструктуру (у цьому випадку GitHub) для вирішення поширених проблем новими способами.
Наш внесок у екосистему Forward Email
Хоча наші пакети з відкритим кодом використовують розробники по всьому світу, вони також становлять основу нашого власного сервісу Forward Email. Ця подвійна роль — як творців, так і користувачів цих інструментів — дає нам унікальний погляд на їхнє реальне застосування та стимулює постійне вдосконалення.
Від пакетів до продуктивної системи
Шлях від окремих пакетів до цілісної продуктивної системи включає ретельну інтеграцію та розширення. Для Forward Email цей процес включає:
- Користувацькі розширення: Створення специфічних для Forward Email розширень наших пакетів з відкритим кодом, які відповідають нашим унікальним вимогам.
- Патерни інтеграції: Розробка патернів взаємодії цих пакетів у продуктивному середовищі.
- Оптимізація продуктивності: Виявлення та усунення вузьких місць продуктивності, які проявляються лише в масштабі.
- Зміцнення безпеки: Додавання додаткових рівнів безпеки, специфічних для обробки електронної пошти та захисту даних користувачів.
Ця робота становить тисячі годин розробки понад основні пакети, що призводить до надійного, безпечного сервісу електронної пошти, який використовує найкраще з наших внесків з відкритим кодом.
Цикл зворотного зв’язку
Можливо, найціннішим аспектом використання наших пакетів у продуктиві є створений цикл зворотного зв’язку. Коли ми стикаємося з обмеженнями або крайніми випадками у Forward Email, ми не просто виправляємо їх локально — ми покращуємо базові пакети, що приносить користь як нашому сервісу, так і ширшій спільноті.
Цей підхід призвів до численних покращень:
- Graceful Shutdown у Bree: Потреба Forward Email у розгортанні без простоїв призвела до вдосконалення можливостей плавного завершення роботи в Bree.
- Розпізнавання патернів у Spam Scanner: Реальні спам-патерни, виявлені у Forward Email, вплинули на алгоритми виявлення Spam Scanner.
- Оптимізації продуктивності в Cabin: Високий обсяг логування в продуктиві виявив можливості оптимізації в Cabin, що вигідно для всіх користувачів.
Підтримуючи цей доброчесний цикл між нашою роботою з відкритим кодом і продуктивним сервісом, ми гарантуємо, що наші пакети залишаються практичними, перевіреними рішеннями, а не теоретичними реалізаціями.
Основні принципи Forward Email: фундамент досконалості
Forward Email розроблений відповідно до набору основних принципів, які керують усіма нашими рішеннями у розробці. Ці принципи, детально описані на нашому вебсайті, забезпечують, що наш сервіс залишається дружнім до розробників, безпечним і орієнтованим на конфіденційність користувачів.
Завжди дружній до розробників, орієнтований на безпеку та прозорий
Наш перший і найголовніший принцип — створювати програмне забезпечення, дружнє до розробників, з дотриманням найвищих стандартів безпеки та конфіденційності. Ми віримо, що технічна досконалість ніколи не повинна шкодити зручності використання, а прозорість будує довіру в нашій спільноті.
Цей принцип проявляється у нашій детальній документації, чітких повідомленнях про помилки та відкритій комунікації як про успіхи, так і про виклики. Роблячи весь наш код відкритим, ми запрошуємо до перевірки та співпраці, зміцнюючи як наше програмне забезпечення, так і ширшу екосистему.
Дотримання перевірених часом принципів розробки програмного забезпечення
Ми дотримуємося кількох усталених принципів розробки програмного забезпечення, які довели свою цінність протягом десятиліть:
- MVC: Розділення обов’язків через патерн Model-View-Controller
- Unix Philosophy: Створення модульних компонентів, які добре виконують одну задачу
- KISS: Зберігати простоту і зрозумілість
- DRY: Не повторюй себе, сприяючи повторному використанню коду
- YAGNI: Ти не будеш цього потребувати, уникаючи передчасної оптимізації
- Twelve Factor: Дотримання найкращих практик для створення сучасних масштабованих додатків
- Occam's razor: Вибір найпростішого рішення, що відповідає вимогам
- Dogfooding: Активне використання власних продуктів Ці принципи — це не просто теоретичні концепції, вони вбудовані в нашу щоденну практику розробки. Наприклад, наша прихильність до філософії Unix очевидна в тому, як ми структурували наші npm пакети: маленькі, сфокусовані модулі, які можна комбінувати для розв’язання складних задач.
Орієнтація на наполегливого, самофінансованого розробника
Ми спеціально орієнтуємося на наполегливого, самофінансованого та ramen-прибуткового розробника. Цей фокус формує все — від нашої цінової моделі до технічних рішень. Ми розуміємо виклики створення продуктів з обмеженими ресурсами, бо самі через це проходили.
Цей принцип особливо важливий у нашому підході до відкритого коду. Ми створюємо та підтримуємо пакети, які розв’язують реальні проблеми розробників без корпоративних бюджетів, роблячи потужні інструменти доступними для всіх незалежно від їхніх ресурсів.
Принципи на практиці: кодова база Forward Email
Ці принципи чітко видно в кодовій базі Forward Email. Наш файл package.json демонструє продуманий вибір залежностей, кожна з яких обрана відповідно до наших основних цінностей:
- Пакети, орієнтовані на безпеку, як-от
mailauthдля автентифікації електронної пошти - Зручні для розробника інструменти, як-от
preview-emailдля полегшення налагодження - Модульні компоненти, як різні утиліти
p-*від Sindre Sorhus
Дотримуючись цих принципів послідовно з часом, ми створили сервіс, якому розробники можуть довіряти у своїй поштовій інфраструктурі — безпечний, надійний і відповідний цінностям спільноти відкритого коду.
Конфіденційність за замовчуванням
Конфіденційність — це не післядумка чи маркетинговий хід для Forward Email, це фундаментальний принцип дизайну, який визначає кожен аспект нашого сервісу та коду:
- Шифрування без доступу: Ми реалізували системи, які технічно унеможливлюють нам читання листів користувачів.
- Мінімальний збір даних: Ми збираємо лише ті дані, які необхідні для надання сервісу, і нічого більше.
- Прозорі політики: Наша політика конфіденційності написана зрозумілою мовою без юридичного жаргону.
- Перевірка відкритим кодом: Наша кодова база з відкритим кодом дозволяє дослідникам безпеки перевіряти наші заяви про конфіденційність.
Ця відданість поширюється і на наші пакети з відкритим кодом, які розроблені з урахуванням найкращих практик безпеки та конфіденційності з самого початку.
Стійкий відкритий код
Ми віримо, що програмне забезпечення з відкритим кодом потребує стійких моделей для довготривалого розвитку. Наш підхід включає:
- Комерційна підтримка: Надання преміальної підтримки та сервісів навколо наших інструментів з відкритим кодом.
- Збалансовані ліцензії: Використання ліцензій, які захищають як свободи користувачів, так і стійкість проєкту.
- Залучення спільноти: Активна взаємодія з контриб’юторами для побудови підтримуючої спільноти.
- Прозорі дорожні карти: Публікація планів розробки, щоб користувачі могли планувати свої дії.
Зосереджуючись на стійкості, ми гарантуємо, що наші внески у відкритий код можуть продовжувати зростати та покращуватися з часом, а не занепадати.
Цифри не брешуть: наші вражаючі статистики завантажень npm
Коли ми говоримо про вплив програмного забезпечення з відкритим кодом, статистика завантажень дає відчутну міру прийняття та довіри. Багато пакетів, які ми допомагаємо підтримувати, досягли масштабу, якого мало які проєкти з відкритим кодом коли-небудь досягають, з сумарною кількістю завантажень у мільярди.
Important
Хоч ми й пишаємося тим, що допомагаємо підтримувати кілька дуже популярних пакетів у екосистемі JavaScript, ми хочемо визнати, що багато з цих пакетів спочатку створили інші талановиті розробники. Пакети, як superagent і supertest, були спочатку створені TJ Holowaychuk, чий плідний внесок у відкритий код був ключовим у формуванні екосистеми Node.js.
Огляд нашого впливу з висоти пташиного польоту
Лише за двомісячний період з лютого по березень 2025 року, найпопулярніші пакети, до яких ми робимо внесок і допомагаємо підтримувати, зафіксували вражаючі показники завантажень:
- superagent: 84,575,829 завантажень[6] (спочатку створений TJ Holowaychuk)
- supertest: 76,432,591 завантажень[7] (спочатку створений TJ Holowaychuk)
- koa: 28,539,295 завантажень[8] (спочатку створений TJ Holowaychuk)
- @koa/router: 11,007,327 завантажень[9]
- koa-router: 3,498,918 завантажень[10]
- url-regex: 2,819,520 завантажень[11]
- preview-email: 2,500,000 завантажень[12]
- cabin: 1,800,000 завантажень[13]
- @breejs/later: 1,709,938 завантажень[14]
- email-templates: 1,128,139 завантажень[15]
- get-paths: 1,124,686 завантажень[16]
- url-regex-safe: 1,200,000 завантажень[17]
- dotenv-parse-variables: 894,666 завантажень[18]
- @koa/multer: 839,585 завантажень[19]
- spamscanner: 145,000 завантажень[20]
- bree: 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 Server, Mailparser та WildDuck.
Наше спонсорство допомагає забезпечити подальше обслуговування та розвиток цих важливих інструментів, які забезпечують електронну комунікацію для численних застосунків Node.js, включно з нашим сервісом Forward Email.
Сіндре Сорхус: геній утилітних пакетів
Сіндре Сорхус є одним із найплідніших учасників відкритого коду в екосистемі JavaScript, автором понад 1000 npm-пакетів. Його утиліти, такі як p-map, p-retry та is-stream, є фундаментальними будівельними блоками, які використовуються по всій екосистемі Node.js.
Спонсоруючи роботу Сіндре, ми допомагаємо підтримувати розвиток цих критичних утиліт, які роблять розробку на JavaScript більш ефективною та надійною.
Ці спонсорства відображають нашу відданість ширшій екосистемі відкритого коду. Ми розуміємо, що наш власний успіх базується на фундаменті, закладеному цими та іншими учасниками, і ми прагнемо забезпечити стійкість усієї екосистеми.
Виявлення вразливостей безпеки в екосистемі JavaScript
Наша відданість відкритому коду виходить за межі розробки функцій і включає ідентифікацію та усунення вразливостей безпеки, які можуть вплинути на мільйони розробників. Декілька наших найважливіших внесків у екосистему JavaScript стосуються безпеки.
Порятунок koa-router
У лютому 2019 року Нік виявив критичну проблему з підтримкою популярного пакету koa-router. Як він повідомив на Hacker News, пакет був покинутий його оригінальним підтримувачем, що залишило вразливості безпеки без уваги і спільноту без оновлень.
Warning
Покинуті пакети з вразливостями безпеки становлять значні ризики для всієї екосистеми, особливо коли їх завантажують мільйони разів на тиждень.
У відповідь Нік створив @koa/router і допоміг попередити спільноту про ситуацію. Відтоді він підтримує цей критичний пакет, забезпечуючи користувачам Koa безпечне та добре підтримуване рішення для маршрутизації.
Усунення вразливостей ReDoS
У 2020 році Нік виявив і усунув критичну вразливість Regular Expression Denial of Service (ReDoS) у широко використовуваному пакеті url-regex. Ця вразливість (SNYK-JS-URLREGEX-569472) могла дозволити зловмисникам викликати відмову в обслуговуванні, надаючи спеціально сформований вхід, що спричиняв катастрофічне повернення в регулярному виразі.
Замість того, щоб просто виправити існуючий пакет, Нік створив url-regex-safe, повністю переписану реалізацію, яка усуває вразливість, зберігаючи сумісність з оригінальним API. Він також опублікував детальний блог-пост, що пояснює вразливість і способи її пом’якшення.
Ця робота демонструє наш підхід до безпеки: не лише виправлення проблем, а й навчання спільноти та надання надійних альтернатив, які запобігають подібним проблемам у майбутньому.
Адвокація безпеки Node.js та Chromium
Нік також активно виступає за покращення безпеки у ширшій екосистемі. У серпні 2020 року він виявив значну проблему безпеки в Node.js, пов’язану з обробкою HTTP-заголовків, про що було повідомлено в The Register.
Ця проблема, що виникла через патч у Chromium, потенційно могла дозволити зловмисникам обійти заходи безпеки. Адвокація Ніка допомогла забезпечити швидке вирішення проблеми, захистивши мільйони додатків Node.js від потенційної експлуатації.
Захист інфраструктури npm
Пізніше того ж місяця Нік виявив ще одну критичну проблему безпеки, цього разу в інфраструктурі електронної пошти npm. Як повідомлялося в The Register, npm неправильно впроваджував протоколи автентифікації електронної пошти DMARC, SPF та DKIM, що потенційно дозволяло зловмисникам надсилати фішингові листи, які виглядали так, ніби вони надіслані від npm.
Звіт Ніка призвів до покращень у безпеці електронної пошти npm, захищаючи мільйони розробників, які покладаються на npm для керування пакетами, від потенційних фішингових атак.
Наш внесок у екосистему Forward Email
Forward Email побудований на основі кількох критичних проектів з відкритим кодом, включаючи Nodemailer, WildDuck та mailauth. Наша команда зробила значний внесок у ці проекти, допомагаючи виявляти та виправляти глибокі проблеми, що впливають на доставку та безпеку електронної пошти.
Покращення основної функціональності Nodemailer
Nodemailer є основою відправлення електронної пошти в Node.js, і наші внески допомогли зробити його більш надійним:
- Покращення SMTP-сервера: Ми виправили помилки парсингу, проблеми з обробкою потоків та налаштування TLS у компоненті SMTP-сервера[25][26].
- Покращення парсера пошти: Ми усунули помилки декодування послідовностей символів та проблеми з парсером адрес, які могли спричиняти збої в обробці електронної пошти[27][28].
Ці внески забезпечують, що Nodemailer залишається надійною основою для обробки електронної пошти в додатках Node.js, включно з Forward Email.
Розвиток автентифікації електронної пошти з Mailauth
Mailauth забезпечує критичну функціональність автентифікації електронної пошти, і наші внески значно покращили його можливості:
- Покращення перевірки DKIM: Ми виявили та повідомили, що X/Twitter мав проблеми з кешем DNS, що спричиняло невдачу DKIM для їх вихідних повідомлень, повідомивши про це на Hacker One[29].
- Покращення DMARC та ARC: Ми виправили проблеми з перевіркою DMARC та ARC, які могли призводити до неправильних результатів автентифікації[30][31].
- Оптимізації продуктивності: Ми внесли оптимізації, які покращують продуктивність процесів автентифікації електронної пошти[32][33][34][35].
Ці покращення допомагають забезпечити точність і надійність автентифікації електронної пошти, захищаючи користувачів від фішингу та спуфінгу.
Ключові покращення Upptime
Наші внески в Upptime включають:
- Моніторинг SSL-сертифікатів: Ми додали функціональність для моніторингу терміну дії SSL-сертифікатів, запобігаючи несподіваним простоям через прострочені сертифікати[36].
- Підтримка кількох номерів SMS: Ми реалізували підтримку оповіщення кількох членів команди через SMS у разі інцидентів, покращуючи час реагування[37].
- Виправлення перевірок IPv6: Ми виправили проблеми з перевірками підключення IPv6, забезпечуючи більш точний моніторинг у сучасних мережевих середовищах[38].
- Підтримка темної/світлої теми: Ми додали підтримку тем для покращення користувацького досвіду сторінок статусу[39].
- Покращена підтримка TCP-Ping: Ми вдосконалили функціональність TCP ping для більш надійного тестування з’єднань[40]. Ці покращення приносять користь не лише моніторингу статусу Forward Email, а й доступні всій спільноті користувачів Upptime, демонструючи нашу відданість покращенню інструментів, на які ми покладаємося.
Клей, що тримає все разом: користувацький код у масштабі
Хоча наші npm-пакети та внески в існуючі проєкти є значними, саме користувацький код, який інтегрує ці компоненти, справді демонструє нашу технічну експертизу. Кодова база Forward Email представляє десятиріччя зусиль у розробці, починаючи з 2017 року, коли проєкт розпочався як free-email-forwarding, перш ніж бути об’єднаним у монорепозиторій.
Масштабні зусилля з розробки
Масштаб цього користувацького інтеграційного коду вражає:
- Загальна кількість внесків: понад 3,217 комітів
- Розмір кодової бази: понад 421,545 рядків коду у файлах JavaScript, Pug, CSS та JSON[^33]
Це тисячі годин розробки, сесій налагодження та оптимізації продуктивності. Це «секретний інгредієнт», який перетворює окремі пакети на цілісний, надійний сервіс, яким щодня користуються тисячі клієнтів.
Інтеграція основних залежностей
Кодова база Forward Email інтегрує численні залежності в єдине ціле:
- Обробка електронної пошти: інтегрує Nodemailer для відправлення, SMTP Server для отримання та Mailparser для парсингу
- Аутентифікація: використовує Mailauth для перевірки DKIM, SPF, DMARC та ARC
- DNS-резолюція: використовує Tangerine для DNS-over-HTTPS з глобальним кешуванням
- Підключення до MX: застосовує mx-connect з інтеграцією Tangerine для надійних з’єднань із поштовими серверами
- Планування завдань: використовує Bree для надійної обробки фонових завдань із робочими потоками
- Шаблонізація: застосовує email-templates для повторного використання стилів із вебсайту у комунікаціях із клієнтами
- Зберігання електронної пошти: реалізує індивідуально зашифровані поштові скриньки SQLite за допомогою better-sqlite3-multiple-ciphers із шифруванням ChaCha20-Poly1305 для квантово-безпечної конфіденційності, забезпечуючи повну ізоляцію між користувачами та доступ лише користувача до його поштової скриньки
Кожна з цих інтеграцій вимагає ретельного врахування крайніх випадків, впливу на продуктивність та питань безпеки. Результатом є надійна система, яка обробляє мільйони транзакцій електронної пошти з високою надійністю. Наша реалізація SQLite також використовує msgpackr для ефективної бінарної серіалізації та WebSockets (через ws) для оновлень статусу в реальному часі по всій нашій інфраструктурі.
DNS-інфраструктура з Tangerine та mx-connect
Критичною складовою інфраструктури Forward Email є наша система DNS-резолюції, побудована навколо двох ключових пакетів:
-
Tangerine: наша реалізація DNS-over-HTTPS для Node.js, що забезпечує заміну стандартного DNS-резолвера з вбудованими повторними спробами, таймаутами, розумним обертанням серверів та підтримкою кешування.
-
mx-connect: цей пакет встановлює TCP-з’єднання з MX-серверами, приймаючи цільовий домен або адресу електронної пошти, визначаючи відповідні MX-сервери та підключаючись до них у порядку пріоритету.
Ми інтегрували Tangerine з mx-connect через pull request #4, забезпечуючи DNS-запити на рівні застосунку через HTTP у всьому Forward Email. Це забезпечує глобальне кешування DNS у масштабі з консистентністю 1:1 у будь-якому регіоні, додатку чи процесі — критично важливо для надійної доставки електронної пошти у розподіленій системі.
Вплив на підприємства: від відкритого коду до критично важливих рішень
Кульмінація нашої десятирічної подорожі у розробці відкритого коду дозволила Forward Email обслуговувати не лише окремих розробників, а й великі підприємства та освітні установи, які становлять основу самого руху відкритого коду.
Кейси у місіонно-критичній інфраструктурі електронної пошти
Наша відданість надійності, конфіденційності та принципам відкритого коду зробила Forward Email надійним вибором для організацій з високими вимогами до електронної пошти:
-
Освітні установи: Як детально описано у нашому кейсі з переспрямування електронної пошти для випускників, провідні університети покладаються на нашу інфраструктуру, щоб підтримувати довічні зв’язки з сотнями тисяч випускників через надійні сервіси переспрямування електронної пошти.
-
Корпоративні рішення на Linux: Кейс Canonical Ubuntu email enterprise демонструє, як наш підхід з відкритим кодом ідеально відповідає потребам корпоративних постачальників Linux, пропонуючи їм прозорість і контроль, які вони потребують.
-
Фундації відкритого коду: Можливо, найкращим підтвердженням є наше партнерство з Linux Foundation, як описано у кейсі Linux Foundation email enterprise, де наш сервіс забезпечує комунікацію для самої організації, що опікується розвитком Linux.
Існує прекрасна симетрія в тому, як наші пакети з відкритим кодом, які підтримуються з турботою протягом багатьох років, дозволили нам створити сервіс електронної пошти, що тепер підтримує саме ті спільноти та організації, які просувають програмне забезпечення з відкритим кодом. Ця повна циклічність — від внеску окремих пакетів до забезпечення корпоративної інфраструктури електронної пошти для лідерів відкритого коду — є найвищим підтвердженням нашого підходу до розробки програмного забезпечення.
Десятиліття відкритого коду: погляд уперед
Оглядаючись на десятиліття внесків у відкритий код і дивлячись уперед на наступні десять років, ми сповнені вдячності спільноті, яка підтримувала нашу роботу, і захоплення тим, що попереду.
Наш шлях від окремих авторів пакетів до підтримувачів комплексної інфраструктури електронної пошти, якою користуються великі підприємства та фундації відкритого коду, був визначним. Це свідчення сили розробки з відкритим кодом і впливу, який продумане, добре підтримуване програмне забезпечення може мати на ширшу екосистему.
У найближчі роки ми зобов’язуємося:
- Продовжувати підтримувати та покращувати наші існуючі пакети, забезпечуючи їх надійність для розробників у всьому світі.
- Розширювати наш внесок у критичні інфраструктурні проєкти, особливо в сферах електронної пошти та безпеки.
- Покращувати можливості Forward Email, зберігаючи нашу відданість конфіденційності, безпеці та прозорості.
- Підтримувати наступне покоління учасників відкритого коду через наставництво, спонсорство та залучення спільноти.
Ми віримо, що майбутнє розробки програмного забезпечення — це відкритість, співпраця та довіра. Продовжуючи вносити високоякісні, орієнтовані на безпеку пакети в екосистему JavaScript, ми сподіваємося зіграти невелику роль у побудові цього майбутнього.
Дякуємо всім, хто використовував наші пакети, вносив внески у наші проєкти, повідомляв про проблеми або просто поширював інформацію про нашу роботу. Ваша підтримка зробила можливим це десятиліття впливу, і ми з нетерпінням чекаємо, що ми зможемо досягти разом у наступні десять років.
npm download statistics for cabin, April 2025 ↩︎
npm download statistics for bson-objectid, February-March 2025 ↩︎
npm download statistics for url-regex-safe, April 2025 ↩︎
GitHub stars count for forwardemail/forwardemail.net as of April 2025 ↩︎
npm download statistics for preview-email, April 2025 ↩︎
npm download statistics for superagent, February-March 2025 ↩︎
npm download statistics for supertest, February-March 2025 ↩︎
npm download statistics for koa, February-March 2025 ↩︎
npm download statistics for @koa/router, February-March 2025 ↩︎
npm download statistics for koa-router, February-March 2025 ↩︎
npm download statistics for url-regex, February-March 2025 ↩︎
npm download statistics for preview-email, February-March 2025 ↩︎
npm download statistics for cabin, February-March 2025 ↩︎
npm download statistics for @breejs/later, February-March 2025 ↩︎
npm download statistics for email-templates, February-March 2025 ↩︎
npm download statistics for get-paths, February-March 2025 ↩︎
npm download statistics for url-regex-safe, February-March 2025 ↩︎
npm download statistics for dotenv-parse-variables, February-March 2025 ↩︎
npm download statistics for @koa/multer, February-March 2025 ↩︎
npm download statistics for spamscanner, February-March 2025 ↩︎
npm download statistics for bree, February-March 2025 ↩︎
Daily download patterns from npm statistics, April 2025 ↩︎
Weekly download patterns from npm statistics, April 2025 ↩︎
npm download statistics for nodemailer, April 2025 ↩︎
https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min ↩︎
Based on GitHub issues in the Upptime repository ↩︎
Based on GitHub issues in the Upptime repository ↩︎
Based on GitHub issues in the Upptime repository ↩︎
Based on GitHub pull requests to Upptime ↩︎
Based on GitHub pull requests to Upptime ↩︎