Guide

Replace NGROK with Free Subdomains

A stable subdomain is often a better public address than a rotating tunnel URL. Learn when that is true, when it is not, and how to choose safely.

A comparison between rotating tunnel URLs and a stable subdomain workflow

A stable subdomain is often a better public address than a rotating tunnel URL. Learn when that is true, when it is not, and how to choose safely.

Review note: Reviewed against current ngrok and Cloudflare Tunnel documentation for public development access patterns.

This guide is for teams choosing between a temporary public tunnel URL and a stable subdomain for previews, webhook endpoints, demos, or internal tools that still need a real hostname.

The most common request-flow mistake here is not technical. It is conceptual. Teams ask for a stable subdomain when what they actually need is a short-lived tunnel to a laptop, or they keep sharing rotating tunnel URLs long after the workflow clearly wants a permanent public name.

Decision checklist

Before you pick the workflow, answer these questions:

  • does the public URL need to stay the same across restarts
  • will teammates, clients, or external services store this URL anywhere
  • is the destination a real hosted environment or just a local machine
  • does the outside world need the hostname to remain stable for days or weeks

Those four answers usually make the choice obvious.

Who this is for

Use this guide if you need a public address for:

  • webhook callbacks
  • preview environments
  • demos you expect people to bookmark
  • internal tools with a small but stable audience

When tunnels are still the right tool

Use a tunnel when the destination is still local and the access window is short.

That includes cases like:

  • a one-off demo from a laptop
  • a callback test against a local app
  • temporary debugging where you do not want to publish a real environment

Tunnel tools are good because they reduce setup time. The trade-off is that the public name is usually provider-branded, session-bound, or less stable than a hostname you actually own.

When a stable subdomain is better

Use a stable subdomain when the public address should stay consistent even if the underlying environment changes.

That is usually the better fit for:

  • documentation that points to a preview host
  • third-party webhooks
  • collaboration across several people
  • a promotion path from preview to production naming

Field capture

The operational difference becomes clear the moment you compare a rotating tunnel URL with a stable environment hostname in config and docs.

Comparison capture showing tunnel URLs versus stable public subdomains

The question that keeps the decision honest

Ask this instead of asking whether one tool is “better”:

Do I need a temporary bridge to a local machine, or do I need a public hostname that other people and systems can keep depending on?

If the answer is the second one, a stable subdomain usually wins.

Configuration difference in practice

A tunnel-first setup often looks like this in the rest of the stack:

PUBLIC_BASE_URL=https://2f8a-203-0-113-9.ngrok-free.app
WEBHOOK_CALLBACK_URL=https://2f8a-203-0-113-9.ngrok-free.app/webhooks

That is fine for quick testing, but it becomes noisy the moment those values have to survive beyond one session.

A stable-subdomain workflow is easier to operate repeatedly:

PUBLIC_BASE_URL=https://preview.example.com
WEBHOOK_CALLBACK_URL=https://preview.example.com/webhooks

The infrastructure behind preview.example.com can change. The public contract does not.

Failure cases to watch for

A stable subdomain was requested for something that is still purely local

If the only real destination is a laptop with no durable public environment, DNS alone does not solve the access problem. You still need a tunnel or a hosted preview.

A tunnel URL was reused as if it were permanent

Docs, QA checklists, or third-party callbacks keep referencing a provider-generated session URL that changes later. That is when “quick” starts becoming expensive.

Teams mix naming models

One system points at a tunnel, another points at a stable preview hostname, and a third expects production naming patterns. That makes debugging harder than either approach on its own.

Choose a tunnel when:

  • speed matters more than hostname stability
  • the origin is still local
  • the public access window is temporary

Choose a stable subdomain when:

  • the public name should remain stable
  • outside systems or other people will depend on it
  • the destination is a real hosted environment

That distinction is what turns “replace ngrok” from a slogan into a useful architecture decision.

Manual review

Need a root-domain name reviewed?

and.guide reviews specific root-domain subdomain requests manually. Approval is limited, provisioning is never guaranteed, and honest project context matters more than speed.