O localhostly é uma alternativa grátis ao ngrok
Se você está saindo do ngrok, é isto que você recebe no lugar: um comando e uma URL HTTPS pública para o seu app local. Rode localhostly 3000 e a porta 3000 responde em https://brave-amber-fox.localhostly.iblabs.io, sem abrir porta no roteador. A conta é grátis e só pede um e-mail: 2 túneis, 1000 requisições por minuto e 25 GiB por mês.
Pegue seu token Instale o localhostly
$ localhostly 3000 https://brave-amber-fox.localhostly.iblabs.io → http://127.0.0.1:3000 Ctrl+C to stop. Requests: 21:14:03 GET / 200 12ms 21:14:05 POST /api/webhook 201 31ms
A conta grátis em números
A conta grátis é a única conta: não há plano pago nem cartão. O limite de tráfego soma os dois sentidos e o mês vira no dia 1, em UTC. Passado um limite, o visitante vê uma página que diz qual limite estourou e quando o túnel volta.
- 2 túneis abertos ao mesmo tempo
- 1000 requisições por minuto
- 25 GiB de tráfego por mês, nos dois sentidos
- R$ 0 por mês: sem plano pago e sem cartão
- 429 ao passar de um limite, com o cabeçalho
Retry-After
Um comando, uma URL pública
O agente localhostly no seu computador abre uma conexão WebSocket com o servidor do localhostly; quando alguém abre a sua URL, o servidor lê o nome no endereço, manda a requisição por essa conexão, e o agente a reproduz na sua porta local e devolve a resposta em stream. Requisições HTTP e conexões WebSocket passam.
- Pegue um token. Digite seu e-mail no formulário de cadastro. O token aparece na página de cadastro; não há e-mail de confirmação.
- Salve o token.
localhostly login <token>grava em~/.localhostly/config.json, legível só pelo seu usuário. - Abra o túnel.
localhostly 3000. O terminal mostra a URL pública e uma linha por requisição: hora, método, caminho, status e milissegundos.
O seu app recebe o método, o caminho, os cabeçalhos e o corpo do visitante, com X-Forwarded-For, X-Forwarded-Proto: https e X-Forwarded-Host. Para mandar outro endereço e outro Host ao seu app, use --host meuapp.test:3000. O nome é sorteado entre 3 palavras em inglês, adjetivo, cor e animal, e ninguém o escolhe.
Webhooks chegam direto ao seu app
Uma chamada de webhook não é um navegador, então pula a página de aviso e chega direto ao seu app. Cole https://<nome>.localhostly.iblabs.io/<seu caminho> nas configurações de webhook do provedor, e cada chamada aparece no seu terminal com método, caminho, status e tempo.
Se o agente perder a conexão, ele reconecta sozinho e, em até 10 minutos, recupera a mesma URL: o nome fica reservado por esse tempo, então uma queda curta não obriga a cadastrar o webhook de novo.
Respostas em stream e uploads grandes passam
A requisição viaja em pedaços de até 64 KiB nos dois sentidos, então o corpo nunca fica inteiro na memória. Um upload de 20 MiB passa com o pico de memória abaixo de 100 MiB na medição, e um download de 20 MiB chega a um visitante lento do mesmo jeito.
Server-Sent Events chegam enquanto o seu app os escreve: num stream medido, eventos escritos em 0, 3 e 6 segundos chegaram ao visitante em 0,6, 3,6 e 6,6 segundos. O seu app tem 60 segundos para começar a responder; depois que a resposta começa não há prazo, por isso downloads longos passam. O WebSocket do visitante chega ao seu app, e o upgrade só completa depois que o seu app o aceita, com o subprotocolo que ele escolheu.
Tranque o túnel com senha ou lista de IPs
Use --password e todo visitante precisa digitar a senha; sem valor, o localhostly cria uma senha de 12 caracteres e a mostra só no seu terminal. O seu app nunca recebe o cabeçalho Authorization do visitante.
Use --allow com endereços IP ou faixas, IPv4 ou IPv6, até 64: --allow 203.0.113.7,10.0.0.0/8. Qualquer outro endereço recebe uma página 403 que o mostra, e o WebSocket dele também recebe 403. Com --password junto, o visitante precisa dos dois.
- O navegador vê uma página de aviso na primeira visita, dizendo que o site roda no computador de alguém. Clientes de API não a veem, nem o túnel com
--allow. - O servidor registra método, caminho sem a query, status, tempo, nome do túnel e conta. Nunca registra o corpo da requisição nem os cookies.
- Do nosso lado, o seu token fica guardado só como hash SHA-256.
- O HTTPS termina no balanceador do localhostly, então o servidor do localhostly vê e repassa o seu tráfego. Não é criptografia de ponta a ponta.
Deixe o túnel como serviço do sistema
localhostly service install 3000 roda o túnel como serviço do sistema: systemd no Linux, launchd no macOS, serviço do Windows. Ele reconecta sozinho, esperando 1 segundo e dobrando até 60 segundos, e pede o mesmo nome depois de reiniciar. localhostly service status confere e localhostly service uninstall remove.
Instalar
O localhostly roda no Node.js 24 ou mais novo.
-
Teste sem instalar:
npx localhostly 3000 -
Instale de vez:
npm i -g localhostly
Depois disso, salve o token com localhostly login <token> e localhostly 3000 abre o túnel.
Pegue seu token
O cadastro pede um e-mail e nada mais. O token aparece na página de cadastro, sem e-mail de confirmação, e localhostly login <token> o salva no seu computador.