Une décennie d'impact : comment nos packages npm ont atteint 1 milliard de téléchargements et façonné JavaScript

Dans le Javascript et Node.js Dans le monde entier, certains packages sont essentiels : téléchargés des millions de fois par jour et propulsant des applications dans le monde entier. Derrière ces outils se cachent des développeurs soucieux de la qualité open source. Aujourd'hui, nous vous montrons comment notre équipe contribue à la création et à la maintenance de packages npm devenus des éléments clés de l'écosystème JavaScript.

Les pionniers qui nous font confiance : Isaac Z. Schlueter et Forward Email

Nous sommes fiers d'avoir Isaac Z. Schlueter (GitHub : Isaacs) en tant qu'utilisateur. Isaac a créé npm et a aidé à construire Node.jsSa confiance en Forward Email témoigne de notre souci de la qualité et de la sécurité. Isaac utilise Forward Email pour plusieurs domaines, dont izs.me.

L'influence d'Isaac sur JavaScript est considérable. En 2009, il fut parmi les premiers à percevoir le potentiel de Node.js, en travaillant avec Ryan Dahl, qui a créé la plateforme. Comme l'a dit Isaac dans un entretien avec le magazine Increment:« Au sein de cette petite communauté de personnes cherchant à comprendre comment rendre le JavaScript côté serveur possible, Ryan Dahl a lancé Node, qui était clairement la bonne approche. J'ai investi dans ce projet et je me suis fortement impliqué vers le milieu de l'année 2009. »

[!NOTE] Pour ceux qui s'intéressent à l'histoire de Node.js, d'excellents documentaires retracent son développement, notamment L'histoire de Node.js et 10 choses que je regrette à propos de Node.js - Ryan Dahl. Ryan Dahl site web personnel contient également des informations précieuses sur son travail.

De la création de npm à la direction de Node.js

Isaac a créé npm en septembre 2009, et la première version utilisable a été publiée début 2010. Ce gestionnaire de paquets répondait à un besoin clé de Node.js, permettant aux développeurs de partager et de réutiliser facilement du code. Selon le Page Wikipédia de Node.jsEn janvier 2010, un gestionnaire de paquets appelé npm a été introduit pour l'environnement Node.js. Ce gestionnaire permet aux programmeurs de publier et de partager des paquets Node.js, ainsi que leur code source, et est conçu pour simplifier l'installation, la mise à jour et la désinstallation des paquets.

Lorsque Ryan Dahl a quitté Node.js en janvier 2012, Isaac a pris la tête du projet. Comme indiqué sur his résumé, il a « dirigé le développement de plusieurs API fondamentales de base de Node.js, notamment le système de modules CommonJS, les API du système de fichiers et les flux » et « a agi en tant que BDFL (Benevolent Dictator For Life) du projet pendant 2 ans, garantissant une qualité toujours croissante et un processus de construction fiable pour les versions Node.js v0.6 à v0.10. »

Isaac a guidé Node.js à travers une période de croissance clé, établissant des normes qui façonnent encore la plateforme aujourd'hui. Il a ensuite créé npm, Inc. en 2014 pour soutenir le registre npm, qu'il avait auparavant géré seul.

Nous remercions Isaac pour son immense contribution à JavaScript et continuons d'utiliser les nombreux packages qu'il a créés. Son travail a révolutionné notre façon de développer des logiciels et la manière dont des millions de développeurs partagent leur code à travers le monde.

L'architecte derrière le code : le parcours de Nick Baugh

Au cœur de notre réussite open source se trouve Nick Baugh, fondateur et propriétaire de Forward Email. Son expérience en JavaScript s'étend sur près de 20 ans et a façonné la manière dont de nombreux développeurs créent des applications. Son parcours open source témoigne à la fois de ses compétences techniques et de son leadership communautaire.

Comité technique Express et contributions principales

L'expertise de Nick en matière de framework Web lui a valu une place sur le Comité technique Express, où il a contribué au développement de l'un des frameworks Node.js les plus utilisés. Nick est désormais répertorié comme membre inactif sur le Page communautaire Express.

[!IMPORTANT] Express a été initialement créé par TJ Holowaychuk, un contributeur open source prolifique qui a façonné une grande partie de l'écosystème Node.js. Nous sommes reconnaissants envers TJ pour son travail fondateur et respectons son travail. décision de faire une pause de ses nombreuses contributions open source.

En tant que membre de la Comité technique ExpressNick a fait preuve d'une grande attention aux détails dans des domaines tels que la clarification req.originalUrl documentation et résolution des problèmes de gestion des formulaires en plusieurs parties.

Contributions au cadre Koa

Le travail de Nick avec le Cadre Koa— une alternative moderne et plus légère à Express, également créée par TJ Holowaychuk — témoigne de son engagement envers de meilleurs outils de développement web. Ses contributions à Koa incluent à la fois des problèmes et du code via des pull requests, la gestion des erreurs, la gestion des types de contenu et l'amélioration de la documentation.

Son travail chez Express et Koa lui donne une vision unique du développement Web Node.js, aidant notre équipe à créer des packages qui fonctionnent bien avec plusieurs écosystèmes de frameworks.

De contributeur individuel à leader d'organisation

Ce qui a commencé par aider des projets existants s'est transformé en création et maintenance d'écosystèmes de packages complets. Nick a fondé plusieurs organisations GitHub, dont Cabine, Scanner de courrier indésirable, Un courriel transféré, Garçon, et Bree—chacun répondant à des besoins spécifiques de la communauté JavaScript.

