Daemon won't connect
vpd status shows disconnected. Relay state errored. The web app shows your machine as offline.
Quick checks
vpd doctor
vpd statusRead the output. If Relay state is anything other than connected, this page is for you.
Symptoms and fixes
Relay state: disconnected
Most common cause: the daemon process is up, but its WebSocket to the relay closed and reconnect is failing.
Check internet reachability first. Many false alarms turn out to be VPN or firewall changes.
curl -I https://relay.getviewport.com/health
# expect: HTTP/2 200If that fails, your network can't reach the relay. Check VPN, firewall, captive portal.
If that succeeds:
vpd logs --follow --since 5m | grep -i relayLook for the last connection attempt and the error code. Common ones:
4401: invalid_token. The relay credential has expired or been revoked. Re-pair.4403: workspace_not_found. Your workspace was archived or your pairing was revoked from the web. Re-pair.ECONNREFUSED. The relay URL is wrong. Checkdaemon.relay.endpointin~/.viewport/config.json.Noise handshake: invalid psk. Workspace requirescrypto_pairingmode. See Relay handshake errors.
Relay state: reconnecting (3/5)
Daemon is in exponential backoff. It'll try 5 times before giving up. If it gives up:
vpd restartThis re-reads the config, regenerates any session keys, and tries again from scratch.
Status: stopped
The daemon process exited. Check:
vpd logs --since 1h | tail -50Look for a panic or shutdown signal. Restart:
vpd startIf it crashes again, capture and send us:
vpd doctor --json > /tmp/vpd-doctor.json
vpd logs --since 1h > /tmp/vpd-logs.txtStatus: unresponsive
The daemon process is alive but the local API is not answering. This usually means the worker process is hung but the supervisor is up.
vpd restart --force--force sends SIGKILL to the process group. Use it when graceful shutdown isn't completing.
Self-hosted relay
If you self-host the relay and daemons can't connect to it:
- Check the relay's
/healthendpoint from a machine that can reach it:curl https://relay.your-co.com/health. - Check the relay's logs for handshake failures. If you see
JWKS_URL unreachable, the relay can't reach the platform JWKS endpoint. - See Self-host: Monitor and operate.
When it's not actually the daemon
Sometimes the daemon is fine and the platform side is the problem:
- The web app shows your machine offline.
- But
vpd statussaysconnected.
This is a state-sync gap. Force a re-sync:
vpd syncIf it persists, restart the daemon: vpd restart.
When to give up and re-pair
If you've tried the above and nothing sticks:
vpd unpair
vpd pairThis deletes the local pairing state and re-runs the browser flow. Your data on the platform side is unaffected.