TestKase
TestKase
|Docs
Live

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-laptop

Give 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 onUse
Desktop browsershttp://localhost:3000
Android, and Safari on iPhoneYour machine's LAN IP (http://192.168.1.8:3000) or a hostname
Native iPhone appsA 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   — works

localtest.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 *.internal and 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.