Ce passage du statut de contributeur à celui de leader illustre la vision de Nick : des logiciels bien conçus qui résolvent des problèmes concrets. En organisant des packages connexes au sein d'organisations GitHub dédiées, il a créé des écosystèmes d'outils qui fonctionnent ensemble tout en restant modulaires et flexibles pour l'ensemble de la communauté des développeurs.

Nos organisations GitHub : des écosystèmes d'innovation

Nous organisons notre travail open source autour d'organisations GitHub dédiées, chacune répondant à des besoins spécifiques en JavaScript. Cette structure crée des familles de packages cohérentes qui fonctionnent bien ensemble tout en restant modulaires.

Cabin : journalisation structurée pour applications modernes

Le Organisation de la cabine Voici notre approche simple et efficace de la journalisation des applications. cabin Le package compte près de 900 étoiles GitHub et plus de 100 000 téléchargements hebdomadaires[^1]. Cabin propose une journalisation structurée compatible avec des services populaires comme Sentry, LogDNA et Papertrail.

La particularité de Cabin réside dans son API et son système de plugins bien pensés. Des packages compatibles comme axe pour le middleware Express et parse-request pour l'analyse des requêtes HTTP, nous montrons notre engagement envers des solutions complètes plutôt que des outils isolés.

Le bson-objectid Le package mérite une mention spéciale, avec plus de 1,7 million de téléchargements en seulement deux mois[^2]. Cette implémentation allégée de MongoDB ObjectID est devenue la référence pour les développeurs ayant besoin d'identifiants sans dépendances MongoDB complètes.

Scanner de spam : lutte contre les abus par e-mail

Le Organisation du scanner de spam démontre notre engagement à résoudre les problèmes réels. Le principal spamscanner Le package fournit une détection avancée du spam par courrier électronique, mais c'est le url-regex-safe un package qui a connu une adoption incroyable.

Avec plus de 1,2 million de téléchargements en deux mois[^3], url-regex-safe Corrige des problèmes de sécurité critiques dans d'autres expressions régulières de détection d'URL. Ce paquet illustre notre approche de l'open source : identifier un problème courant (ici, RedoS vulnérabilités dans la validation des URL), en créant une solution solide et en la maintenant soigneusement.

Bree : planification moderne des tâches avec threads de travail

Le Organisation de Bree est notre réponse à un défi courant de Node.js : la planification fiable des tâches. bree Le package, avec plus de 3 100 étoiles GitHub, fournit un planificateur de tâches moderne utilisant les threads de travail Node.js pour de meilleures performances et une meilleure fiabilité.

[!NOTE] Bree a été créée après que nous ayons contribué à la maintenance Ordre du jour, en appliquant les leçons apprises pour créer un meilleur planificateur de tâches. Nos contributions à Agenda nous ont aidés à trouver des moyens d'améliorer la planification des tâches.

Ce qui différencie Bree des autres planificateurs comme Agenda :

  • Aucune dépendance externe:Contrairement à Agenda qui a besoin de MongoDB, Bree n'a pas besoin de Redis ou de MongoDB pour gérer l'état du travail.
  • Fils de travail: Bree utilise les threads de travail Node.js pour les processus sandboxés, offrant une meilleure isolation et de meilleures performances.
  • API simple:Bree offre un contrôle détaillé et simple, facilitant ainsi la mise en œuvre de besoins de planification complexes.
  • Support intégré: Des éléments tels que le rechargement gracieux, les tâches cron, les dates et les heures conviviales sont inclus par défaut.

Bree est un élément clé de forwardemail.net, gérant des tâches d'arrière-plan critiques comme le traitement des e-mails, le nettoyage et la maintenance planifiée. L'utilisation de Bree dans Forward Email témoigne de notre engagement à utiliser nos propres outils en production, garantissant ainsi leur fiabilité.

Nous utilisons et apprécions également d'autres excellents packages de threads de travail tels que piscine et les clients HTTP comme onze. Piscina, comme Bree, utilise les threads de travail Node.js pour un traitement efficace des tâches. Nous remercions Matthieu Hill, qui gère à la fois Undici et Piscina, pour ses contributions majeures à Node.js. Matteo siège au comité de pilotage technique de Node.js et a considérablement amélioré les fonctionnalités du client HTTP dans Node.js.

Transférer un e-mail : infrastructure de messagerie open source

Notre projet le plus ambitieux est Un courriel transféré, un service de messagerie open source qui fournit des services de transfert, de stockage et d'API d'e-mails. Le dépôt principal compte plus de 1 100 étoiles GitHub[^4], ce qui témoigne de l'appréciation de la communauté pour cette alternative aux services de messagerie propriétaires.

Le preview-email Le package de cette organisation, avec plus de 2,5 millions de téléchargements en deux mois[^5], est devenu un outil essentiel pour les développeurs travaillant avec des modèles d'e-mails. En offrant un moyen simple de prévisualiser les e-mails pendant le développement, il résout un problème courant dans la création d'applications de messagerie.

Lad : Utilitaires et outils Koa essentiels

Le Organisation des garçons Fournit un ensemble d'utilitaires et d'outils essentiels, principalement destinés à améliorer l'écosystème du framework Koa. Ces packages résolvent les problèmes courants du développement web et sont conçus pour fonctionner ensemble de manière transparente tout en restant utiles indépendamment.

koa-better-error-handler : gestion améliorée des erreurs pour Koa

