# Start agent, backend, and frontend together
npm start
Then open http://localhost:5173 in your browser.
npm start launches all three processes concurrently, but the frontend is gated on the backend’s /api/health endpoint — Vite will not start until the backend HTTP server is accepting connections. This prevents the browser from hitting the API before CORS and routing are fully initialised.
npm run start:server-agent # Server agent on port 3002 (manages game servers)
npm run start:backend # Express backend on port 3001
npm run start:frontend # Waits for backend health check, then starts Vite on port 5173
Starting the agent first, then the backend, then the frontend mirrors the dependency order.
For a GUI alternative see Launcher — an Electron app with per-service Start/Stop/Restart controls, live log viewer, system tray support, and optional auto-start. Run it with npm run launcher.
Ctrl+C in the terminal running npm start — all three services shut down togetherstart:* command can be stopped with Ctrl+C in their respective terminalBy default the dashboard accepts connections from any private/LAN IP address. Open the dashboard on another machine using the server’s LAN IP, e.g. http://192.168.1.100:5173. See Configuration → LAN / Remote Access for the firewall and CORS details.
The server agent (backend/serverAgent.js) is a separate process that owns the worldserver and authserver child processes. Because it runs independently, restarting the dashboard backend does not kill the game servers. The dashboard backend reconnects to the agent automatically when it comes back up.
Both the backend and the server agent are wrapped by lightweight runner scripts (run.js and runAgent.js) that automatically restart their respective process when it exits with code 42. This is how the Restart Backend and Restart Agent buttons in Dashboard Management work.
If a service won’t start, see Troubleshooting → Startup. The most common causes are a missing JWT_SECRET/AGENT_SECRET or a port conflict.