Getting Started - The Simple Way
There are TWO different ways of hosting your own Puck server, one is to simply open your game up normally and open the "SERVER BROWSER" menu and select "NEW SERVER" at the bottom

You will be presented with this screen

⚠️ Important Considerations
This method relies on good ping and framerate. Dedicated servers are limited to 100hz/100fps. Self-hosted servers need solid network and system specs for higher refresh rates.
The videos below show high vs low frame rates. In Puck, physics run server-side, so your mouse movements are limited by the server's tick rate, causing sluggish controls unless adjusted.
Port Forwarding Setup
If players can't connect to your server, you need to open ports 7777 and 7778 (UDP) on your router. So long as you are not behind a CGNAT.
Access your router's admin panel: Run ipconfig
in Windows Terminal, copy the "Default Gateway" IP address (like 192.168.1.1), paste it into your browser's address bar, then log in using the credentials typically on your router's label.
Port Forward Setup Example:
- Protocol:
UDP
- External Port:
7777
and7778
- Internal Port:
7777
and7778
- Internal IP: Your PC's local IP (find with
ipconfig
in Windows terminal)
Port Forwarding Guides by Router Brand
- Linksys Router Port Forwarding Guide
- Netgear Router Port Forwarding Guide
- ASUS Router Port Forwarding Guide
- TP-Link Router Port Forwarding Guide
- Universal Port Forwarding Guide (All Brands)
Enabling UPnP
Alternative: You can enable UPnP instead of manual port forwarding. This is less reliable but automatically handles port forwarding for all applications. Look for a UPnP toggle in your router admin settings (usually at 192.168.1.1
).
Security Warning
Enabling UPnP can resolve connection issues rather than simply port forwarding, however, this can create security vulnerabilities. A lot of routers have UPnP disabled by default for a reason.
Still Can't Connect?
Check Your PC Firewall
Your PC's firewall might be blocking the connection even when your router is configured correctly. Make sure Windows Firewall and any other security software are allowing ports 7777 and 7778 through.
CGNAT / Double-NAT Issues
If your network is behind a "double-NAT" or CGNAT (Carrier-Grade NAT), port forwarding won't work properly.
How to check: Compare your router's WAN IP address with your public IP from ifconfig.io. If they don't match, you're behind CGNAT.
Solution: Use a paid VPS provider instead (see guides below).