koa-better-error-handler offre une meilleure solution de gestion des erreurs pour les applications Koa. Avec plus de 50 étoiles GitHub, ce package est ctx.throw produire des messages d'erreur conviviaux tout en répondant à plusieurs limitations du gestionnaire d'erreurs intégré de Koa :

  • Détecte et gère correctement les erreurs DNS Node.js, les erreurs Mongoose et les erreurs Redis
  • Utilisations Boom pour créer des réponses d'erreur cohérentes et bien formatées
  • Préserve les en-têtes (contrairement au gestionnaire intégré de Koa)
  • Maintient les codes d'état appropriés plutôt que de revenir à 500 par défaut
  • Prend en charge les messages flash et la préservation des sessions
  • Fournit des listes d'erreurs HTML pour les erreurs de validation
  • Prend en charge plusieurs types de réponses (HTML, JSON et texte brut)

Ce package est particulièrement utile lorsqu'il est utilisé avec koa-404-handler pour une gestion complète des erreurs dans les applications Koa.

passeport : authentification pour Lad

@ladjs/passport étend le célèbre middleware d'authentification Passport.js avec des améliorations spécifiques pour les applications web modernes. Ce package prend en charge plusieurs stratégies d'authentification prêtes à l'emploi :

  • Authentification locale par e-mail
  • Connectez-vous avec Apple
  • Authentification GitHub
  • Authentification Google
  • Authentification par mot de passe à usage unique (OTP)

Le package est hautement personnalisable, permettant aux développeurs d'adapter les noms et expressions de champs aux besoins de leur application. Conçu pour s'intégrer parfaitement à Mongoose pour la gestion des utilisateurs, il constitue une solution idéale pour les applications basées sur Koa nécessitant une authentification robuste.

gracieux : arrêt élégant de l'application

@ladjs/graceful Résout le défi crucial de l'arrêt harmonieux des applications Node.js. Avec plus de 70 étoiles GitHub, ce package garantit l'arrêt propre de votre application sans perte de données ni interruption de connexion. Ses principales fonctionnalités incluent :

  • Prise en charge de la fermeture élégante des serveurs HTTP (Express/Koa/Fastify)
  • Arrêt propre des connexions à la base de données (MongoDB/Mongoose)
  • Fermeture correcte des clients Redis
  • Gestion des planificateurs de tâches Bree
  • Prise en charge des gestionnaires d'arrêt personnalisés
  • Paramètres de délai d'expiration configurables
  • Intégration avec les systèmes de journalisation

Ce package est essentiel pour les applications de production où des arrêts imprévus peuvent entraîner une perte ou une corruption de données. En mettant en œuvre des procédures d'arrêt appropriées, @ladjs/graceful contribue à garantir la fiabilité et la stabilité de votre application.

Upptime : surveillance de la disponibilité open source

Le Organisation Upptime représente notre engagement en faveur d'une surveillance transparente et open source. Le principal upptime Le dépôt compte plus de 13 000 étoiles GitHub, ce qui en fait l'un des projets les plus populaires auxquels nous contribuons. Upptime fournit un outil de surveillance de la disponibilité et une page d'état basés sur GitHub, fonctionnant entièrement sans serveur.

Nous utilisons Upptime pour notre propre page de statut sur https://status.forwardemail.net avec le code source disponible à https://github.com/forwardemail/status.forwardemail.net.

Ce qui rend Upptime spécial, c'est son architecture :

  • 100% Open Source:Chaque composant est entièrement open source et personnalisable.
  • Propulsé par GitHub: Exploite les actions, les problèmes et les pages GitHub pour une solution de surveillance sans serveur.
  • Aucun serveur requis:Contrairement aux outils de surveillance traditionnels, Upptime ne nécessite pas que vous exécutiez ou mainteniez un serveur.
  • Page d'état automatique: Génère une belle page d'état qui peut être hébergée sur GitHub Pages.
  • Notifications puissantes: S'intègre à divers canaux de notification, notamment les e-mails, les SMS et Slack.

Pour améliorer l'expérience de nos utilisateurs, nous avons intégré @octokit/core dans le code source de forwardemail.net pour afficher les mises à jour de statut et les incidents en temps réel directement sur notre site web. Cette intégration offre une transparence totale à nos utilisateurs en cas de problème sur l'ensemble de notre plateforme (site web, API, MongoDB, Redis, SQLite, SMTP, POP3, IMAP, Bree, etc.) avec des notifications instantanées, des changements d'icônes de badge, des couleurs d'avertissement, etc.

La bibliothèque @octokit/core nous permet de récupérer des données en temps réel depuis notre dépôt GitHub Upptime, de les traiter et de les afficher de manière intuitive. En cas de panne ou de dégradation des performances d'un service, les utilisateurs sont immédiatement avertis par des indicateurs visuels, sans avoir à quitter l'application principale. Cette intégration transparente garantit à nos utilisateurs des informations toujours à jour sur l'état de notre système, renforçant ainsi la transparence et la confiance.

Upptime a été adopté par des centaines d'organisations à la recherche d'un moyen transparent et fiable de surveiller leurs services et de communiquer leur statut aux utilisateurs. Le succès du projet démontre la puissance des outils qui exploitent l'infrastructure existante (en l'occurrence, GitHub) pour résoudre des problèmes courants de manière innovante.

Nos contributions à l'écosystème Forward Email

Si nos packages open source sont utilisés par des développeurs du monde entier, ils constituent également la base de notre propre service de transfert d'e-mails. Ce double rôle – à la fois créateur et utilisateur de ces outils – nous offre une perspective unique sur leur application concrète et favorise une amélioration continue.

Des packages à la production

