{"id":393,"date":"2026-08-13T15:22:52","date_gmt":"2026-08-13T20:22:52","guid":{"rendered":"https:\/\/jeffsantillan.com\/blog\/?p=393"},"modified":"2026-08-13T23:15:39","modified_gmt":"2026-08-14T04:15:39","slug":"que-es-ngrok-y-por-que-todo-desarrollador-termina-usandolo","status":"publish","type":"post","link":"https:\/\/jeffsantillan.com\/blog\/que-es-ngrok-y-por-que-todo-desarrollador-termina-usandolo\/","title":{"rendered":"Qu\u00e9 es ngrok y por qu\u00e9 todo desarrollador termina us\u00e1ndolo"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hay un momento muy espec\u00edfico en la vida de cualquier persona que programa: est\u00e1s construyendo algo en tu computadora, corre perfecto en <code>localhost<\/code>, y de repente necesitas que <em>alguien m\u00e1s<\/em> \u2014un servicio externo, un cliente, tu celular\u2014 lo vea. Y ah\u00ed te das cuenta de que \u00ablocalhost\u00bb es, literalmente, solo tuyo. Nadie m\u00e1s en internet puede llegar hasta ah\u00ed. La primera vez que me top\u00e9 con ese problema trat\u00e9 de resolverlo con configuraciones de router, redirecci\u00f3n de puertos, hasta pens\u00e9 en alquilar un servidor solo para probar un webhook. Fue un desperdicio de tiempo tremendo. Y ah\u00ed es exactamente donde entra ngrok.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es, en el fondo?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ngrok es una herramienta que crea un <strong>t\u00fanel seguro<\/strong> entre internet y un servidor que corre en tu m\u00e1quina local. En t\u00e9rminos simples: agarra lo que tienes corriendo en <code>localhost:3000<\/code> (o el puerto que sea) y le pone una puerta de entrada p\u00fablica, una URL real de internet, que redirige todo el tr\u00e1fico hacia tu m\u00e1quina. T\u00e9cnicamente funciona como un proxy inverso: crea un t\u00fanel seguro entre un endpoint p\u00fablico y un servicio que corre localmente, y adem\u00e1s captura y analiza todo el tr\u00e1fico que pasa por el t\u00fanel para poder inspeccionarlo o reenviarlo despu\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para que se entienda con una analog\u00eda: imagina que tu computadora es una casa sin direcci\u00f3n postal. ngrok le da una direcci\u00f3n temporal y le pone un cartero que reenv\u00eda cada carta (cada petici\u00f3n HTTP) directo a tu puerta, sin que tengas que mudarte ni construir nada nuevo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que empez\u00f3 como una utilidad de tunneling relativamente simple se fue convirtiendo, con los a\u00f1os, en algo m\u00e1s ambicioso. Con el tiempo la plataforma ampli\u00f3 sus capacidades m\u00e1s all\u00e1 del tunneling b\u00e1sico, sumando inspecci\u00f3n y reenv\u00edo de tr\u00e1fico, control de accesos y dominios est\u00e1ticos, posicion\u00e1ndose como una herramienta m\u00e1s amplia de acceso para desarrollo y DevOps. Y no es un dato menor: la empresa detr\u00e1s del proyecto atrajo inversi\u00f3n de capital de riesgo significativa, incluida una ronda de 50 millones de d\u00f3lares liderada por Lightspeed Venture Partners, lo que da una idea de cu\u00e1nta demanda real hay por resolver este problema tan puntual.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">El uso b\u00e1sico: exponer tu localhost en tres pasos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed es donde ngrok brilla de verdad, y es lo que probablemente te trajo a leer esto. El flujo t\u00edpico es as\u00ed:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Instalas el cliente de ngrok<\/strong> en tu m\u00e1quina (hay versiones para Mac, Windows y Linux, y tambi\u00e9n se puede correr como binario suelto sin instalaci\u00f3n compleja).<\/li>\n\n\n\n<li><strong>Levantas tu servidor local<\/strong> como siempre lo har\u00edas (tu API en Express, tu app en Django, lo que sea) corriendo en, digamos, el puerto 3000.<\/li>\n\n\n\n<li><strong>Ejecutas un comando<\/strong> parecido a <code>ngrok http 3000<\/code>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Y eso es todo. En cuesti\u00f3n de segundos, ngrok te devuelve una URL p\u00fablica (algo como <code>https:\/\/a1b2c3d4.ngrok-free.app<\/code>) que cualquiera en internet puede visitar, y que reenv\u00eda cada petici\u00f3n hasta tu servidor local como si nunca hubiera salido de tu m\u00e1quina. Mientras el t\u00fanel est\u00e1 abierto, tienes adem\u00e1s una interfaz local de inspecci\u00f3n donde puedes ver, en tiempo real, cada petici\u00f3n que llega: headers, body, c\u00f3digo de respuesta, todo. Y lo mejor es que puedes reenviar esas peticiones sin tener que provocar el evento original de nuevo, algo que se agradece much\u00edsimo cuando est\u00e1s depurando.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">D\u00f3nde se usa esto en el d\u00eda a d\u00eda<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Probar webhooks es, sin duda, el caso de uso n\u00famero uno.<\/strong> Servicios como Stripe, Twilio o Shopify no te avisan de un evento (un pago, un mensaje, una compra) llamando a tu <code>localhost<\/code>; necesitan una URL p\u00fablica real a la que enviarle esa notificaci\u00f3n. Poder reenviar esas peticiones sin disparar de nuevo el evento original es especialmente valioso cuando se est\u00e1n probando manejadores de webhooks para servicios como Stripe o Shopify. Antes de ngrok, para probar esto en serio ten\u00edas que desplegar tu c\u00f3digo a un servidor real cada vez que quer\u00edas validar un cambio. Ahora simplemente corres el t\u00fanel y listo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Otros usos que probablemente te van a sonar familiares:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mostrar una demo en vivo.<\/strong> \u00bfTu app todav\u00eda no est\u00e1 desplegada pero tu jefe o un cliente quiere verla ya? Compartes el link de ngrok y listo, sin pasar por un proceso de deploy.<\/li>\n\n\n\n<li><strong>Probar en el celular u otro dispositivo.<\/strong> Ideal para revisar c\u00f3mo se ve tu web en un tel\u00e9fono real, no en el simulador del navegador.<\/li>\n\n\n\n<li><strong>Integraciones entre servicios en desarrollo.<\/strong> Cuando dos equipos est\u00e1n construyendo partes distintas de un sistema y necesitan que sus entornos locales se hablen entre s\u00ed.<\/li>\n\n\n\n<li><strong>Trabajo remoto o colaborativo puntual.<\/strong> Compartir acceso temporal a algo que corre en tu m\u00e1quina sin montar infraestructura.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Lo que hay que tener claro antes de usarlo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ac\u00e1 viene la parte donde conviene ser honesto, porque ngrok no es magia gratuita ni una soluci\u00f3n de producci\u00f3n. El plan gratuito ha cambiado bastante con el tiempo y hoy trae m\u00e1s l\u00edmites que antes: sesiones con tiempo m\u00e1ximo, ancho de banda limitado, y una p\u00e1gina intersticial de advertencia que ven los visitantes antes de llegar a tu contenido. Si necesitas un dominio propio fijo, m\u00e1s ancho de banda o funciones de seguridad como restricciones por IP, autenticaci\u00f3n OAuth o pol\u00edticas de tr\u00e1fico personalizadas, eso ya entra en los planes pagos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y aqu\u00ed va el matiz m\u00e1s importante: <strong>ngrok es una herramienta de desarrollo y pruebas, no de hosting.<\/strong> No est\u00e1 pensada para que tu aplicaci\u00f3n viva ah\u00ed de forma permanente ni para tr\u00e1fico de producci\u00f3n real. Es, literalmente, un puente temporal entre tu m\u00e1quina y el mundo. Para producci\u00f3n existen otras soluciones (VPS, servicios cloud, plataformas de despliegue) que est\u00e1n dise\u00f1adas para eso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tampoco es la \u00fanica opci\u00f3n del mercado (existen alternativas como Packetriot, Cloudflare Tunnel o localtunnel), pero ngrok sigue siendo, con diferencia, la m\u00e1s popular y la que casi todo tutorial o documentaci\u00f3n de webhooks menciona primero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que m\u00e1s me gusta de ngrok es justamente su simplicidad: resuelve un problema muy concreto \u00abnecesito que internet vea lo que tengo en mi m\u00e1quina, ya, sin desplegar nada\u00bb con un solo comando. No es la herramienta que vas a usar todos los d\u00edas si trabajas en producci\u00f3n, pero es de esas utilidades que, una vez las conoces, te preguntas c\u00f3mo hac\u00edas antes para probar un webhook o mostrar una demo a \u00faltimo momento. Si todav\u00eda no la has probado, instalarla y correr tu primer t\u00fanel te toma literalmente cinco minutos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfLa usas para webhooks, para demos, o le has encontrado otro uso interesante? Me encantar\u00eda leer en qu\u00e9 la aplicas t\u00fa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instalaci\u00f3n:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pueden encontrar el instalador en la Microsoft Store<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"747\" height=\"500\" src=\"https:\/\/jeffsantillan.com\/blog\/wp-content\/uploads\/2026\/08\/image-4.png\" alt=\"\" class=\"wp-image-398\" srcset=\"https:\/\/jeffsantillan.com\/blog\/wp-content\/uploads\/2026\/08\/image-4.png 747w, https:\/\/jeffsantillan.com\/blog\/wp-content\/uploads\/2026\/08\/image-4-300x201.png 300w\" sizes=\"auto, (max-width: 747px) 100vw, 747px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>ngrok --version<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"72\" src=\"https:\/\/jeffsantillan.com\/blog\/wp-content\/uploads\/2026\/08\/image-3.png\" alt=\"\" class=\"wp-image-396\" srcset=\"https:\/\/jeffsantillan.com\/blog\/wp-content\/uploads\/2026\/08\/image-3.png 508w, https:\/\/jeffsantillan.com\/blog\/wp-content\/uploads\/2026\/08\/image-3-300x43.png 300w\" sizes=\"auto, (max-width: 508px) 100vw, 508px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Fuentes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wikipedia, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ngrok\">\u00abNgrok\u00bb<\/a><\/li>\n\n\n\n<li>StackShare, <a href=\"https:\/\/stackshare.io\/ngrok\/vs\/packetriot\">comparaci\u00f3n ngrok vs. Packetriot<\/a><\/li>\n\n\n\n<li>Pangea, <a href=\"https:\/\/pangea.app\/glossary\/ngrok\">glosario: qu\u00e9 es ngrok<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Hay un momento muy espec\u00edfico en la vida de cualquier persona que programa: est\u00e1s construyendo algo &hellip; <a title=\"Qu\u00e9 es ngrok y por qu\u00e9 todo desarrollador termina us\u00e1ndolo\" class=\"hm-read-more\" href=\"https:\/\/jeffsantillan.com\/blog\/que-es-ngrok-y-por-que-todo-desarrollador-termina-usandolo\/\"><span class=\"screen-reader-text\">Qu\u00e9 es ngrok y por qu\u00e9 todo desarrollador termina us\u00e1ndolo<\/span>Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":394,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[95,101,96,100,97,98,99],"class_list":["post-393","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria","tag-apis","tag-backend","tag-desarrollo-web","tag-devops","tag-herramientas-para-programadores","tag-redes","tag-testing-de-webhooks"],"_links":{"self":[{"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/posts\/393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/comments?post=393"}],"version-history":[{"count":2,"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/posts\/393\/revisions"}],"predecessor-version":[{"id":399,"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/posts\/393\/revisions\/399"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/media\/394"}],"wp:attachment":[{"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/media?parent=393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/categories?post=393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jeffsantillan.com\/blog\/wp-json\/wp\/v2\/tags?post=393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}