FAQ
Generating an SSH key
If you don't have an SSH key yet:
ssh-keygen -t ed25519GitHub and GitLab have detailed guides. Then upload the public key (~/.ssh/id_ed25519.pub) at the admin portal.
Permission denied (publickey)
Try plan as the SSH user:
ssh -R example.com:80:localhost:8080 plan@localhost.runStill failing? Email help@localhost.run.
I don't want to use an SSH key
Warning: custom domain subscriptions require an SSH key.
For free tunnels, skip the key check with the nokey user:
ssh -R 80:localhost:8080 nokey@localhost.runMy free domain keeps changing
Free domains change after a few hours. To keep a name between connections, use an SSH key and don't use the nokey user.
My tunnel shows an error page
Check your app is reachable at http://localhost:{port} in your browser, and check the running SSH command's output for hints.
I can see requests to localhost:8080 when browsing my site thru localhost.run
Many frameworks build full URLs from the domain they think they run under — often localhost and their port. Search "your framework + reverse proxy" for the fix.
My connection keeps dropping
Usually the TCP connection was broken by timeouts or routing changes on the internet. Enable SSH keepalives:
ssh -o ServerAliveInterval=60 -R 80:localhost:8080 localhost.runSSH sends an empty packet after 60s of inactivity, which:
- Wards off router idle timeouts.
- Detects broken routes quickly so the command exits and you can recover.
For auto-healing, wrap ssh in a loop (with a sleep) or use autossh with the same options plus -M 0 — autossh's own monitoring doesn't work with localhost.run.
How do I move my domain to another account?
- Cancel the existing subscription, if you still have access to the old account.
- Set up the same domain in the new account.
- Update the
_lhrTXT record to the new domain ID. - Pay for the new subscription — remaining time is credited after the next step.
- Email help@localhost.run to say you moved; the old subscription is cancelled and the new one credited.