Le passage d'un package individuel à un système de production cohérent nécessite une intégration et une extension minutieuses. Pour le transfert d'e-mails, ce processus comprend :

  • Extensions personnalisées:Construire des extensions spécifiques à la messagerie électronique pour nos packages open source qui répondent à nos exigences uniques.
  • Modèles d'intégration: Développer des modèles sur la façon dont ces packages interagissent dans un environnement de production.
  • Optimisations des performances:Identifier et résoudre les goulots d’étranglement des performances qui n’apparaissent qu’à grande échelle.
  • Renforcement de la sécurité: Ajout de couches de sécurité supplémentaires spécifiques à la gestion des e-mails et à la protection des données des utilisateurs.

Ce travail représente des milliers d’heures de développement au-delà des packages de base eux-mêmes, ce qui donne lieu à un service de messagerie électronique robuste et sécurisé qui exploite le meilleur de nos contributions open source.

La boucle de rétroaction

L'aspect le plus précieux de l'utilisation de nos propres packages en production est peut-être la boucle de rétroaction qu'elle crée. Lorsque nous rencontrons des limitations ou des cas limites dans Forward Email, nous ne nous contentons pas de les corriger localement : nous améliorons les packages sous-jacents, ce qui profite à la fois à notre service et à la communauté au sens large.

Cette approche a conduit à de nombreuses améliorations :

  • L'arrêt gracieux de Bree:Le besoin de déploiements sans temps d'arrêt de Forward Email a conduit à des capacités d'arrêt progressif améliorées dans Bree.
  • Reconnaissance des modèles du scanner de spam:Les modèles de spam réels rencontrés dans Forward Email ont informé les algorithmes de détection de Spam Scanner.
  • Optimisations des performances de la cabine:L'enregistrement à volume élevé en production a révélé des opportunités d'optimisation dans Cabin qui profitent à tous les utilisateurs.

En maintenant ce cercle vertueux entre notre travail open source et notre service de production, nous garantissons que nos packages restent des solutions pratiques et testées au combat plutôt que des implémentations théoriques.

Principes fondamentaux de Forward Email : une base pour l'excellence

Forward Email est conçu selon un ensemble de principes fondamentaux qui guident toutes nos décisions de développement. Ces principes, détaillés dans notre site web, assurez-vous que notre service reste convivial pour les développeurs, sécurisé et axé sur la confidentialité des utilisateurs.

Toujours convivial pour les développeurs, axé sur la sécurité et transparent

Notre principe premier est de créer des logiciels conviviaux pour les développeurs, tout en garantissant les normes de sécurité et de confidentialité les plus strictes. Nous sommes convaincus que l'excellence technique ne doit jamais se faire au détriment de la convivialité, et que la transparence renforce la confiance au sein de notre communauté.

Ce principe se reflète dans notre documentation détaillée, nos messages d'erreur clairs et notre communication ouverte sur les réussites et les difficultés. En rendant l'intégralité de notre code source open source, nous encourageons l'analyse et la collaboration, renforçant ainsi nos logiciels et l'écosystème au sens large.

Adhésion aux principes éprouvés de développement de logiciels

Nous suivons plusieurs principes de développement logiciel établis qui ont prouvé leur valeur au fil des décennies :

  • MVC: Séparer les préoccupations grâce au modèle Modèle-Vue-Contrôleur
  • Philosophie Unix:Créer des composants modulaires qui font bien une chose
  • KISS: Garder les choses simples et directes
  • DRY: Ne vous répétez pas, encouragez la réutilisation du code
  • YAGNI: Vous n'en aurez pas besoin, éviter une optimisation prématurée
  • Douze facteurs:Suivre les meilleures pratiques pour créer des applications modernes et évolutives
  • le rasoir d'Occam: Choisir la solution la plus simple qui répond aux exigences
  • Alimentation pour chiens:Utiliser largement nos propres produits

Ces principes ne sont pas que des concepts théoriques : ils sont ancrés dans nos pratiques de développement quotidiennes. Par exemple, notre adhésion à la philosophie Unix se reflète dans la structure de nos packages npm : de petits modules ciblés, qui peuvent être assemblés pour résoudre des problèmes complexes.

Cibler les développeurs courageux et autonomes

Nous ciblons spécifiquement les personnes courageuses, débrouillardes et ramen-rentable Développeur. Cette approche influence tout, de notre modèle tarifaire à nos décisions techniques. Nous comprenons les défis liés au développement de produits avec des ressources limitées, car nous en avons fait l'expérience.

Ce principe est particulièrement important dans notre approche de l'open source. Nous créons et maintenons des packages qui résolvent des problèmes concrets pour les développeurs sans budget d'entreprise, rendant ainsi des outils puissants accessibles à tous, quelles que soient leurs ressources.

Principes en pratique : la base de code des e-mails de transfert

Ces principes sont clairement visibles dans le code source de Forward Email. Notre fichier package.json présente une sélection judicieuse de dépendances, chacune choisie en accord avec nos valeurs fondamentales :

  • Des packages axés sur la sécurité comme mailauth pour l'authentification par e-mail
  • Des outils conviviaux pour les développeurs comme preview-email pour un débogage plus facile
  • Composants modulaires comme les différents p-* services publics de Sindre Sorhus

En suivant ces principes de manière cohérente au fil du temps, nous avons créé un service auquel les développeurs peuvent faire confiance avec leur infrastructure de messagerie : sécurisé, fiable et aligné sur les valeurs de la communauté open source.

Confidentialité dès la conception

