This Node.js program acts as a bridge between your Satisfactory dedicated server and a web-based dashboard (or any other client) to display real-time server status information.
Uses a combination of UDP polling and Satisfactory's HTTPS API to provide near real-time updates on server status, including:
- Game State
- Online Players
- Tech Tier
- Game Phase
- Average Tick Rate
Socket.IO is used to broadcast server state changes to connected clients.
- The script periodically sends UDP packets to the Satisfactory server to check for basic state changes (like player count changes).
- When a change is detected via UDP, the script makes a secure HTTPS request to the server's API to fetch the complete updated server state.
- The updated state is then broadcast to all connected clients via Socket.IO.
- Node.js and npm
- Satisfactory Dedicated Server
- Web Dashboard (Optional)
A separate frontend application (like a web dashboard) to visualize the data (not included in this repository).
-
Clone the repository
git clone https://github.com/ablomer/satisfactory-server-status.git cd satisfactory-server-status
-
Install dependencies
npm install
-
Configuration
Openindex.js
and modify thesatisfactoryConfig
object:const satisfactoryConfig = { host: "your-server-ip", // Replace with your Satisfactory server's IP address port: 7777, // Default Satisfactory server port password: "your-password", // Replace with your server's password api_path: "/api/v1/" // Satisfactory API path }
-
Run the script
node index.js
The script will start and listen for websocket connections on port
3001
.
A Dockerfile
is also included for deployment to Docker.
You will need a separate client application (e.g., a web dashboard) that connects to this server using Socket.IO. The server will emit a serverUpdate
event whenever the server state changes. Your client should listen for this event and update its UI accordingly.
- This script is configured to work with the self-signed certificate used by Satisfactory servers by default.
Remove theNODE_TLS_REJECT_UNAUTHORIZED
assignment if you have a signed certificate. - The script is configured with CORS and allows any origin by default. I recommend changing the
origin: "*"
line to your client host address.
Contributions are welcome! Feel free to open issues or pull requests.