Repository navigation
troubleshooting
Run the built-in environment check first - it catches most issues:
lightspeed --checkThis verifies: interceptor availability, packet filtering tools, game profile resolution, and proxy connectivity.
CLI: Your OS doesn't have the required packet filtering tools or you lack privileges.
| OS | Required | How to fix |
|---|---|---|
| Linux | nftables or iptables + root | sudo lightspeed ... |
| macOS | pfctl (built-in) + root | sudo lightspeed ... |
| Windows | WinDivert driver + Administrator | Right-click → Run as Administrator |
Verify with:
lightspeed --checkCLI: The interceptor can't find game packets in the expected port range.
- Make sure your game is connected to a server (not just the main menu or lobby)
- Verify the game with
--scan-processes:lightspeed --scan-processes
- Try a different game profile or use manual server mode
GUI (Windows): Wait 15 seconds. If the amber "⚠ No game traffic seen" banner appears:
- Open elevated PowerShell:
Get-NetUDPEndpoint -OwningProcess (Get-Process RustClient).Id | Where-Object LocalPort -gt 1024 | Select-Object LocalPort
- Use the port shown in Advanced → set server manually
The detector hasn't seen 3 packets to the same destination within 1.5 seconds.
- Make sure you're connected to a game server (move your character to generate traffic)
- If packets still aren't detected after 15 seconds, your server is on a non-standard port - use manual server mode
- Stop and restart the interceptor after connecting to the server
Packets reach the proxy but responses aren't reaching your game. Usually a firewall issue.
Linux:
sudo iptables -I INPUT -p udp --sport 4434 -j ACCEPTmacOS:
sudo pfctl -d # Temporarily disable pf to testWindows:
# Check if the firewall rule exists
netsh advfirewall firewall show rule name="LightSpeed WinDivert Tunnel"
# Add it manually if missing
netsh advfirewall firewall add rule name="LightSpeed" protocol=UDP dir=in action=allow program="C:\path\to\lightspeed-gui.exe"# Test connectivity
curl http://YOUR_PROXY_IP:8080/health
# Expected response:
# {"status":"ok","node_id":"relay-1","uptime_secs":86400,...}If unreachable:
- Check the proxy is running:
systemctl status lightspeed-proxy - Check firewall allows UDP 4434 and TCP 8080
- Check the proxy logs:
journalctl -u lightspeed-proxy --tail 50
The interceptor seizes packets before the game can receive responses, and the inject path fails.
Windows:
- Verify
WinDivert64.sysandWinDivert.dllare next to the.exe - Disconnect secondary network adapters (Docker, VMware, Hamachi virtual adapters)
- Connect to the game server before starting the interceptor
Linux:
- Check nftables rules:
sudo nft list ruleset | grep lightspeed - If rules are stale:
sudo lightspeed --checkto diagnose
WinDivert registers a WFP callout/filter for each open handle. If a handle is never closed, that filter state lingers, and the next WinDivertOpen fails with FWP_E_IN_USE (0x8032000A) even though no process is visibly using WinDivert.
Recent LightSpeed builds close both the capture and inject handles on every orderly shutdown path, including Ctrl+C in --watch and --start-interceptor and Quit in the GUI, and the receive loop is unblocked with WinDivertShutdown before the close so teardown is deterministic. A hard kill (taskkill /f, a crash, or closing the console window) can still leave the WinDivert 2.2.x driver with stale state; that is an upstream driver limitation (basil00/WinDivert#294, #406) that userspace cannot clear once the process is gone.
If you still hit it:
- Quit gracefully and wait a moment: use the CLI Ctrl+C or the GUI's Quit, then give the handles a second or two to close before relaunching.
-
Stop the WinDivert service (avoids a reboot in some cases; note the driver is shared with any other WinDivert-based app on the machine):
sc stop windivert
- Full shutdown, not restart: Windows "Restart" can reuse the kernel session that holds the stale state; a full Shutdown → power on clears it.
Tip: On v1.2.2 and earlier, a separate bug (data-plane auth rejecting all packets, issue #59) froze the connection and forced users to repeatedly kill the client, which is what triggered most
FWP_E_IN_USEreports. That auth bug is fixed in v1.2.3.
These apply to the lightspeed-gui app on Windows.
On versions before v1.4.2, choosing Quit from the tray menu could leave the process running in the background (a zombie), so the window closed but the engine kept running and a later launch behaved oddly. v1.4.2 fixes this: Quit now terminates the process cleanly.
If you are on an older build and the process is stuck, end it manually:
Get-Process lightspeed-gui -ErrorAction SilentlyContinue | Stop-ProcessThen upgrade to v1.4.2 or later.
On versions before v1.4.2, launching the GUI twice stacked a second window and a second engine. The GUI now holds a single-instance guard: a second launch shows a brief "LightSpeed is already running" notice and exits instead of starting another engine. To force a second instance anyway (for diagnostics), pass --force or set LIGHTSPEED_GUI_FORCE=1.
The GUI discovers the community relays through the signed registry. If the relay list stays empty:
- Confirm you have internet access and that a firewall or VPN is not blocking outbound HTTPS to the registry.
- Check the GUI log (see below) for a registry fetch or signature-verification error.
- On the CLI build, run
lightspeed-client --probe-proxiesto see the discovery and probe report directly. If the CLI also finds nothing, the problem is network-side, not GUI-specific. - Restart the GUI after fixing connectivity; discovery runs on startup.
The GUI writes its trace log to:
%LOCALAPPDATA%\Lightspeed\gui-trace.log
Paste that path into the File Explorer address bar to open the folder, then open gui-trace.log in any text editor. Attach it to a bug report.
A line like Heartbeat 0 in means the engine has sent zero keepalive heartbeats in the current window. In practice it shows up when the client has not established a working control-plane connection yet, so no heartbeats have gone out. Common causes:
- The client has not registered with a relay yet (check the registration line in the status view).
- The selected relay is unreachable.
- The interceptor has not started, so no session is active.
Once registration succeeds and heartbeats start flowing, the counter climbs. If it stays at 0 while a relay shows healthy, run lightspeed-client --test-control to isolate whether the control plane is reachable.
Run with debug logging to capture detailed diagnostics:
# CLI
RUST_LOG=debug lightspeed --start-interceptor --game rust --proxy YOUR_PROXY:4434 2>&1 | tee lightspeed.log
# Windows GUI
cd C:\path\to\lightspeed
lightspeed-gui.exe 2>&1 | tee lightspeed-log.txtAttach the log file to your GitHub issue.
- FAQ - common questions
- GitHub Issues - search existing reports
- Open a new issue with your OS, game, and log output