La confidentialité n'est pas une réflexion après coup ou une fonctionnalité marketing pour Forward Email : c'est un principe de conception fondamental qui informe chaque aspect de notre service et de notre code :

  • Cryptage à accès zéro:Nous avons mis en place des systèmes qui rendent techniquement impossible la lecture des e-mails des utilisateurs.
  • Collecte minimale de données:Nous collectons uniquement les données nécessaires à la fourniture de notre service, rien de plus.
  • Politiques transparentes:Notre politique de confidentialité est rédigée dans un langage clair et compréhensible, sans jargon juridique.
  • Vérification Open Source:Notre base de code open source permet aux chercheurs en sécurité de vérifier nos déclarations de confidentialité.

Cet engagement s’étend à nos packages open source, qui sont conçus avec les meilleures pratiques de sécurité et de confidentialité intégrées dès le départ.

Open Source durable

Nous pensons que les logiciels libres ont besoin de modèles durables pour prospérer à long terme. Notre approche comprend :

  • Support commercial:Offrant un support et des services premium autour de nos outils open source.
  • Licences équilibrées:Utiliser des licences qui protègent à la fois les libertés des utilisateurs et la pérennité du projet.
  • Engagement communautaire: S'engager activement avec les contributeurs pour créer une communauté de soutien.
  • Feuilles de route transparentes:Partager nos plans de développement pour permettre aux utilisateurs de planifier en conséquence.

En mettant l’accent sur la durabilité, nous garantissons que nos contributions open source peuvent continuer à croître et à s’améliorer au fil du temps plutôt que de tomber dans la négligence.

Les chiffres ne mentent pas : nos statistiques de téléchargement stupéfiantes sur npm

Lorsqu'on parle de l'impact des logiciels open source, les statistiques de téléchargement fournissent une mesure tangible de leur adoption et de la confiance qu'ils inspirent. Nombre des logiciels que nous contribuons à maintenir ont atteint une ampleur que peu de projets open source atteignent, avec des téléchargements cumulés se chiffrant en milliards.

Top npm Packages by Downloads

[!IMPORTANT] Bien que nous soyons fiers de contribuer à la maintenance de plusieurs packages très téléchargés dans l'écosystème JavaScript, nous tenons à souligner que nombre d'entre eux ont été créés à l'origine par d'autres développeurs talentueux. Des packages comme superagent et supertest ont été créés par TJ Holowaychuk, dont les contributions prolifiques à l'open source ont joué un rôle déterminant dans le développement de l'écosystème Node.js.

Une vue d'ensemble de notre impact

Au cours de la seule période de deux mois allant de février à mars 2025, les principaux packages auxquels nous contribuons et que nous aidons à maintenir ont enregistré des nombres de téléchargements stupéfiants :

[!REMARQUE] Plusieurs autres packages que nous contribuons à maintenir, mais que nous n'avons pas créés, présentent des taux de téléchargement encore plus élevés, notamment form-data (plus de 738 millions de téléchargements), toidentifier (plus de 309 millions de téléchargements), stackframe (plus de 116 millions de téléchargements) et error-stack-parser (Plus de 113 millions de téléchargements). Nous sommes honorés de contribuer à ces packages tout en respectant le travail de leurs auteurs originaux.

Ces chiffres ne sont pas seulement impressionnants : ils représentent de vrais développeurs résolvant des problèmes concrets grâce au code que nous contribuons à maintenir. Chaque téléchargement est un exemple où ces packages ont permis à quelqu'un de créer quelque chose de significatif, des projets amateurs aux applications d'entreprise utilisées par des millions de personnes.

Package Categories Distribution

Impact quotidien à grande échelle

Les modèles de téléchargement quotidiens révèlent une utilisation constante et importante, avec des pics atteignant des millions de téléchargements par jour[^13]. Cette constance témoigne de la stabilité et de la fiabilité de ces packages : les développeurs ne se contentent pas de les tester ; ils les intègrent à leurs flux de travail principaux et s'y fient jour après jour.

Les statistiques de téléchargement hebdomadaires affichent des chiffres encore plus impressionnants, oscillant régulièrement autour de plusieurs dizaines de millions de téléchargements par semaine[^14]. Cela représente une empreinte considérable dans l'écosystème JavaScript, ces packages étant exécutés dans des environnements de production partout dans le monde.

Au-delà des chiffres bruts

Si les statistiques de téléchargement sont impressionnantes en elles-mêmes, elles témoignent de la confiance que la communauté accorde à ces packages. Maintenir des packages à cette échelle exige un engagement sans faille envers :

  • Rétrocompatibilité:Les changements doivent être soigneusement étudiés pour éviter de briser les implémentations existantes.
  • Sécurité:Avec des millions d’applications dépendant de ces packages, les vulnérabilités de sécurité pourraient avoir des conséquences de grande portée.
  • Performance:À cette échelle, même des améliorations mineures des performances peuvent avoir des avantages globaux significatifs.
  • Documentation:Une documentation claire et complète est essentielle pour les packages utilisés par les développeurs de tous niveaux d'expérience.

La croissance constante du nombre de téléchargements au fil du temps reflète le succès dans le respect de ces engagements, en instaurant la confiance avec la communauté des développeurs grâce à des packages fiables et bien entretenus.

Soutenir l'écosystème : nos parrainages Open Source

[!TIP] La durabilité de l'open source ne se limite pas à la contribution au code : elle implique également de soutenir les développeurs qui maintiennent les infrastructures critiques.

Au-delà de nos contributions directes à l'écosystème JavaScript, nous sommes fiers de sponsoriser d'éminents contributeurs Node.js dont le travail constitue la base de nombreuses applications modernes. Nos sponsors incluent :

