Tunnelmole vs ngrok : une alternative npm native pour les développeurs Node.js
Current comparison
Looking for the main ngrok alternative guide?
We keep the latest ngrok alternative comparison, CLI commands, pricing notes, and webhook examples on one canonical page.
Open the InstaTunnel ngrok alternative guideQuick answer
ngrok vs Tunnelmole : l’alternative open-source native Node.js: quick answer
If free tunnel limits interrupt your workflow, compare session length, stable URLs, concurrent tunnels, and paid-plan pricing before choosing a localhost tunnel tool.
What free tunnel limits should developers check first?
Check session duration, URL stability, concurrent tunnels, custom subdomains, bandwidth or request limits, and whether webhook callbacks survive restarts.
How does InstaTunnel handle longer development sessions?
InstaTunnel Free is designed around 24-hour sessions, with Pro available for higher limits and MCP endpoint tunnel workflows.
Tout développeur utilisant un serveur local finit par rencontrer le même problème : l’application fonctionne parfaitement sur localhost:3000, mais un fournisseur de webhook, un téléphone physique ou un client à l’autre bout du monde ne peut pas y accéder. Pendant des années, ngrok a été la solution par défaut. Tunnelmole est une option plus récente, native en TypeScript, qui a gagné du terrain notamment parmi les développeurs Node.js et JavaScript qui préfèrent ne pas quitter l’écosystème npm pour obtenir une URL publique.
Ce comparatif oppose les deux en termes de friction lors de l’installation, de licences, d’auto-hébergement, et des parties de la documentation de Tunnelmole à connaître avant de faire passer du trafic de production à travers.
Pourquoi les outils de tunneling existent
Votre routeur et le pare-feu de votre OS bloquent par défaut le trafic entrant — c’est une fonctionnalité, pas un bug. Mais cela crée une vraie friction lors du développement :
- Webhooks : Stripe, Twilio, GitHub et Discord ont besoin d’une URL publique pour POST. Ils ne peuvent pas atteindre
localhost:3000. - Tests mobiles et multi-appareils : les téléphones sur le même Wi-Fi sont souvent isolés de votre machine de développement par l’isolation des clients, et taper une IP LAN dans un téléphone est peu pratique.
- API navigateur uniquement en HTTPS : Service Workers, l’API Web Crypto, la géolocalisation, les notifications push et l’installation PWA nécessitent tous un contexte sécurisé. Les certificats auto-signés sur plusieurs appareils sont une galère à gérer.
- Démonstrations de travaux en cours : montrer à un client ou un collègue quelque chose qui tourne localement, sans déploiement complet.
Un outil de tunneling résout cela en lançant un client léger qui ouvre une connexion sortante vers un relais cloud, qui fournit ensuite une URL publique et redirige le trafic via cette connexion vers votre port local. Comme la connexion est initiée en sortie, elle passe à travers la plupart des NATs et pare-feux sans configuration de routeur.
Où ngrok crée de la friction pour les développeurs JS
ngrok est un produit mature et capable, mais certains aspects le dérangent spécifiquement dans l’écosystème npm :
C’est un binaire Go, pas un package npm. L’agent principal est un binaire Go fermé, pré-compilé. Des wrappers Node.js existent, mais ils fonctionnent en lançant ce binaire en processus enfant plutôt qu’en tant que module JS natif.
Un compte et un authtoken sont obligatoires. Ce n’est pas une rumeur obsolète — la documentation CLI de ngrok indique clairement que le service nécessite une inscription pour connecter un agent, et tenter de lancer l’agent sans compte vérifié et authtoken échoue désormais avec une erreur d’authentification ERR_NGROK_4018. Il n’y a plus de démarrage rapide anonyme et sans inscription.
C’est fermé source. Vous ne pouvez pas auditer le code de l’agent, et la tarification, les noms de plans et le gating des fonctionnalités ont changé plusieurs fois dans l’historique du produit — ce qu’il faut savoir si vous construisez un workflow dépendant de limites gratuites stables.
Présentation de Tunnelmole
Tunnelmole est un outil de tunneling open-source développé par le développeur Robbie Cahill, avec les deux parties de la stack — le tunnelmole-client et le backend tunnelmole-service — écrites en TypeScript. La promesse est simple : pas de binaire Go, pas d’inscription obligatoire pour la version gratuite, et une base de code lisible par les développeurs JS.
Licences (c’est un projet à double licence, pas une seule)
Ce détail est important, car il influence ce que vous pouvez faire légalement avec chaque partie :
tunnelmole-clientest licencé MIT — permissif, facile à intégrer dans vos outils.tunnelmole-service(le relais backend) est licencé AGPLv3 — si vous le modifiez et le mettez à disposition via un réseau, la clause réseau de l’AGPL s’applique. Le mainteneur de Tunnelmole propose aussi une licence commerciale séparée pour les entreprises souhaitant plus de flexibilité que l’AGPL.
Installation
Si vous avez Node.js 16.10 ou plus récent, la méthode npm fonctionne :
npm install -g tunnelmole
tmole 3000
Vous pouvez aussi ignorer la version Node requise et télécharger un binaire précompilé avec Node intégré :
curl -O https://install.tunnelmole.com/xD345/install sudo bash install
Les utilisateurs Windows peuvent télécharger directement tmole.exe et l’ajouter à leur PATH.
Dans tous les cas, lancer tmole <port> vous donne immédiatement une URL HTTP et HTTPS, sans compte pour le service hébergé par défaut :
$ tmole 8080
http://evgtkh-ip-49-145-166-122.tunnelmole.net redirige vers localhost:8080
https://evgtkh-ip-49-145-166-122.tunnelmole.net redirige vers localhost:8080
Utilisation programmatique
Tunnelmole est aussi disponible en dépendance npm pour une utilisation dans du code Node/TypeScript, supportant ESM et CommonJS :
npm install --save tunnelmole
import { tunnelmole } from 'tunnelmole';
import express from 'express';
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Bonjour du web public, routé via Tunnelmole !');
});
app.listen(PORT, async () => {
console.log(`Serveur en local sur http://localhost:${PORT}`);
const url = await tunnelmole({ port: PORT });
console.log(`URL public accessible à : ${url}`);
});
La fonction est asynchrone et ne bloque pas la boucle d’événements. Installer comme dépendance ajoute aussi node_modules/.bin/tmole dans votre projet, pratique pour l’intégrer dans un script npm comme "start-public": "npm run start && tmole 3000".
Deux points que la communication marketing omet souvent
Ces aspects ne figurent pas dans la plupart des comparatifs, mais ils comptent pour quiconque évalue Tunnelmole pour autre chose que des tests locaux occasionnels.
Votre IP n’est pas masquée sur le service hébergé. La FAQ de Tunnelmole est claire : le service masquait l’origine IP, mais cela a été exploité par des opérateurs de phishing. Désormais, Tunnelmole ajoute un en-tête X-Forwarded-For avec votre IP réelle à chaque réponse — et pour les sous-domaines générés aléatoirement, l’IP est intégrée dans l’URL. Si la confidentialité IP est importante pour votre cas d’usage, l’auto-hébergement est la seule solution pour supprimer ce comportement (il faut retirer l’en-tête vous-même), pas le service hébergé par défaut.
La télémétrie est activée par défaut. Le client collecte des données anonymisées — version Node.js, OS, rapports de crash avec traces — sauf si vous désactivez via la variable d’environnement TUNNELMOLE_TELEMETRY=0. Pour un test unique tmole 3000, cela ne pose pas problème ; pour un workflow sensible à la conformité, il vaut mieux désactiver explicitement et le documenter.
Auto-héberger Tunnelmole
C’est une fonctionnalité que ngrok ne propose tout simplement pas, à aucun prix. Étant donné que le client et le service sont open-source, vous pouvez faire tourner votre propre instance au lieu de tunnelmole.com :
git clone git@github.com:robbie-cahill/tunnelmole-service.git
cd tunnelmole-service
npm install
cp config-instance.example.toml config-instance.toml
npm start
Configurez votre tunnelmole-client pour pointer vers votre propre endpoint WebSocket au lieu de l’instance SaaS par défaut, et vous avez une configuration de tunneling totalement privée, sans tiers, sans télémétrie non désirée, et sans abonnement pour des sous-domaines personnalisés (qui coûtent en plus sur le service hébergé).
Deux précautions à connaître avant de vous lancer dans du vrai :
tunnelmole-servicene supporte pas nativement HTTPS. La documentation du mainteneur est claire : il faut le mettre derrière Nginx (ou autre) avec un certificat Let’s Encrypt pour HTTPS. Le service hébergé tunnelmole.com ajoute cette infrastructure ; une instance auto-hébergée n’en aura pas par défaut.- Le service officiel hébergé n’est pas identique byte par byte au dépôt open-source. Selon le mainteneur, tunnelmole.com exécute le même code open-source plus la vérification de facturation/abonnement fermée, et l’infrastructure HTTPS supplémentaire — c’est la seule couche propriétaire. Cela signifie que “auto-hébergé” et “hébergé” ne tournent pas avec le même logiciel exact.
Comparatif des fonctionnalités
| Attribut | ngrok | Tunnelmole |
|---|---|---|
| Agent principal | Binaire Go, fermé | TypeScript, open source |
| Compte requis pour la version gratuite | Oui — compte vérifié + authtoken | Non, pour le service hébergé par défaut |
| Licence | Proprietary | MIT (client) / AGPLv3 (service) |
| Auto-hébergeable | Non | Oui |
| Utilisation Node.js programmatique | Wrapper autour d’un binaire externe | Module natif ESM/CommonJS |
| IP masquée pour la destination | N/A (infra ngrok) | Non — X-Forwarded-For + IP dans URL sur service hébergé |
| Télémétrie | Non le sujet de ce document | Activée par défaut, désactivation via env |
| Sous-domaines personnalisés, version gratuite | Inclus (domaine ngrok) | Nécessite abonnement payant sauf auto-hébergement |
Où chaque outil coûte réellement de l’argent
Comme la tarification évolue rapidement, voici la structure actuelle de ngrok (vérifiée directement sur leur page de tarification, pas un agrégateur tiers) :
| Plan | Prix | Inclus |
|---|---|---|
| Gratuit | 0 $ | Crédit d’utilisation unique de 5 $ (valable un an, plan gratuit uniquement), jusqu’à 3 points d’accès en ligne, 1 Go de transfert, 20k requêtes HTTP/S/mois, page d’avertissement sur les points d’accès |
| Hobbyiste | 8 $/mo annuel (10 $ mois à mois) | Crédit mensuel de 10 $, 3 points d’accès en ligne, 5 Go de transfert, 100k requêtes incluses, pas de page d’avertissement, domaines de marque ngrok |
| Pay-as-you-go | 20 $/mo + usage | Accès illimité, domaine personnel, facturation au-delà du crédit inclus |
| Entreprise | Sur devis | SSO/SAML, SCIM, HIPAA BAA, rapports SOC 2, SLA support dédié |
Le service hébergé Tunnelmole est gratuit pour le cas d’usage principal (sous-domaine aléatoire, HTTPS inclus) ; un abonnement est nécessaire pour un sous-domaine personnalisé/réservé, mais cette exigence disparaît si vous auto-hébergez.
Cas d’usage réels
Développement de Webhook. tmole 3000 vous donne une URL HTTPS publique stable à transmettre à Stripe, Twilio ou GitHub, pour déboguer en direct plutôt que d’écrire des payloads fictifs.
Tests mobiles et multi-appareils. La connexion WebSocket sortante contourne les réseaux Wi-Fi isolés qui bloqueraient autrement un téléphone vers votre machine de développement.
Fonctionnalités navigateur en HTTPS. Service Workers, installation PWA, API Web Crypto nécessitent un contexte sécurisé. Les URLs HTTPS de Tunnelmole évitent de générer et faire confiance à des certificats auto-signés sur chaque appareil de test.
Conclusion
ngrok reste une plateforme capable et prête pour l’entreprise — mais son obligation de compte et son agent fermé source sont des contraintes actuelles, pas des critiques obsolètes. La proposition de Tunnelmole aux développeurs JavaScript est légitime : installation npm native, code TypeScript lisible, et une voie vraiment gratuite sans inscription pour le cas courant. Les compromis existent cependant : la télémétrie est activée par défaut, votre IP est visible sur le service hébergé, et l’auto-hébergement pour la confidentialité implique de gérer votre propre terminaison HTTPS. Rien de tout cela ne fait de Tunnelmole un mauvais choix ; cela signifie simplement que “open source et auto-hébergeable” n’est pas la même chose que “privé par défaut”, et il est important de savoir ce que vous obtenez réellement avant de l’intégrer à autre chose qu’un simple démo local.
Changelog
- Supprimé : cadre promotionnel/SEO (“Entrez Tunnelmole, l’outil récemment viral”, “le flex ultime”, “reclaiming your ecosystem” sections) et contenu généré par IA tout au long ; langage resserré pour correspondre à un ton technique, factuel.
- Corrigé : le brouillon initial ne mentionnait pas que ngrok impose désormais une inscription et une vérification de l’authtoken avec une erreur spécifique (
ERR_NGROK_4018) — ajouté et référencé dans la documentation CLI de ngrok et une issue GitHub reproduisant l’échec. (Source : ngrok Agent CLI docs, runatlantis/atlantis#4218) - Ajouté : tableau précis des prix ngrok actuels (Gratuit/Hobbyiste/Pay-as-you-go/Entreprise), directement extrait de la page de tarification officielle, pas une estimation générique. (Source : ngrok.com/pricing)
- Ajouté : confirmation et citation pour la double licence — MIT pour
tunnelmole-client, AGPLv3 pourtunnelmole-service, plus l’existence d’une licence commerciale séparée. (Source : tunnelmole-service README) - Ajouté : nouvelle section “Deux points que la communication marketing omet souvent” couvrant (1) que le service Tunnelmole hébergé ne masque pas votre IP — il ajoute un en-tête
X-Forwarded-Foret intègre l’IP dans l’URL — et (2) que la télémétrie (version Node, OS, rapports de crash) est collectée par défaut avec une variable d’environnement d’opt-out. Ces faits n’étaient pas dans le brouillon original. (Source : tunnelmole-client README/FAQ) - Ajouté : précision que
tunnelmole-servicene supporte pas nativement HTTPS et nécessite une configuration Nginx + Let’s Encrypt pour HTTPS auto-hébergé, et que le service officiel exécute le même code open-source plus une couche de facturation fermée et une infrastructure HTTPS supplémentaire — donc auto-hébergé et hébergé ne tournent pas avec le même logiciel exact. (Source : tunnelmole-service README) - Corrigé : le brouillon initial laissait penser que
npm install -g tunnelmolene nécessite pas de Node spécifique ; en réalité, la documentation indique Node.js 16.10+ pour cette méthode, la méthode binaire précompilée n’ayant pas cette contrainte (Node est intégré). (Source : tunnelmole-client README) - Ajouté : méthodes d’installation via script et binaire Windows, qui étaient absentes du brouillon original. (Source : tunnelmole-client README)
- Conservé, vérifié : étapes d’auto-hébergement (
git clone,cp config-instance.example.toml config-instance.toml,npm start) conformes au README actuel detunnelmole-service. (Source : tunnelmole-service README) - Conservé, vérifié : exemple d’utilisation programmatique ESM/CommonJS conforme à la documentation actuelle de
tunnelmole-client. (Source : tunnelmole-client README)
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.