ngrok vs. Expose: El túnel PHP de código abierto para desarrolladores web

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 Beyond Code's Expose: El túnel de código abierto: 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.
Si construyes APIs, configuras webhooks de Stripe, Shopify o GitHub, o necesitas ofrecer a un cliente una vista previa funcional sin desplegar en staging, probablemente hayas usado ngrok en algún momento. Durante más de una década ha sido la respuesta predeterminada a “¿cómo comparto mi localhost?”
Pero el producto ngrok ha cambiado de forma. Ha evolucionado de ser una utilidad sencilla para desarrolladores a una plataforma completa de ingreso y gateway API, y su nivel gratuito refleja ese cambio. Esto ha abierto espacio para alternativas más específicas para desarrolladores — una de las más establecidas es Expose, un túnel PHP de código abierto desarrollado por Beyond Code (los creadores de Laravel Herd y Tinkerwell).
Este artículo compara ambas herramientas tal como son hoy, no como a menudo se describen en publicaciones antiguas.
(Nota: esto es Expose de Beyond Code, no LocalXpose, una herramienta de túnel multiplataforma cubierta en otra parte de este sitio. Productos diferentes, nombres similares.)
Por qué existen los túneles locales
Un servidor local (http://localhost:8000) no es accesible desde internet — ese es el comportamiento predeterminado correcto. Pero se vuelve un problema cuando necesitas:
- Webhooks: Stripe, GitHub y servicios similares necesitan una URL pública para POSTear eventos.
- Pruebas móviles: un teléfono o emulador requiere un endpoint real para comunicarse con tu backend local.
- Demos para clientes: mostrar trabajo en progreso sin desplegar.
Las herramientas de túnel resuelven esto ejecutando un cliente en tu máquina que abre una conexión saliente a un servidor relay. Ese servidor te proporciona una URL pública y reenvía el tráfico por el túnel a tu puerto local.
ngrok: el incumbente
Creado en 2013 por Alan Shreve y escrito en Go, ngrok es la herramienta con la que la mayoría de desarrolladores aprendieron a hacer túneles. Desde entonces, se ha reposicionado como lo que su propio marketing llama un “gateway universal” — ofreciendo ingreso Kubernetes mediante su propio operador, reglas de política de tráfico (WAF, OAuth/OIDC, SAML), agrupamiento de endpoints para balanceo de carga, y cumplimiento SOC 2/HIPAA para clientes empresariales. Soporta HTTP, HTTPS, TCP y (en planes de pago) tráfico TLS, por lo que sigue siendo la herramienta adecuada para túneles que no son servidores web — sesiones SSH, servidores de juegos, puertos de bases de datos.
Lo que realmente restringe la capa gratuita (y lo que no)
Los límites actuales publicados por ngrok para el plan gratuito:
| Recurso | Límite en nivel gratuito |
|---|---|
| Endpoints en línea | Hasta 3 |
| Transferencia de datos saliente | 1 GB/mes |
| Solicitudes HTTP/S | 20,000/mes |
| Conexiones TCP | 5,000/mes (requiere verificación de tarjeta para habilitar TCP) |
| Endpoints TLS | No disponible |
| Miembros del equipo | 1 |
Algunas correcciones a afirmaciones que circulan sobre la capa gratuita:
- No hay timeout de sesión de 2 horas. La documentación de ngrok indica claramente que la capa gratuita no tiene timeout en los endpoints, y que puedes mantener un túnel indefinidamente como servicio en segundo plano. Esto se repite en muchos artículos comparativos; no es exacto según la documentación actual.
- La URL en nivel gratuito no cambia aleatoriamente en cada reinicio. Cada cuenta de ngrok — incluida la gratuita — obtiene un “dominio de desarrollo” asignado (como
your-name.ngrok-free.app) que está ligado a la cuenta, no se regenera por sesión. No puedes personalizarlo ni agregar tu propio dominio en el plan gratuito, pero no rota como describen escritos antiguos. - La página de advertencia intersticial puede ser evitada sin actualizar. ngrok inyecta una página de advertencia de seguridad en tráfico HTML en endpoints gratuitos para evitar abusos de phishing. No afecta el tráfico programático de API/webhook, y para tráfico de navegador puede saltarse enviando un encabezado
ngrok-skip-browser-warningo unUser-Agentno predeterminado — sin necesidad de pagar. La actualización elimina esto por completo, pero no es un bloqueo duro en el plan gratuito como a veces se presenta.
Lo que sí es restrictivo: 1 GB de transferencia mensual y 20,000 solicitudes que se agotan rápido en tráfico real, y los túneles TCP requieren verificación de tarjeta incluso en uso gratuito.
Precios actuales de pago
ngrok simplificó los nombres de sus planes. Actualmente no hay una categoría “Personal” — son Free, Hobbyist, Pay-as-you-go, y Enterprise:
- Hobbyist — $8/mes facturado anualmente ($10 mes a mes): 3 endpoints en línea, 5 GB de transferencia, 100,000 solicitudes, sin página de advertencia, dominios con marca ngrok.
- Pay-as-you-go — $20/mes base (incluye $20 de uso) más sobreuso medido: endpoints ilimitados, dominio propio, hasta 3 miembros en equipo.
- Enterprise — precio personalizado, SSO/SCIM, HIPAA BAAs, soporte dedicado.
Expose: la alternativa nativa en PHP
Expose es desarrollado por Marcel Pociot y el equipo de Beyond Code (también detrás de Laravel Herd y Tinkerwell). A diferencia de ngrok, está escrito completamente en PHP y enfocado deliberadamente en HTTP/HTTPS — no soporta TCP o UDP en bruto, ni intenta ser un controlador de ingreso Kubernetes. Está dirigido exactamente a los flujos de trabajo que este blog cubre mucho: desarrollo web local, pruebas de webhooks, vistas previas para clientes.
Es realmente de código abierto (licencia MIT, cliente y servidor), que es su diferenciador principal frente a ngrok.
Instalación
Métodos oficiales actuales, según la documentación de Expose:
Composer (instalación global):
composer global require exposedev/expose
Asegúrate de que el directorio global de binarios de Composer esté en tu PATH.
Archivo PHP (PHAR), sin Composer:
curl https://github.com/exposedev/expose/raw/master/builds/expose -L --output expose
chmod +x expose
sudo mv expose /usr/local/bin/expose
Un aspecto importante a aclarar: Expose aún requiere una instalación local de PHP incluso si se instala como el “binario” PHAR — lo confirma la propia FAQ de Beyond Code. Si no usas PHP por otras razones, esa es una dependencia que ngrok no tiene en su binario único en Go.
La organización del proyecto en GitHub pasó de beyondcode a exposedev; el paquete Composer beyondcode/expose todavía existe y se actualiza, pero los docs ahora apuntan a exposedev/expose.
Autenticación y compartir un sitio
expose token TU_TOKEN
expose share http://localhost:8000
Si tienes una cuenta Pro o Team (o gestionas tu propio servidor), puedes solicitar un subdominio fijo:
expose share http://localhost:8000 --subdomain=mi-app-increible
El panel
Expose incluye un panel web local (http://127.0.0.1:4040, misma convención que ngrok) para inspeccionar y reproducir solicitudes HTTP entrantes. La versión actual, Expose 3, añadió varias funciones importantes si no lo has revisado recientemente:
- Repetir con modificaciones — ahora puedes editar encabezados, URI o carga útil antes de reenviar una solicitud capturada.
- Plugins de solicitudes — Expose reconoce formatos específicos de webhooks (GitHub y Paddle Billing integrados) y muestra los campos relevantes en el panel y CLI, sin tener que buscar en JSON crudo.
- Detección de Vite — si compartes un sitio mientras un servidor de desarrollo Vite está activo, Expose lo detecta y enruta automáticamente el túnel Vite, arreglando un problema recurrente donde CSS/JS en caliente se rompían silenciosamente.
- Comando
catch-all— crea un túnel que responde200 OKa cualquier solicitud, útil para inspeccionar rápidamente payloads de webhooks sin tener un endpoint implementado.
Auto-hospedaje vs. nivel gratuito gestionado — una distinción importante
Aquí muchas comparaciones simplifican demasiado. Decir “Expose es de código abierto, así que todo es gratis” no es del todo correcto si no gestionas tú mismo el servidor.
El nivel gratuito (“Hobby”) gestionado de Expose tiene restricciones reales, según la documentación de Beyond Code: un solo servidor en la UE, nombres de túnel aleatorios en cada conexión, y límite de tiempo por conexión. Eso es muy diferente del nivel gratuito de ngrok, que ofrece un dominio estable por cuenta sin timeout.
Auto-hospedar el servidor de código abierto es realmente gratis y elimina esas restricciones — controlas el dominio, no hay límite de tiempo, y solo dependes del ancho de banda de tu infraestructura. Pero implica montar y mantener tu propio servidor (un VPS básico de un proveedor como Hetzner o DigitalOcean es suficiente), lo cual es una responsabilidad continua, no solo una configuración inicial.
Expose Pro y Team (los niveles gestionados de pago) ofrecen URLs persistentes, dominios personalizados, subdominios reservados, y la red global de servidores de Beyond Code, sin que tengas que correr nada tú mismo.
Precios actuales publicados:
| Plan | Precio | Incluye |
|---|---|---|
| Hobby | Gratis | Un servidor en la UE, nombres aleatorios, límite de tiempo |
| Auto-hospedado | Gratis (tu infraestructura) | Control total, dominio personalizado, sin límite de tiempo, tu ancho de banda |
| Pro | $79/usuario/año | URLs persistentes, dominios personalizados, subdominios reservados, red global, sin límite de tiempo |
| Team | $229/equipo/año | Todo en Pro, hasta 10 usuarios, soporte prioritario |
Integración con Laravel, corregido
Una afirmación común es que Expose “reemplazó ngrok como la opción predeterminada” en Laravel Valet. Eso no es correcto — Valet 4+ soporta tres herramientas de compartición intercambiables (ngrok, expose, y cloudflared), seleccionadas explícitamente con valet share-tool <herramienta>. ngrok sigue siendo la opción predeterminada en Valet a menos que cambies.
Donde Expose tiene una integración más estrecha y actualizada es Laravel Herd, el entorno moderno de desarrollo local de Beyond Code (sucesor de Valet, disponible para macOS y Windows): Expose viene integrado en Herd, y puedes configurar tu token de Expose directamente desde la interfaz de Herd en lugar de la CLI.
Comparación de funciones
| Función | ngrok | Expose |
|---|---|---|
| Uso principal | Ingreso de red genérico; gateway API empresarial | Túnel HTTP/HTTPS para desarrollo web |
| Lenguaje / runtime | Go (binario único) | PHP (PHAR aún requiere PHP local) |
| Protocolos | HTTP/S, TCP, TLS (pago) | HTTP, HTTPS solamente |
| Código abierto | No | Sí (MIT, cliente + servidor) |
| Ancho de banda/solicitudes en nivel gratuito | 1 GB / 20,000 solicitudes/mes | Sin límite en volumen, pero con conexiones de tiempo limitado y servidor único |
| URL en nivel gratuito | Un dominio de desarrollo persistente por cuenta | Subdominio aleatorio por conexión |
| Página de advertencia en webhooks | Sí en nivel gratuito (evitable vía encabezado sin pagar) | Ninguna |
| Inspección de solicitudes | Panel local, reproducción | Panel local, reproducción con ediciones, plugins de solicitudes webhook |
| Dominios personalizados | Solo en planes de pago ($8–10/mes+) | Gratis si auto-hospedas, o Pro ($79/usuario/año) |
| Kubernetes / ingreso empresarial | Sí (operador integrado, SSO/SCIM, HIPAA) | No es un caso de uso objetivo |
Cuándo tiene sentido cada herramienta
Qué usar ngrok si: - Necesitas hacer túneles a algo que no sea HTTP — SSH, puerto de base de datos, servidor de juegos, TCP/TLS en bruto. - Necesitas ingreso Kubernetes, SSO/SAML, o documentación de cumplimiento (HIPAA BAAs, informes SOC 2). - Prefieres no tener PHP como dependencia en una máquina que no la requiere.
Considera Expose si: - Tu trabajo es en HTTP/webhook y ya usas PHP/Laravel (Herd, Valet, Sail). - Quieres una configuración realmente gratuita e ilimitada y estás dispuesto a auto-hospedar el servidor open-source en tu propio VPS. - El panel con detección de payloads (GitHub/Paddle, detección automática de Vite) encaja con cómo depuras integraciones.
No hay una herramienta que haya “ganado” aquí — resuelven problemas superpuestos pero distintos, y la comparación honesta depende más de si necesitas TCP en bruto / ingreso empresarial (territorio de ngrok) o un túnel HTTP ligero y auto-hospedable con flujo PHP nativo (territorio de Expose).
Registro de cambios
Correcciones y adiciones hechas al borrador original, con fuentes:
- Se eliminó la afirmación de “timeout de sesión de 2 horas” en ngrok gratuito. La documentación de límites del plan gratuito de ngrok indica claramente que no hay timeout en endpoints y soporta correr como servicio en segundo plano indefinidamente. (Fuente: docs ngrok, Límites del plan gratuito)
- Se corrigió la afirmación de “URL que cambia aleatoriamente en cada reinicio”. ngrok asigna un dominio de desarrollo por cuenta, no uno nuevo aleatorio por sesión; esto ha sido así desde que ngrok cambió sus dominios en 2023. (Fuente: docs ngrok, Límites del plan gratuito — “dominio de desarrollo… específico para tu cuenta”)
- Se corrigió la descripción de la página de advertencia como un problema que solo se resuelve pagando. Puede saltarse en nivel gratuito con el encabezado
ngrok-skip-browser-warningo un User-Agent personalizado, sin afectar tráfico API/webhook. (Fuente: docs ngrok, Límites del plan gratuito — “Eliminar la página de advertencia”) - Se actualizaron los nombres y precios de los planes de ngrok. Se eliminó la categoría “Personal” obsoleta; los planes actuales son Free, Hobbyist ($8/mes anual, $10/mes mensual), Pay-as-you-go ($20/mes + uso), y Enterprise. (Fuente: ngrok.com/pricing)
- Se corrigió el comando de instalación con Composer para Expose. Ahora especifica
composer global require exposedev/expose(el org del proyecto cambió debeyondcodeaexposedev); se añadió método alternativo con PHAR. (Fuente: expose.dev/docs/getting-started/installation) - Se añadió que el “binario” PHAR de Expose aún requiere PHP local. No es un binario completamente autónomo como ngrok. (Fuente: expose.dev FAQ)
- Se corrigió la estructura de precios de Expose. Se reemplazó la descripción vaga por los niveles actuales: Hobby (gratis, restringido), Pro ($79/usuario/año), Team ($229/equipo/año, hasta 10 usuarios). (Fuente: expose.dev pricing)
- Se añadió que el nivel gratuito “Hobby” de Expose tiene restricciones reales — nombres aleatorios, límite de tiempo, un solo servidor EU. La idea de “todo gratis” solo aplica si auto-hospedas. (Fuente: expose.dev/docs/getting-started/authentication)
- Se corrigió la afirmación sobre la integración con Laravel Valet. Valet 4+ soporta tres herramientas de compartición (
ngrok,expose,cloudflared), seleccionadas convalet share-tool <tool>. ngrok sigue siendo la opción predeterminada. (Fuentes: laravel.com/docs Valet; notas de lanzamiento de Valet 4.0) - Se reemplazó la referencia a Valet por Laravel Herd, entorno de desarrollo local de Beyond Code con integración más directa con Expose (token desde la UI). (Fuente: expose.dev/docs/getting-started/authentication)
- Se añadieron detalles sobre Expose 3.0, la versión actual: nuevo panel, reproducción con ediciones, plugins webhook (GitHub, Paddle), detección automática de Vite, comando
catch-all. (Fuente: expose.dev/docs/release-notes) - Se eliminaron afirmaciones no verificables (como costos específicos de VPS) en favor de lenguaje general.
- Se eliminó el lenguaje promocional y SEO del encabezado y descripción original, enfocándose en información técnica precisa.
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.