Andris Reinman : pionnier de l'infrastructure de messagerie électronique

Andris Reinman est le créateur de Envoyeur de notes, la bibliothèque d'envoi d'e-mails la plus populaire pour Node.js, avec plus de 14 millions de téléchargements hebdomadaires[^15]. Son travail s'étend à d'autres composants critiques de l'infrastructure de messagerie, comme Serveur SMTP, Analyseur de courrier, et Canard sauvage.

Notre parrainage contribue à assurer la maintenance et le développement continus de ces outils essentiels qui alimentent la communication par courrier électronique pour d'innombrables applications Node.js, y compris notre propre service de transfert de courrier électronique.

Sindre Sorhus : le cerveau du package utilitaire

Sindre Sorhus est l'un des contributeurs open source les plus prolifiques de l'écosystème JavaScript, avec plus de 1 000 packages npm à son actif. Ses utilitaires, comme carte p, p-nouvelle tentative, et is-stream sont des éléments fondamentaux utilisés dans tout l'écosystème Node.js.

En sponsorisant le travail de Sindre, nous contribuons à soutenir le développement de ces utilitaires essentiels qui rendent le développement JavaScript plus efficace et plus fiable.

Ces parrainages reflètent notre engagement envers l'écosystème open source au sens large. Nous sommes conscients que notre succès repose sur les fondations posées par ces contributeurs et d'autres, et nous nous engageons à assurer la pérennité de l'ensemble de l'écosystème.

Découverte des vulnérabilités de sécurité dans l'écosystème JavaScript

Notre engagement envers l'open source va au-delà du développement de fonctionnalités et inclut l'identification et la correction des vulnérabilités de sécurité susceptibles d'affecter des millions de développeurs. Plusieurs de nos contributions les plus significatives à l'écosystème JavaScript ont concerné la sécurité.

Le sauvetage du Koa-Router

En février 2019, Nick a identifié un problème critique lié à la maintenance du populaire package koa-router. rapporté sur Hacker News, le paquet avait été abandonné par son mainteneur d'origine, laissant les vulnérabilités de sécurité sans réponse et la communauté sans mises à jour.

[!AVERTISSEMENT] Les packages abandonnés présentant des failles de sécurité présentent des risques importants pour l'ensemble de l'écosystème, en particulier lorsqu'ils sont téléchargés des millions de fois par semaine.

En réponse, Nick a créé @koa/routeur et a contribué à alerter la communauté sur la situation. Il assure depuis la maintenance de ce package essentiel, garantissant aux utilisateurs de Koa une solution de routage sécurisée et bien entretenue.

Traitement des vulnérabilités ReDoS

En 2020, Nick a identifié et abordé un problème critique Déni de service par expression régulière (ReDoS) vulnérabilité dans le domaine largement utilisé url-regex paquet. Cette vulnérabilité (SNYK-JS-URLREGEX-569472) pourrait permettre aux attaquants de provoquer un déni de service en fournissant des entrées spécialement conçues qui provoqueraient un retour en arrière catastrophique dans l'expression régulière.

Plutôt que de simplement corriger le package existant, Nick a créé url-regex-safe, une implémentation entièrement réécrite qui corrige la vulnérabilité tout en maintenant la compatibilité avec l'API d'origine. Il a également publié une article de blog complet expliquant la vulnérabilité et comment l'atténuer.

Ce travail montre notre approche de la sécurité : non seulement résoudre les problèmes, mais aussi éduquer la communauté et fournir des alternatives solides qui empêchent des problèmes similaires à l’avenir.

Plaidoyer pour la sécurité de Node.js et Chromium

Nick a également activement milité en faveur d'améliorations de sécurité au sein de l'écosystème. En août 2020, il a identifié un problème de sécurité majeur dans Node.js, lié à sa gestion des en-têtes HTTP, qui a été signalé dans Le registre.

Ce problème, lié à un correctif dans Chromium, pouvait potentiellement permettre à des attaquants de contourner les mesures de sécurité. L'intervention de Nick a permis de résoudre rapidement le problème, protégeant ainsi des millions d'applications Node.js d'une éventuelle exploitation.

Sécurisation de l'infrastructure npm

Plus tard ce même mois, Nick a identifié un autre problème de sécurité critique, cette fois dans l'infrastructure de messagerie de npm. Comme indiqué dans Le registre, npm n'implémentait pas correctement les protocoles d'authentification de messagerie DMARC, SPF et DKIM, permettant potentiellement aux attaquants d'envoyer des e-mails de phishing qui semblaient provenir de npm.

Le rapport de Nick a conduit à des améliorations de la sécurité des e-mails de npm, protégeant les millions de développeurs qui s'appuient sur npm pour la gestion des packages contre d'éventuelles attaques de phishing.

Nos contributions à l'écosystème Forward Email

Forward Email s'appuie sur plusieurs projets open source essentiels, notamment Nodemailer, WildDuck et mailauth. Notre équipe a largement contribué à ces projets, en aidant à identifier et à corriger les problèmes majeurs affectant la distribution et la sécurité des e-mails.

Amélioration des fonctionnalités principales de Nodemailer

Envoyeur de notes est l'épine dorsale de l'envoi d'e-mails dans Node.js, et nos contributions ont contribué à le rendre plus robuste :

  • Améliorations du serveur SMTP:Nous avons corrigé des bogues d'analyse, des problèmes de gestion de flux et des problèmes de configuration TLS dans le composant serveur SMTP[^16][^17].
  • Améliorations de l'analyseur de courrier:Nous avons résolu les erreurs de décodage de séquences de caractères et les problèmes d'analyseur qui pourraient entraîner des échecs de traitement des e-mails[^18][^19].

