Troubleshooting
Fixes for the issues that actually come up — DNS, certs, blocked hosts, and stuck tunnels.
The URL doesn't resolve
DNS hasn't propagated, or the record is wrong.
dig api.YOUR_DOMAIN +short # should return your edge's IP- For self-host, the Cloudflare A record must be DNS only (gray cloud), not proxied — a proxied record makes Cloudflare terminate TLS and breaks Beamd's certs.
- Fresh records can take a few minutes (occasionally up to 24h for nameserver changes). Wait and retry.
"Your connection is not private" / cert errors
Either the certificate isn't issued yet, or the host doesn't match the wildcard.
- Not issued yet: on self-host, re-run
beamd provision-dev(oradd-developer) and watch the edge logs forACME wildcard issued. - Host doesn't match: the cert is exactly one DNS label deep —
*.YOUR_DOMAINcoversapi.YOUR_DOMAINbut notdeep.nested.YOUR_DOMAIN. Use a single-label name (see Naming).
ACME issuance fails (self-host)
unauthorized/forbidden: the Cloudflare token lacksZone:DNS:Editor isn't scoped to your zone. Recreate it and verify with the token-verify curl in the Setup walkthrough.DNS lookup-style errors: DNS hasn't propagated, or your host's resolver is flaky — pin1.1.1.1/8.8.8.8(the bundled compose file does). Wait and retry.
The framework rejects the tunnel host
Dev servers like Vite and Next reject requests for unknown hosts ("Blocked
request. This host is not allowed."). Use beamd run, which injects the
allowed-host env automatically:
beamd run -- npm run devIf you're using beamd open against an already-running server, add the tunnel
domain to your framework's allowed-hosts config. See Wrap a dev server.
beamd open hangs or says "no client connected"
The background agent holds the client→edge connection; if it can't reach the
edge, open blocks. Check the agent log:
cat ~/.beamd/agent.logConfirm the edge is reachable (curl -k https://YOUR_DOMAIN/healthz) and that
your account points at the right server (beamd whoami).
"no route for host …"
You're hitting a name that isn't currently registered. List what's live:
beamd listname_taken / over_limit
name_taken: another tunnel already uses that name on the edge — pick a different--as, orbeamd closethe old one.over_limit: you've hitmax_tunnels_per_token(default 25). Close tunnels you no longer need. See Limits & quotas.
Where the logs are
| What | Where |
|---|---|
| Edge server (Docker) | docker compose logs beamd |
| Edge server (systemd) | journalctl -u beamd -f |
| Developer agent | ~/.beamd/agent.log |
Still stuck? Open an issue on the repo.