The Advanced Way
Want something more permanent, stable, dedicated and more performant?
VPS vs Home Server
VPS: Professional hosting, better uptime, monthly cost. Best for 24/7 public servers (CDL, Toasters Rinks & PHL).
Home Server: No ongoing costs, full control, uses your bandwidth/electricity. Best for friends & family servers.
VPS Providers
- Vultr
- OVH
Vultr is a good provider, they have a lot of locations and are very cheap. Easy to setup and use.
OVH is a french provider, they also have a lot of locations and are also very cheap.
Operating System
Debian (Recommended) - Stable, beginner-friendly, minimal resources.
Ubuntu Server - User-friendly, great community support.
Fedora Server - Modern features, cutting-edge packages.
Docker Container - Easiest deployment (Not available yet).
Windows Server - Familiar interface but resource-heavy. Not recommended.
Server Setup & Configuration
Prerequisites
- A Debian-based (Debian 12 bookworm) server with SSH access (Debian 13 has now released but has not been tested, likely the exact same)
- Root access and preferably a dedicated sudo user
- At least 2GB of memory (each Puck server uses ~300MB)
- Basic command line knowledge
These commands are executed as root user
If you are not comfortable with the command line, please use the simple guide above.
You can use sudo to run commands as root, but for the sake of simplicity, we will be using su -l
for the entire guide.
A dedicated puckd user will be created below for the server daemon
Step 1: Update Your System
apt update && apt upgrade -y
Step 2: Install Prerequisites & SteamCMD
Install necessary tools and prepare SteamCMD:
apt install software-properties-common
echo "deb http://deb.debian.org/debian bookworm main contrib non-free" > /etc/apt/sources.list.d/nonfree.list
dpkg --add-architecture i386
apt update
apt install steamcmd
Step 3: Create Server Download Directory
mkdir -p /srv/puck-download
Step 4: Download Puck Server Files
Use SteamCMD to download the server files:
/usr/games/steamcmd +force_install_dir /srv/puck-download +login anonymous +app_update 3481440 +quit
Note: 3481440 is the Steam App ID for Puck's dedicated server. You can verify it on SteamDB.
Step 5: Create System User for Running Server
Create a dedicated system user for running the server:
adduser --system --no-create-home --group puckd
Step 6: Set Up the First Server Instance
Create the server directory and assign permissions:
mkdir -p /srv/puck/server1
cp -r /srv/puck-download/* /srv/puck/server1/
chown -R puckd:puckd /srv/puck/server1
chmod +x /srv/puck/server1/start_server.sh
chmod +x /srv/puck/server1/Puck.x86_64
Step 7: Create Server Configuration
nano /srv/puck/server1/config.json
Paste and modify as needed:
{
"port": 7777,
"pingPort": 7778,
"name": "My Dedicated Puck Server",
"maxPlayers": 10,
"password": "",
"voip": false,
"isPublic": true,
"adminSteamIds": [],
"reloadBannedSteamIds": false,
"usePuckBannedSteamIds": true,
"printMetrics": true,
"kickTimeout": 300,
"sleepTimeout": 60,
"joinMidMatchDelay": 10,
"targetFrameRate": 120,
"serverTickRate": 100,
"clientTickRate": 200,
"startPaused": false,
"allowVoting": true,
"phaseDurationMap": {
"Warmup": 600,
"FaceOff": 3,
"Playing": 300,
"BlueScore": 5,
"RedScore": 5,
"Replay": 10,
"PeriodOver": 15,
"GameOver": 15
},
"mods": [
{
"id": 3493628417,
"enabled": false,
"clientRequired": true
},
{
"id": 3491056040,
"enabled": true,
"clientRequired": false
}
]
}
Important Settings
-
Name: Enter your server name (appears in server browser)
- You can use Unity Rich Text for colors and sizes. Be careful of the character limit and do not abuse this feature.
- Port: Set the port number (default is 7777)
- targetFrameRate: The actual FPS the server will attempt to run at. Recommended to set this value 10-20 above tickRate.
- serverTickRate: This is essentially the "data rate" of the server. Recommended values are 240-360Hz+ if your hardware & network can handle it.
- clientTickRate: The rate at which players send input updates to the server (should improve input lag). You can experiment with this value - I set mine to the same as the serverTickRate.
- Mods: The example configuration will add Toaster's Crispy Shadows (3493628417) as a client-sided mod and GAFURIX' Custom MOTD (3491056040) as a server-sided mod to your server.
Step 8: Create systemd Unit
nano /etc/systemd/system/puck@.service
Paste:
[Unit]
Description=Puck Dedicated Server - %i
After=network.target
[Service]
WorkingDirectory=/srv/puck/%i
User=puckd
ExecStart=/srv/puck/%i/start_server.sh --serverConfigurationPath /srv/puck/%i/config.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
Step 9: Enable and Start the Server
systemctl daemon-reload
systemctl enable puck@server1
systemctl start puck@server1
Check status:
systemctl status puck@server1
journalctl -u puck@server1 -f
Step 10: Open Firewall Ports
By default, Debian has no firewall configured, meaning all ports are open. On a VPS, this is a security risk.
Install ufw
and open required UDP ports
apt install ufw
ufw enable
ufw allow 7777/udp
ufw allow 7778/udp
Adjust port numbers based on your configuration.
Managing Multiple Servers
Step 1: Duplicate Server Files
Copy the existing server instance to create a new one:
cp -r /srv/puck/server1 /srv/puck/server2
Step 2: Configure New Server Ports
Edit the configuration file and change the port numbers:
Change ports to one above both, example 7779 & 7780
nano /srv/puck/server2/config.json
Step 3: Set File Permissions
Mods & Logging will break if you skip this step
Give ownership of the new files to the puckd user:
chown -R puckd:puckd /srv/puck/server2
Step 4: Enable Auto-Start
Enable the new server to start automatically on boot:
systemctl enable puck@server2
Step 5: Start and Monitor
Start the server:
systemctl start puck@server2
Check if it's working with logs:
journalctl -u puck@server2 -f
Server Management Commands
- View logs:
journalctl -u puck@server1 -f
- Restart:
systemctl restart puck@server1
- Stop:
systemctl stop puck@server1
- Update: Stop server, re-run SteamCMD in
/srv/puck-download
, copy over updated files.
Troubleshooting
Service won't start
Check logs with journalctl -u puck@server1
Can't connect
Double-check firewall and public IP on VPS
Your Puck server should now be live and ready for players.