Cannot connect to a lab
Start with the one check that splits the problem in half.
First: does VS Code in the browser work?
Open the lab and click Code. The browser editor needs no tunnel and no keys.
- It works — the lab is fine; the problem is between your machine and the lab. Go to Tunnel and SSH.
- It does not — the problem is the lab itself. Go to The lab or the browser editor.
The tunnel
| Symptom | Likely cause | Fix |
|---|---|---|
| WireGuard shows no handshake | The tunnel is not activated, or the device was deleted in the dashboard | Activate it. Check the device still exists on My Devices; if not, add it again and import the new config. |
| Handshake, but nothing answers | The lab is stopped, so it has no address | Check the lab is deployed. Deploy it. |
Handshake, but ping to an address fails | You pinged a network or gateway address | Ping the lab's own Device IP, shown on its page |
| It worked yesterday, not today | The device had no reserved address and was given a new one | Download the config again, and reserve the address |
| The lab's address changed | Stopping a lab releases its address | Use the Device IP on the lab's page now, or request a reserved address in the lab's Preferences |
| Imported config says the key is invalid | You registered your own public key, and the {private_key} placeholder was not replaced | Put your private key into the config on your machine |
| Works on one network, not another | That network blocks outgoing UDP | Try another network, such as a phone hotspot, to confirm |
| Device status stays Offline | The tunnel is not up on that machine | Activate it in the WireGuard app on that machine |
SSH
| Symptom | Likely cause | Fix |
|---|---|---|
Connection timed out | Tunnel down or lab stopped | Fix the tunnel first — see above |
| Asks for a password | Your SSH key is not in the lab | Add it under Account Settings → SSH, make sure it is enabled, then redeploy — keys are installed at deploy time |
Permission denied (publickey) | Wrong user name, or the lab uses a narrower key selection | Use the user from the SSH Command row. Check the lab's Preferences → SSH keys. |
REMOTE HOST IDENTIFICATION HAS CHANGED | The lab was rebuilt, and with it its host key | Remove the old entry: ssh-keygen -R <your-lab-ip>, then connect again |
Connection refused | The lab is running but SSH is not | Redeploy. If it persists, check the lab's Activity tab. |
SSH is private only
Port 22 is never published to the internet. SSH always goes through the tunnel.
The lab or the browser editor
| Symptom | Likely cause | Fix |
|---|---|---|
| code-server URL says Not running | The lab is not deployed, or its editor did not start | Redeploy the lab |
| The editor's password is rejected | You set a custom code-server password | Use your own password, not the generated one. Leaving the field empty generates a new one on each deploy. |
| Browser warns the editor's site is not secure | Certificate problem on its domain | See HTTPS not secure |
| Lab page shows it is paused | Paused labs are frozen | Click Resume |
| Lab is stopped and you did not stop it | Idle shutdown, expiry, CPU or memory | See Lab stopped unexpectedly |
| Lab never reaches deployed | The deploy failed | See Deploy failed |
A published app will not load
| Symptom | Fix |
|---|---|
| 502 or 504 error page | The app is not listening on the port you published, or it is still starting. Check it inside the lab with curl -I http://localhost:<port>. |
| Your domain shows nothing new | Domain and port changes apply only after a redeploy. Use Apply & Redeploy now. |
| Works over the tunnel, not publicly | The port is not published. See Publishing ports. |
Still stuck
Collect the lab's name, the time it happened, and what you tried, and ask in community chat or contact your administrator.
Do it with an AI assistant
You can also do this by asking an AI assistant connected to your account — see Connect an AI assistant to set one up.
| Ask | What the assistant does |
|---|---|
| “I can't reach my lab over the VPN” | list_devices to see when your device last connected, then lab_status and lab_info |
| “SSH says permission denied” | Checks your keys with list_ssh_keys, then redeploys with deploy_lab so they are installed |
| “My published app will not load” | lab_status, lab_probe, then list_domains |
Keys and passwords arrive at deploy
A key or password you just added reaches a lab only when it is redeployed. If you set a custom sudo password, use it even though the assistant's lab details still show the default one.