Tunnelmole vs ngrok: Una alternativa nativa en npm para desarrolladores de 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: La alternativa de código abierto y nativa en 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.
Cada desarrollador que ejecuta un servidor local llega en algún momento a la misma situación: la app funciona bien en localhost:3000, pero un proveedor de webhooks, un teléfono físico o un cliente al otro lado del mundo no pueden acceder a ella. Durante años, ngrok ha sido la solución predeterminada. Tunnelmole es una opción más reciente, nativa en TypeScript, que ha ganado tracción específicamente entre desarrolladores de Node.js y JavaScript que prefieren no abandonar el ecosistema npm para obtener una URL pública.
Este artículo compara ambos: fricción en la instalación, licencias, autoalojamiento y las partes de la documentación de Tunnelmole que vale la pena leer antes de dirigir tráfico cercano a producción a través de él.
Por qué existen las herramientas de tunneling
Tu router y el firewall del sistema operativo bloquean el tráfico entrante por defecto — eso es una característica, no un error. Pero crea una fricción real durante el desarrollo:
- Webhooks: Stripe, Twilio, GitHub y Discord necesitan una URL pública para hacer POST. No pueden acceder a
localhost:3000. - Pruebas en móvil y multiplataforma: los teléfonos en la misma Wi-Fi a menudo están aislados de tu máquina de desarrollo por aislamiento del cliente, y escribir una IP LAN en un teléfono es incómodo de todos modos.
- APIs del navegador solo HTTPS: Service Workers, la API Web Crypto, Geolocalización, notificaciones push y la instalación de PWA requieren un contexto seguro. Los certificados autofirmados en múltiples dispositivos son un problema para gestionar.
- Demostración de trabajo en progreso: mostrar a un cliente o compañero algo que corre localmente, sin un despliegue completo.
Una herramienta de tunneling resuelve esto ejecutando un cliente ligero que abre una conexión saliente a un relay en la nube, que luego proporciona una URL pública y reenvía el tráfico de vuelta a esa conexión hacia tu puerto local. Como la conexión es iniciada desde dentro, atraviesa la mayoría de NATs y firewalls sin necesidad de configurar el router.
Dónde ngrok crea fricción para desarrolladores de JS
ngrok es un producto maduro y capaz, pero hay algunos aspectos que específicamente molestan a los desarrolladores que viven en el ecosistema npm:
Es un binario en Go, no un paquete en npm. El agente principal es un binario en Go de código cerrado y precompilado. Existen envoltorios para Node.js, pero funcionan lanzando ese binario como proceso hijo en lugar de comportarse como un módulo JS nativo.
Una cuenta y un authtoken son obligatorios. Esto no es un mito anticuado — la propia documentación de CLI de ngrok indica claramente que el servicio requiere que te registres para conectar un agente, y intentar ejecutar el agente sin una cuenta verificada y authtoken ahora falla directamente con un error ERR_NGROK_4018. Ya no hay inicio rápido anónimo y sin registro.
Es de código cerrado. No puedes auditar el código del agente, y los precios, nombres de planes y funciones de ngrok han cambiado varias veces en la historia del producto — algo importante si estás construyendo un flujo de trabajo que depende de límites específicos en la capa gratuita.
Entra Tunnelmole
Tunnelmole es una herramienta de tunneling de código abierto creada por el desarrollador Robbie Cahill, con ambas partes de la pila — el tunnelmole-client y el backend tunnelmole-service — escritos en TypeScript. La propuesta es sencilla: sin binario en Go, sin registro obligatorio para la capa gratuita y con una base de código que los desarrolladores de JS pueden leer.
Licencias (esto es un proyecto con doble licencia, no una)
Este detalle es importante, ya que afecta lo que puedes hacer legalmente con cada parte:
tunnelmole-clienttiene licencia MIT — permisiva, fácil de integrar en tus propias herramientas.tunnelmole-service(el relay backend) tiene licencia AGPLv3 — si lo modificas y lo pones a disposición en red, se aplica la cláusula de uso en red de la AGPL. El mantenedor de Tunnelmole también ofrece una licencia comercial separada para empresas que quieran más flexibilidad que la que permite la AGPL.
Instalación
Si tienes Node.js 16.10 o superior, la ruta con npm funciona:
npm install -g tunnelmole
tmole 3000
También puedes saltarte el requisito de versión de Node y obtener un binario precompilado con Node incluido:
curl -O https://install.tunnelmole.com/xD345/install sudo bash install
Los usuarios de Windows pueden descargar directamente tmole.exe y agregarlo a su PATH.
De cualquier forma, ejecutar tmole <puerto> te da inmediatamente una URL HTTP y HTTPS, sin necesidad de cuenta para el servicio alojado por defecto:
$ tmole 8080
http://evgtkh-ip-49-145-166-122.tunnelmole.net está reenviando a localhost:8080
https://evgtkh-ip-49-145-166-122.tunnelmole.net está reenviando a localhost:8080
Uso programático
Tunnelmole también se distribuye como dependencia npm para usar dentro de código Node/TypeScript, soportando tanto ESM como 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('Hola desde la web pública, enrutada a través de Tunnelmole!');
});
app.listen(PORT, async () => {
console.log(`El servidor corre localmente en http://localhost:${PORT}`);
const url = await tunnelmole({ port: PORT });
console.log(`URL pública disponible en: ${url}`);
});
La función es asíncrona y no bloquea tu ciclo de eventos. Instalarla como dependencia también crea node_modules/.bin/tmole en tu proyecto, útil para integrarla en un script npm como "start-public": "npm run start && tmole 3000".
Dos cosas que la copia de marketing suele omitir
Estas no aparecen en la mayoría de las comparaciones, pero son importantes para quienes evalúan Tunnelmole para algo más que pruebas locales casuales.
Tu IP no está oculta en el servicio alojado. La FAQ de Tunnelmole es clara al respecto: el servicio solía ocultar las IPs de origen, pero eso fue explotado por operadores de phishing, así que ahora Tunnelmole añade un encabezado X-Forwarded-For con tu IP real en cada respuesta — y en subdominios generados aleatoriamente, la IP está incrustada en la URL. Si la privacidad de IP importa en tu caso, el autoalojamiento es la forma de eliminar ese comportamiento (tendrías que quitar el encabezado tú mismo), no el servicio alojado por defecto.
La telemetría está activada por defecto. El cliente recopila datos anónimos — tu versión de Node.js, sistema operativo y reportes de fallos con trazas — a menos que optes por desactivarlo configurando TUNNELMOLE_TELEMETRY=0 en tu entorno. Para una prueba puntual con tmole 3000 esto no es un problema; para flujos de trabajo que requieran cumplimiento, vale la pena desactivarlo explícitamente y documentarlo.
Autoalojamiento de Tunnelmole
Esta es una función que ngrok simplemente no ofrece a ningún precio. Como tanto el cliente como el servicio son de código abierto, puedes correr tu propia instancia en lugar de confiar en 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
Configura tu tunnelmole-client para apuntar a tu propio endpoint WebSocket en lugar del servicio SaaS por defecto, y tendrás una configuración de tunneling completamente privada, sin terceros en el proceso, sin telemetría que no hayas añadido tú mismo y sin suscripción para subdominios personalizados (que cuesta extra en el servicio alojado).
Dos advertencias importantes antes de confiar en esto para algo real:
tunnelmole-serviceno soporta HTTPS nativo. La documentación del mantenedor es explícita: necesitas ponerlo detrás de Nginx (u otro similar) con un certificado Let’s Encrypt para HTTPS. El servicio en tunnelmole.com añade esta infraestructura encima del código abierto; una instancia autoalojada sin ello no la tendrá por defecto.- El servicio oficial alojado no es 100% idéntico al repositorio de código abierto. Según el mantenedor, tunnelmole.com ejecuta el mismo código abierto más la verificación de facturación/cerrada y la infraestructura HTTPS adicional — esa es la única capa propietaria, pero significa que “autoalojado” y “alojado” no corren el mismo software byte a byte.
Comparación de funciones
| Atributo | ngrok | Tunnelmole |
|---|---|---|
| Agente principal | Binario en Go, cerrado | TypeScript, código abierto |
| Cuenta obligatoria para la capa gratuita | Sí — cuenta verificada + authtoken | No, para el servicio por defecto |
| Licencia | Propietaria | MIT (cliente) / AGPLv3 (servicio) |
| Autoalojable | No | Sí |
| Uso programático en Node.js | Wrapper sobre binario externo | Módulo nativo ESM/CommonJS |
| IP oculta del destino | N/A (infraestructura propia de ngrok) | No — X-Forwarded-For + IP en URL en servicio alojado |
| Telemetría | No es el foco | Activada por defecto, opción de desactivar vía env |
| Subdominios personalizados, en plan gratuito | Incluido (dominio ngrok) | Requiere suscripción paga a menos que sea autoalojado |
Dónde cada herramienta realmente cuesta dinero
Dado que los precios son algo que se vuelve obsoleto rápidamente en artículos así, aquí la estructura actual publicada de ngrok (verificada directamente en la página de precios, no en un agregador externo):
| Plan | Precio | Incluye |
|---|---|---|
| Gratis | $0 | Crédito de uso único de $5 (válido un año, solo plan gratuito), hasta 3 endpoints en línea, 1GB transferencia, 20k solicitudes HTTP/S/mes, página de advertencia en endpoints |
| Hobbyist | $8/mes facturado anualmente ($10 mes a mes) | Crédito mensual de $10, 3 endpoints en línea, 5GB transferencia, 100k solicitudes incluidas, sin página de advertencia, dominios con marca ngrok |
| Pago por uso | $20/mes + uso | Endpoints ilimitados y transferencia, dominio propio, uso adicional fuera del crédito incluido |
| Enterprise | Personalizado | SSO/SAML, SCIM, HIPAA BAAs, informes SOC 2, SLA de soporte dedicado |
El servicio alojado de Tunnelmole es gratuito para el caso de uso principal (subdominio aleatorio, HTTPS incluido); solo se necesita suscripción para un subdominio personalizado/reservado, y esa necesidad desaparece si se autoalojan.
Casos de uso en el mundo real
Desarrollo de webhooks. tmole 3000 te da una URL HTTPS pública estable para entregar a Stripe, Twilio o la configuración de webhook de GitHub, para que puedas poner puntos de interrupción y depurar eventos en vivo en lugar de escribir cargas útiles de prueba.
Pruebas en móvil y multiplataforma. Como el túnel es una conexión WebSocket saliente, evita las redes Wi-Fi aisladas que bloquearían a un teléfono de llegar directamente a tu máquina de desarrollo.
Funciones del navegador solo HTTPS. Service Workers, instalación de PWA y la API Web Crypto requieren un contexto seguro. Las URLs HTTPS de Tunnelmole evitan la necesidad de generar y confiar en certificados autofirmados en cada dispositivo de prueba.
Conclusión
ngrok sigue siendo una plataforma capaz y lista para empresas — pero su requisito de cuenta y el agente de código cerrado son restricciones actuales, no críticas anticuadas. La propuesta de Tunnelmole para desarrolladores de JavaScript es legítima: instalación nativa en npm, código TypeScript legible y un camino realmente gratuito y sin registro para el caso más común. Sin embargo, los compromisos también son reales — la telemetría está activada por defecto, tu IP es visible en el servicio alojado y el autoalojamiento para privacidad implica gestionar tu propio HTTPS. Nada de eso hace que Tunnelmole sea una mala opción; simplemente, “código abierto y autoalojable” no es lo mismo que “privacidad por defecto”, y es importante saber qué estás obteniendo antes de integrarlo en algo más que una demo local rápida.
Cambios recientes
- Eliminado: marco promocional/SEO (“Entra Tunnelmole, la herramienta que ha viralizado recientemente”, “el máximo nivel”, “reclamando tu ecosistema” en encabezados) y relleno generado por IA en todo el contenido; lenguaje ajustado a un tono técnico y basado en hechos.
- Corregido: el borrador original no mencionaba que ngrok ahora exige obligatoriamente registro y verificación de authtoken con un error específico (
ERR_NGROK_4018) — añadido y referenciado en la documentación de CLI de ngrok y en un issue de GitHub que muestra la falla. (Fuente: ngrok Agent CLI docs, runatlantis/atlantis#4218) - Añadido: tabla exacta de precios actual de ngrok (Gratis/Hobbyist/Pago por uso/Enterprise), extraída directamente de la página de precios de ngrok, no de una afirmación general de “$0–$49/mes”. (Fuente: ngrok.com/pricing)
- Añadido: confirmación y cita de la licencia dividida — MIT para
tunnelmole-client, AGPLv3 paratunnelmole-service, además de la existencia de una licencia comercial. (Fuente: tunnelmole-service README) - Añadido: nueva sección “Dos cosas que la copia de marketing suele omitir” que cubre (1) que el servicio Tunnelmole alojado no oculta tu IP — añade un encabezado
X-Forwarded-Fory la IP en la URL generada — y (2) que la telemetría (versión de Node, sistema operativo, informes de fallos) se recopila por defecto con opción de desactivarla mediante env var. Ninguna de estas secciones aparecía en el borrador original. (Fuente: tunnelmole-client README/FAQ) - Añadido: aclaración de que
tunnelmole-serviceno soporta HTTPS nativo y requiere configuración adicional con Nginx + Let’s Encrypt para HTTPS en autoalojamiento, además de que el servicio oficial combina código abierto con código cerrado de facturación y infraestructura HTTPS adicional — por lo que autoalojado y alojado no son software idéntico byte a byte. (Fuente: tunnelmole-service README) - Corregido: el borrador original implicaba que
npm install -g tunnelmoleno requiere consideración de versión de Node; en realidad, según la documentación del cliente, Node.js 16.10+ es obligatorio para esa ruta, mientras que el script de instalación/precompilado no tiene esa restricción ya que Node viene incluido. (Fuente: tunnelmole-client README) - Añadido: métodos alternativos de instalación mediante script y binario para Windows, que el borrador original omitió por completo. (Fuente: tunnelmole-client README)
- Mantener, verificado: pasos de autoalojamiento (
git clone,cp config-instance.example.toml config-instance.toml,npm start) coinciden exactamente con la documentación actual detunnelmole-service. (Fuente: tunnelmole-service README) - Mantener, verificado: ejemplo de uso programático en ESM/CommonJS coincide con la API documentada en el README actual de
tunnelmole-client. (Fuente: 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.