Ces contributions garantissent que Nodemailer reste une base fiable pour le traitement des e-mails dans les applications Node.js, y compris Forward Email.

Amélioration de l'authentification des e-mails avec Mailauth

Mailauth fournit une fonctionnalité critique d'authentification des e-mails, et nos contributions ont considérablement amélioré ses capacités :

  • Améliorations de la vérification DKIM:Nous avons découvert et signalé que X/Twitter avait des problèmes de cache DNS provoquant l'échec de DKIM pour leurs messages sortants, en le signalant sur Hacker One[^20].
  • Améliorations de DMARC et ARC:Nous avons corrigé des problèmes avec la vérification DMARC et ARC qui pouvaient conduire à des résultats d'authentification incorrects[^21][^22].
  • Optimisations des performances:Nous avons contribué à des optimisations qui améliorent les performances des processus d'authentification des e-mails[^23][^24][^25][^26].

Ces améliorations contribuent à garantir que l’authentification des e-mails est précise et fiable, protégeant ainsi les utilisateurs contre les attaques de phishing et d’usurpation d’identité.

Améliorations clés de la disponibilité

Nos contributions à Upptime incluent :

  • Surveillance des certificats SSL:Nous avons ajouté une fonctionnalité pour surveiller l'expiration des certificats SSL, évitant ainsi les temps d'arrêt inattendus dus aux certificats expirés[^27].
  • Prise en charge de plusieurs numéros SMS:Nous avons mis en place un support permettant d'alerter plusieurs membres de l'équipe par SMS lorsque des incidents se produisent, améliorant ainsi les temps de réponse[^28].
  • Correctifs de vérification IPv6:Nous avons résolu les problèmes liés aux vérifications de connectivité IPv6, garantissant une surveillance plus précise dans les environnements réseau modernes[^29].
  • Prise en charge du mode sombre/clair:Nous avons ajouté la prise en charge des thèmes pour améliorer l'expérience utilisateur des pages de statut[^31].
  • Meilleure prise en charge TCP-Ping:Nous avons amélioré la fonctionnalité ping TCP pour fournir des tests de connexion plus fiables[^32].

Ces améliorations profitent non seulement à la surveillance du statut de Forward Email, mais sont également disponibles pour l'ensemble de la communauté des utilisateurs d'Upptime, démontrant ainsi notre engagement à améliorer les outils dont nous dépendons.

La colle qui maintient tout ensemble : du code personnalisé à grande échelle

Si nos packages npm et nos contributions aux projets existants sont importants, c'est le code personnalisé intégrant ces composants qui témoigne véritablement de notre expertise technique. La base de code de Forward Email représente une décennie de développement, remontant à 2017, année de lancement du projet. transfert d'e-mail gratuit avant d'être fusionné dans un monorepo.

Un effort de développement massif

L'ampleur de ce code d'intégration personnalisé est impressionnante :

  • Contributions totales: Plus de 3 217 commits
  • Taille de la base de code:Plus de 421 545 lignes de code dans les fichiers JavaScript, Pug, CSS et JSON[^33]

Cela représente des milliers d'heures de développement, de débogage et d'optimisation des performances. C'est le secret de la transformation de chaque package en un service cohérent et fiable, utilisé quotidiennement par des milliers de clients.

Intégration des dépendances principales

La base de code Forward Email intègre de nombreuses dépendances dans un ensemble homogène :

  • Traitement des e-mails: Intègre Nodemailer pour l'envoi, le serveur SMTP pour la réception et Mailparser pour l'analyse
  • Authentification:Utilise Mailauth pour la vérification DKIM, SPF, DMARC et ARC
  • Résolution DNS: Exploite Tangerine pour DNS sur HTTPS avec mise en cache globale
  • Connexion MX:Utilise mx-connect avec l'intégration Tangerine pour des connexions fiables au serveur de messagerie
  • Planification des tâches: Utilise Bree pour un traitement fiable des tâches en arrière-plan avec des threads de travail
  • Modèles:Utilise des modèles de courrier électronique pour réutiliser les feuilles de style du site Web dans les communications avec les clients
  • Stockage des e-mails: Implémente des boîtes aux lettres SQLite chiffrées individuellement à l'aide de meilleurs chiffrements multiples SQLite3 avec chiffrement ChaCha20-Poly1305 pour une confidentialité quantique, garantissant une isolation complète entre les utilisateurs et que seul l'utilisateur a accès à sa boîte aux lettres

Chacune de ces intégrations nécessite une prise en compte rigoureuse des cas limites, des implications en termes de performances et des problèmes de sécurité. Le résultat est un système robuste capable de gérer des millions de transactions par e-mail de manière fiable. Notre implémentation SQLite exploite également msgpackr pour une sérialisation binaire efficace et WebSockets (via ws) pour les mises à jour de statut en temps réel sur l'ensemble de notre infrastructure.

Infrastructure DNS avec Tangerine et mx-connect

Un élément essentiel de l'infrastructure de Forward Email est notre système de résolution DNS, construit autour de deux packages clés :

  • Tangerine:Notre implémentation DNS sur HTTPS Node.js fournit un remplacement direct du résolveur DNS standard, avec des tentatives intégrées, des délais d'expiration, une rotation intelligente du serveur et une prise en charge de la mise en cache.

  • mx-connecter: Ce package établit des connexions TCP aux serveurs MX, en prenant un domaine cible ou une adresse e-mail, en résolvant les serveurs MX appropriés et en s'y connectant par ordre de priorité.

