Test a site on your own machine
Reach localhost, a private staging server, or anything behind your firewall from a cloud browser or a real phone — using the TestKase tunnel client.
A site on localhost, a staging server behind your VPN, an internal build box — a cloud browser can't reach any of them on its own.
The tunnel fixes that. You run a small client on your machine, and the session routes private traffic back down that connection.
Nothing is exposed to the internet. The client dials out to TestKase over port 443, the same way your browser does, so it works from behind a corporate firewall with no inbound ports opened.
Set it up
1. Download the client. On any Live start screen, open the ⓘ next to the "Reach my local site" dropdown and pick the build for your operating system. The same panel links to the API Keys page, where you create your access key.
2. Start it with that key:
testkase-tunnel --token xyz_your_key --name my-laptopGive it a name you'll recognise — you pick that name when you start a session. Omit --name and it uses your machine's hostname. In CI, pass the key as a TESTKASE_TUNNEL_TOKEN environment variable instead, and give each job its own name.
Leave the client running while you test. Ctrl-C stops it and closes the tunnel.
3. Pick it when you start a session. The "Reach my local site" dropdown lists your connected tunnels. Choose yours and start. If yours isn't listed, the client isn't running or is using a different access key.
Which address to use
| Testing on | Use |
|---|---|
| Desktop browsers | http://localhost:3000 |
| Android, and Safari on iPhone | Your machine's LAN IP (http://192.168.1.8:3000) or a hostname |
| Native iPhone apps | A hostname only — see below |
On a phone, localhost never works. It means the phone itself, not your machine. Use a LAN IP or a hostname.
iPhone apps: use a hostname
iOS handles localhost and private addresses like 192.168.1.8 on the device itself, so they never reach the tunnel and your app just times out.
❌ http://192.168.1.8:3000/api — times out
❌ http://localhost:3000/api — means the phone itself
✅ http://localtest.me:3000/api — workslocaltest.me is a public address that means "the machine at the other end of the tunnel". Any hostname your own machine can resolve works too.
Allow that hostname in your dev server. The request arrives with Host: localtest.me, and Django, Rails and Vite reject unknown hostnames by default — so you'd fix the URL and still see an error. Add it to your allowed hosts (ALLOWED_HOSTS in Django, server.allowedHosts in Vite).
What goes through the tunnel
Only what needs to:
- Through your machine —
localhost, private addresses (10.x,172.16-31.x,192.168.x), and any hostname that doesn't resolve publicly, so*.internaland your staging box both work. - Straight out from our cloud — everything public.
That keeps public sites fast and off your bandwidth. Override the split with --allow-hosts (tunnel only these) or --bypass-hosts (never tunnel these).
Good to know
- The tunnel closes when the client exits, and any session using it loses access to your machine. Keep it running for the whole test.
- One name per tunnel. Two clients with the same name fight over the connection — give each machine or CI job its own.
