Jan 8, 2026: We updated this blog post to reflect our new pricing and the transition from static domains to dev domains.
One of the major complaints users have with ngrok is that the URL changes every time the agent restarts. Every ngrok account now comes with a free dev domain to alleviate this issue.
Dev domains are automatically assigned to your account and remain yours as long
as you have an ngrok account. Your dev domain uses the ngrok-free.dev base
domains—for example, abc123xyz.ngrok-free.dev.
With your free dev domain, you can focus on developing your application or
configuring ngrok as a gateway to your production services without needing to
worry about the default behavior of the ngrok agent, which generates a random
URL like https://9490551445c1.ngrok.app. That makes the development and
testing lifecycle even easier, especially for pre-release versions or internal
apps.
Dev domains aren't billed for endpoint hours and don't count toward the domain
limits of paid plans. If you need a custom or branded domain, you can upgrade
to a paid plan—our Hobbyist plan lets you choose
custom ngrok domains like your-company.ngrok.app, while our pay-as-you-go
plan lets you bring your own domain to create endpoints like
api.your-company.com and app.your-company.com.
Our mission is to equip developers with composable infrastructure that makes
putting APIs and apps online as simple as ngrok http .... Free dev domains get
all of us one crucial step closer to that vision.
Your dev domain is automatically assigned when you create your ngrok account. To find it:
ngrok-free.dev base domain).You can use ngrok and your dev domain to front your apps and APIs no matter where you run them or how they're packaged.
The fastest way to get started with your dev domain is to create an agent
endpoint. In this case, your dev domain routes traffic directly to the API or
app service running on port 8000.
ngrok http 8000 --url=<YOUR_DEV_DOMAIN>Cloud endpoints are always online and not tied to the lifecycle of an ngrok agent—you can think of them like serverless functions for handling traffic.
In the ngrok dashboard, head to Endpoints > + New and type in your dev domain.
Cloud endpoints are perfect for creating a single point of ingress for your root
domain at your-company.com—that's exactly what we do for ngrok.com. When
combined with internal
endpoints, you can
route traffic to any number of upstream services and control the configuration
from one place.
Another way to use ngrok and your dev domain is via the ngrok agent SDKs, which allow you to embed ngrok's functions directly into your APIs or apps.
For example, using the ngrok-go SDK:
package main
import (
"context"
"fmt"
"log"
"net/http"
"golang.ngrok.com/ngrok"
"golang.ngrok.com/ngrok/config"
)
func main() {
tun, err := ngrok.Listen(context.Background(),
config.HTTPEndpoint(config.WithDomain("<YOUR_DEV_DOMAIN>")),
ngrok.WithAuthtokenFromEnv(),
)
if err != nil {
log.Fatal(err)
}
log.Println("Application available at:", tun.URL())
err := http.Serve(tun, http.HandlerFunc(handler))
if err != nil {
log.Fatal(err)
}
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello from ngrok-go!")
}Once you run go run main.go, ngrok creates an agent endpoint on your dev
domain and makes this application accessible from anywhere in the world.
If you're using Kubernetes to make your APIs or apps available to the public, you can leverage our Kubernetes Operator to handle ingress and load balancing without dealing deeply with Ingress or Gateway API resources.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
ingressClassName: ngrok
rules:
- host: <YOUR_DEV_DOMAIN>
http:
paths:
- path: /
backend:
serviceName: example-service
servicePort: 80The Kubernetes Operator then creates pods and services to route all traffic on
https://<YOUR_DEV_DOMAIN> to the example-service pod.
If you don't yet have an ngrok account, you can sign up for free—your dev domain is automatically assigned when you create your account. Check out our pricing page to compare plans.
For smaller projects, the hobbyist plan lets you
use custom ngrok-branded subdomains, like example.ngrok.app.
When you're ready to start using ngrok for production, check out our pay-as-you-go plan, which lets you add your custom branded domain. Then update your DNS records to point to ngrok to create as many subdomains as you need and handle ingress to all your services from one place.
Let us know if you run into any problems or have any questions either by emailing our customer success team or by dropping an issue in our community repo.
No. Your dev domain is permanently assigned to your account and remains yours as long as you have an ngrok account. It won't change or expire, even if you don't use it for a while.
Your dev domain doesn't accrue endpoint hours, so you can keep endpoints online without worrying about hourly charges. However, your account is still subject to plan limits for HTTP requests (20k/month on Free), bandwidth (1GB/month on Free), and concurrent endpoints (3 on Free).
On the free plan, HTTP/S endpoints display a browser warning page that visitors must click through before reaching your app. This helps prevent abuse. Upgrading to Hobbyist or Pay-as-you-go removes the interstitial entirely.
No. The free plan only includes your assigned dev domain (e.g., abc123.ngrok-free.dev). To use a custom domain:
your-company.ngrok.appapi.your-company.comFree and Hobbyist plans support up to 3 concurrent endpoints. Pay-as-you-go removes this limit entirely—you can run as many endpoints as you need.
You can create TCP endpoints on the free plan, but you'll need to verify your account with a credit card first. TLS endpoints are only available on Pay-as-you-go.