Troubleshooting
This guide helps you diagnose and resolve common issues with Beam. Start with the quick diagnosis section to identify your problem, then follow the relevant solution.
Quick Diagnosis
Before diving into specific issues, run these commands to gather diagnostic information:
12345678# Check Beam versionbeam --version# View tunnel statusbeam --verbose# Test local connectivitycurl -v http://localhost:3000
If the tunnel starts but requests fail, the issue is likely network-related. If the tunnel fails to start, check the error message — it usually indicates the specific problem.
Tunnel Won't Start
The most common startup issue is that your local application isn't running or the port is already in use.
Port Already in Use
If you see "address already in use" or "EADDRINUSE", another process is using that port.
12345678# Find what's using port 3000lsof -i :3000# Kill the process (macOS/Linux)lsof -ti:3000 | xargs kill -9# Or use a different portbeam 3001
Application Not Running
Beam needs something to forward traffic to. Make sure your application is running first.
12345678# Verify your application is accessiblecurl http://localhost:3000# If curl fails, start your application firstnpm run dev # or your start command# Then start the tunnelbeam 3000
Permission Denied
On some systems, binding to certain ports or creating network connections requires elevated privileges. This is especially common when using the DNS server feature.
123456# Run with sudo if needed for DNS featuressudo beam 3000 --domain myapp.local# Or configure your system to allow non-root port binding# macOS: no action needed for ports > 1024# Linux: sudo setcap 'cap_net_bind_service=+ep' $(which node)
Tor Connection Issues
Beam uses Tor to create hidden services. Connection issues typically fall into a few categories.
Tor Bootstrap Taking Too Long
The first time you run Beam, Tor needs to build circuits. This normally takes 10-30 seconds, but can take longer on slow networks or if Tor relay availability is limited.
12345678# Run with verbose output to see progressbeam 3000 --verbose# You'll see messages like:# [Tor] Bootstrapping: 0%# [Tor] Bootstrapping: 25%# [Tor] Bootstrapping: 50%# [Tor] Circuit established
If bootstrap stalls below 50%, your network may be blocking Tor. Try a different network or check if your ISP blocks Tor traffic.
Hidden Service Creation Failed
This usually means Tor connected but couldn't create the hidden service. The daemon binary may be missing or corrupted.
123456# Reinstall Beam to get fresh daemon binarynpm uninstall -g @byronwade/beamnpm install -g @byronwade/beam# Check if daemon existsls -la $(npm root -g)/@byronwade/beam/bin/
Tor Blocked by Network
Some corporate networks and countries block Tor. If you can't connect from one network but can from another, this is likely the issue.
Beam's embedded Tor client doesn't currently support bridges, but this is planned for a future release. For now, if Tor is blocked:
- Try a different network (mobile hotspot, VPN)
- Wait until you're on an unrestricted network
- Use Beam in local-only mode without Tor for development
DNS Resolution Issues
When using the --domain flag, Beam runs a local DNS server to resolve custom domains. This can sometimes conflict with system DNS settings.
Domain Not Resolving
If myapp.local doesn't resolve after starting the tunnel, your system may not be using Beam's DNS server.
123456789# Check if Beam DNS is respondingdig @127.0.0.1 -p 5354 myapp.local# On macOS, verify resolver is set upcat /etc/resolver/local# It should contain:# nameserver 127.0.0.1# port 5354
Configuring System DNS (macOS)
Beam tries to configure DNS automatically on macOS, but you may need to do it manually:
12345678910# Create resolver directory if it doesn't existsudo mkdir -p /etc/resolver# Add resolver for .local domainsecho "nameserver 127.0.0.1port 5354" | sudo tee /etc/resolver/local# Flush DNS cachesudo dscacheutil -flushcachesudo killall -HUP mDNSResponder
Configuring System DNS (Linux)
On Linux, DNS configuration varies by distribution. For systemd-resolved:
1234567# Add to /etc/systemd/resolved.conf[Resolve]DNS=127.0.0.1:5354Domains=~local# Restart resolvedsudo systemctl restart systemd-resolved
Alternatively, you can add entries to /etc/hosts manually:127.0.0.1 myapp.local
HTTPS Certificate Issues
When using the --https flag, Beam generates self-signed certificates. Browsers will show warnings because these certificates aren't trusted by default.
Browser Certificate Warning
This is expected behavior for self-signed certificates. In Chrome, click "Advanced" and then "Proceed to site". In Firefox, click "Advanced" and "Accept the Risk and Continue".
For development, you can trust Beam's root certificate to avoid repeated warnings:
12345678# macOS: Add certificate to Keychain# The certificate is generated at ~/.beam/certs/rootCA.pemsudo security add-trusted-cert -d -r trustRoot \-k /Library/Keychains/System.keychain ~/.beam/certs/rootCA.pem# Linux (Ubuntu/Debian): Add to system trust storesudo cp ~/.beam/certs/rootCA.pem /usr/local/share/ca-certificates/beam.crtsudo update-ca-certificates
Certificate Generation Failed
Certificate generation requires OpenSSL or a compatible library. If generation fails:
1234567891011# Check if OpenSSL is availableopenssl version# If not installed:# macOS: comes pre-installed# Ubuntu/Debian: sudo apt install openssl# Windows/WSL: sudo apt install openssl# Clear existing certificates and regeneraterm -rf ~/.beam/certsbeam 3000 --https --domain myapp.local
Performance Issues
Tor adds latency by design — traffic passes through multiple relays. Typical latency is 200-500ms round-trip. If you're experiencing significantly worse performance, here are some things to check.
High Latency
If latency exceeds 1 second consistently, the Tor circuit may have selected slow relays. Restarting the tunnel creates a new circuit which may be faster.
123456# Stop and restart the tunnel to get new Tor circuits# Press Ctrl+C, then:beam 3000# Use verbose mode to see timing informationbeam 3000 --verbose
Requests Timing Out
If requests to your .onion address time out, first verify the tunnel is still running and Tor is connected:
1234567891011# In the terminal running Beam, you should see:# "Tunnel active" or similar status messages# If the process crashed, restart it:beam 3000 --verbose# Test local connectivity first:curl http://localhost:3000# Then test the .onion address using Tor Browser# or with curl through a Tor proxy
When Performance Matters
Remember that Tor latency is a tradeoff for privacy. For local development where privacy isn't needed, access your app directly at localhost:3000 or the custom local domain. Use the .onion address only when you need to share access externally or test Tor-specific functionality.
Platform-Specific Issues
macOS
macOS may prompt for permission when Beam tries to accept network connections. Click "Allow" when prompted. If you accidentally denied, you can reset:
# Reset network permissions (requires logout)tccutil reset All# Or specifically for the terminal app you're using# System Preferences > Security & Privacy > Firewall > Firewall Options
Linux
On Linux, firewall rules may block Beam. If using ufw:
12345678# Allow Beam's DNS server portsudo ufw allow 5354/udp# Allow your application port (if exposing directly)sudo ufw allow 3000/tcp# Check firewall statussudo ufw status
Windows (WSL)
Beam runs in WSL (Windows Subsystem for Linux). Some additional steps may be needed:
123456789# Inside WSL, install Beam normallynpm install -g @byronwade/beam# Windows Firewall may block WSL networking# Open PowerShell as Administrator:New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow# If localhost doesn't work from Windows host, use WSL IP:hostname -I # Shows WSL IP address
Daemon Issues
Beam includes a compiled Rust daemon that handles Tor integration. Issues with the daemon are usually related to binary compatibility or missing dependencies.
Daemon Failed to Start
If you see "Failed to spawn daemon" or similar errors:
12345678910# Check if the daemon binary exists and is executablels -la $(npm root -g)/@byronwade/beam/bin/# Try running the daemon directly to see errors$(npm root -g)/@byronwade/beam/bin/beam-tunnel-daemon --help# If missing or corrupted, reinstallnpm uninstall -g @byronwade/beamnpm cache clean --forcenpm install -g @byronwade/beam
Architecture Mismatch
The daemon binary must match your system architecture. On Apple Silicon Macs, make sure you're using the arm64 version:
1234567891011# Check your architectureuname -m# arm64 = Apple Silicon# x86_64 = Intel# Check the daemon's architecturefile $(npm root -g)/@byronwade/beam/bin/beam-tunnel-daemon# If mismatched, clear npm cache and reinstallnpm cache clean --forcenpm install -g @byronwade/beam
Getting Help
If you've tried the solutions above and are still having issues, here's how to get help:
Gathering Diagnostic Information
When reporting an issue, include this information:
123456789101112# System informationuname -anode --versionnpm --version# Beam versionbeam --version# Run with verbose output and save to filebeam 3000 --verbose 2>&1 | tee beam-debug.log# Include the beam-debug.log contents in your report
Where to Get Help
- GitHub Issues — Report bugs and feature requests at github.com/byronwade/beam/issues
- GitHub Discussions — Ask questions and share ideas at github.com/byronwade/beam/discussions
Related Documentation
- Getting Started — initial setup and first tunnel
- CLI Reference — complete command documentation
- Tor Network — how Beam uses Tor
- Architecture — how the CLI, daemon, and Tor work together