Windows Node Management
BadgerPanel supports running game servers on Windows machines. Windows nodes use a native daemon that manages game server processes through Windows Job Objects instead of Docker containers. This is particularly useful for games that require a Windows environment or have poor Linux support.
Requirements
- Operating System: Windows Server 2016 or later, or Windows 10 version 1607 or later.
- Privileges: Administrator access is required for service installation.
- Network: The node must be able to reach the panel over HTTPS. Ports 8443 (daemon API) and 2022 (SFTP) must be accessible from the panel.
- SteamCMD: Automatically downloaded by the daemon on first use. No manual installation needed.
Installation
Via the Panel (Recommended)
- Navigate to Admin > Nodes > Add Node.
- Select Windows as the operating system.
- Fill in the node name, FQDN or public IP, and ports.
- Click Create. The panel generates a PowerShell install command.
- On your Windows server, open an elevated PowerShell prompt and paste the command:
Invoke-Expression (Invoke-WebRequest -Uri "https://panel.example.com/api/nodes/install/TOKEN" -UseBasicParsing).ContentThe script performs the following steps:
- Creates the
C:\BadgerDaemondirectory structure. - Downloads the Windows daemon binary.
- Writes the configuration file.
- Adds Windows Firewall rules for ports 8443 and 2022.
- Registers
BadgerDaemonas a Windows Service with automatic restart on failure. - Starts the service.
Manual Installation
Download the binary, create C:\BadgerDaemon\config.yaml, and register the service with sc.exe. See the daemon README for detailed manual steps.
Differences from Linux Nodes
| Aspect | Linux (Daemon) | Windows (Daemon) |
|---|---|---|
| Process isolation | Docker containers with cgroup limits | Windows Job Objects with memory and CPU rate limits |
| Install mechanism | Egg install script runs inside a Docker container | Egg Windows install script runs as a native PowerShell process |
| Game installation | Docker image pulls or install script | SteamCMD integration for Steam-based games, or direct download |
| File paths | /var/lib/badger-daemon/servers/<uuid> | C:\BadgerDaemon\servers\<uuid> |
| Service manager | systemd | Windows Service Control Manager (SCM) |
| SFTP | Embedded SFTP server (port 2022) | Embedded SFTP server (port 2022) |
Job Objects
Windows Job Objects provide resource isolation without the overhead of containerization. The daemon creates a Job Object for each game server process and applies:
- Memory limit: Hard memory cap via
JOB_OBJECT_LIMIT_PROCESS_MEMORY. - CPU rate: CPU usage cap via Job Object CPU rate control.
- Process tree tracking: All child processes spawned by the game server are automatically included in the Job Object and subject to its limits.
SteamCMD Integration
For games distributed via Steam, the daemon uses SteamCMD to download and update game server files. The egg's windows_steam_app_id field specifies the Steam application ID. SteamCMD is downloaded automatically to C:\BadgerDaemon\steamcmd\ on first use.
Supported Games
Windows nodes support any game that can run as a native Windows process. Common examples include ARK: Survival Evolved, Rust, Counter-Strike 2, Team Fortress 2, and other Source/GoldSrc engine games. The egg must have Windows support configured (the supported_os field must include "windows" and the windows_startup field must be set).
Configuration
The daemon configuration file is located at C:\BadgerDaemon\config.yaml. Key settings include:
panel.url-- The URL of your BadgerPanel instance.panel.api_key-- Set automatically during registration.daemon.port-- API listen port (default: 8443).sftp.port-- SFTP listen port (default: 2022).servers_path-- Directory for game server files (default:C:\BadgerDaemon\servers).steamcmd_path-- Path to SteamCMD installation (default:C:\BadgerDaemon\steamcmd).
After editing the configuration file, restart the service:
Restart-Service BadgerDaemonAuto-Updates
The Windows daemon supports automatic updates, following the same mechanism as the Linux daemon. When the panel distributes a new version, the daemon downloads the updated binary, replaces itself, and restarts the Windows service.