Nous avons intégré Tangerine avec mx-connect via demande d'extraction n°4, garantissant les requêtes DNS sur HTTP au niveau de la couche applicative tout au long du processus de transfert d'e-mails. Cela permet une mise en cache DNS globale à grande échelle avec une cohérence 1:1 dans toutes les régions, applications ou processus, essentielle à la fiabilité de la distribution des e-mails dans un système distribué.

Impact sur l'entreprise : de l'open source aux solutions critiques

L'aboutissement de notre parcours de dix ans dans le développement open source a permis à Forward Email de servir non seulement les développeurs individuels, mais également les grandes entreprises et les établissements d'enseignement qui constituent l'épine dorsale du mouvement open source lui-même.

Études de cas sur les infrastructures de messagerie électronique critiques

Notre engagement envers la fiabilité, la confidentialité et les principes open source a fait de Forward Email le choix de confiance pour les organisations ayant des exigences de messagerie exigeantes :

Il existe une belle symétrie dans la façon dont nos packages open source, maintenus avec soin depuis de nombreuses années, nous ont permis de créer un service de messagerie qui soutient désormais les communautés et les organisations qui défendent les logiciels open source. Ce parcours complet, de la contribution de packages individuels à la mise en place d'une infrastructure de messagerie professionnelle pour les leaders de l'open source, constitue la validation ultime de notre approche du développement logiciel.

Une décennie d'Open Source : Perspectives d'avenir

Alors que nous regardons en arrière sur une décennie de contributions open source et que nous envisageons les dix prochaines années, nous sommes remplis de gratitude envers la communauté qui a soutenu notre travail et d'enthousiasme pour ce qui va arriver.

Notre parcours, de contributeurs individuels à mainteneurs d'une infrastructure de messagerie complète utilisée par de grandes entreprises et des fondations open source, a été remarquable. Il témoigne de la puissance du développement open source et de l'impact que des logiciels bien pensés et bien entretenus peuvent avoir sur l'écosystème au sens large.

Dans les années à venir, nous nous engageons à :

  • Continuer à maintenir et à améliorer nos packages existants, garantissant ainsi qu'ils restent des outils fiables pour les développeurs du monde entier.
  • Élargir nos contributions aux projets d’infrastructures critiques, notamment dans les domaines du courrier électronique et de la sécurité.
  • Amélioration des capacités de transfert de courrier électronique tout en maintenant notre engagement en matière de confidentialité, de sécurité et de transparence.
  • Soutenir la prochaine génération de contributeurs open source par le mentorat, le parrainage et l’engagement communautaire.

Nous sommes convaincus que l'avenir du développement logiciel est ouvert, collaboratif et fondé sur la confiance. En continuant à contribuer à l'écosystème JavaScript avec des packages de haute qualité et axés sur la sécurité, nous espérons contribuer à bâtir cet avenir.

Merci à tous ceux qui ont utilisé nos packages, contribué à nos projets, signalé des problèmes ou simplement fait connaître notre travail. Votre soutien a rendu possible cette décennie d'impact, et nous sommes impatients de voir ce que nous pourrons accomplir ensemble au cours des dix prochaines années.

[^1] : Statistiques de téléchargement npm pour cabin, avril 2025 [^2] : Statistiques de téléchargement npm pour bson-objectid, février-mars 2025 [^3] : Statistiques de téléchargement npm pour url-regex-safe, avril 2025 [^4] : Nombre d'étoiles GitHub pour forwardemail/forwardemail.net en avril 2025 [^5] : Statistiques de téléchargement npm pour preview-email, avril 2025 [^7] : Statistiques de téléchargement npm pour superagent, février-mars 2025 [^8] : Statistiques de téléchargement npm pour supertest, février-mars 2025 [^9] : Statistiques de téléchargement npm pour preview-email, février-mars 2025 [^10] : Statistiques de téléchargement npm pour cabin, février-mars 2025 [^11] : Statistiques de téléchargement npm pour url-regex-safe, février-mars 2025 [^12] : Statistiques de téléchargement npm pour spamscanner, février-mars 2025 [^13] : Modèles de téléchargement quotidiens d'après les statistiques npm, avril 2025 [^14] : Modèles de téléchargement hebdomadaires d'après les statistiques npm, avril 2025 [^15] : Statistiques de téléchargement npm pour nodemailer, avril 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] : Basé sur les problèmes GitHub dans le dépôt Upptime [^28] : Basé sur les problèmes GitHub dans le dépôt Upptime [^29] : Basé sur les problèmes GitHub dans le dépôt Upptime [^30] : Statistiques de téléchargement npm pour bree, février-mars 2025 [^31] : Basé sur les requêtes d'extraction GitHub vers Upptime [^32] : Basé sur les requêtes d'extraction GitHub vers Upptime [^34] : Statistiques de téléchargement npm pour koa, février-mars 2025 [^35] : Statistiques de téléchargement npm pour @koa/router, février-mars 2025 [^36] : Statistiques de téléchargement npm pour koa-router, février-mars 2025 [^37] : Statistiques de téléchargement npm pour url-regex, février-mars 2025 [^38] : Statistiques de téléchargement npm pour @breejs/later, février-mars 2025 [^39] : Statistiques de téléchargement npm pour email-templates, février-mars 2025 [^40] : Statistiques de téléchargement npm pour get-paths, février-mars 2025 [^41] : Statistiques de téléchargement npm pour dotenv-parse-variables, février-mars 2025 [^42] : Statistiques de téléchargement npm pour @koa/multer, février-mars 2025