For a private CS2 group, start with competitive-style rules: mp_maxrounds 24, mp_startmoney 800, mp_freezetime 20, and mp_warmuptime 600. Set bot_quota 0 when all players are present. If friends are still joining, use bot_quota_mode fill and set a quota for the total population. Keep sv_cheats 0 for ordinary play.
Save those rules in game/csgo/cfg/server.cfg and launch the server with +exec server.cfg. This is a practical baseline, not a universal “best” file: the right values depend on whether you want a human-only match, a bot-filled lobby, relaxed practice, a temporary listen server, or a persistent dedicated server.
What do CS2 server settings control?
CS2 server settings are console variables, commonly called convars. CS2OpenDev describes a convar as a named, typed value exposed by the game engine or game code to the in-game console and configuration files. Round limits, economy, warmup, bots, cheats and networking behavior are all controlled through these variables.
Three properties matter when you edit one:
- Cheat-flagged: the variable requires
sv_cheats 1. Use these only on a server controlled by your group; do not carry them into competitive or public play. - Replicated: the server sends the value to connected clients, so everyone receives the same rule.
- Archived: the game can write the value to
config.cfg. That does not replace a deliberate server configuration, because a server started without your intended file may load different defaults.
The current CS2OpenDev reference identifies build 25966348 and lists a Steam date of October 15, 2026. Convar names and behavior can change with updates, so check the behavior against the build running on your server when a setting appears to be ignored.
What is the best baseline config for a private group?
Use the following as the default for a normal five-versus-five session or a smaller group that wants competitive pacing without tournament administration.
| Setting | Value | What it does | Why use it |
|---|---|---|---|
sv_cheats |
0 |
Disables cheat-flagged practice variables | Keeps ordinary play and anti-cheat expectations intact |
mp_maxrounds |
24 |
Sets the maximum regulation rounds | Matches the competitive-style limit published by FACEIT in 2025 |
mp_startmoney |
800 |
Sets players’ starting money | Uses the $800 competitive starting value published by FACEIT in 2025 |
mp_freezetime |
20 |
Sets the freeze period before each round | Gives a full buy-and-plan window without making rounds feel slow |
mp_warmuptime |
600 |
Allows up to 600 seconds of warmup | Leaves the server open while players connect and test settings |
bot_quota |
0 |
Sets the bot quota | Keeps the match human-only once the group is ready |
Put the values in a file named server.cfg:
sv_cheats 0
mp_maxrounds 24
mp_startmoney 800
mp_freezetime 20
mp_warmuptime 600
bot_quota 0
The numbers are a starting point for a private group, not a promise that every map, player count or game mode will feel identical. Change one category at a time so you can identify which rule affected the match.
How do I install and load server.cfg?
The persistent configuration belongs in the server’s game configuration directory, not in a random desktop folder. Nodecraft’s documentation places it at game/csgo/cfg/server.cfg and recommends stopping the server before editing.
- Stop the server. Do not edit a live file while the process is writing logs or loading a map.
- Open the configuration directory:
game/csgo/cfg/inside the CS2 server installation. - Create or edit
server.cfgwith a plain-text editor. Use one command per line and do not add a.txtextension. - Save the file with the exact filename and path.
- Restart the server and include
+exec server.cfgin the launch options. Without that argument, the file may exist but never be loaded. - Verify in the server console. Query the variables after the map starts and confirm that the displayed values match the file.
Keep a backup copy before experimenting. If a new line causes a startup problem, remove that line, restart, and add changes back individually.
Which preset should I use for human-only games?
Use the baseline file when everyone who should play is present. The important choice is bot_quota 0, which prevents the server from filling empty slots with bots.
Five-versus-five or a smaller complete group
sv_cheats 0
mp_maxrounds 24
mp_startmoney 800
mp_freezetime 20
mp_warmuptime 600
bot_quota 0
Set a password for a private server and choose a host region close to the players. A nearby region reduces the distance packets travel; it does not eliminate connection problems caused by a player’s local network.
When the group size changes from night to night
If the same file will serve both a full group and a partial one, use the bot-filled preset in the next section instead of manually changing the quota every time. That keeps the population rule explicit and avoids forgetting to remove bots before a competitive game.
How do I add bots while players are waiting?
Nodecraft documents four controls that cover most private-group bot setups: bot_difficulty, bot_join_after_player, bot_quota and bot_quota_mode.
| Command | Values | Use |
|---|---|---|
bot_difficulty |
0 Easy, 1 Normal, 2 Hard, 3 Expert |
Controls bot skill level |
bot_join_after_player |
1 or 0 |
Controls whether bots wait for a player before joining |
bot_quota |
A number | Sets the quota used by the selected quota mode |
bot_quota_mode |
normal, fill or match |
Determines how the quota is interpreted |
Fill empty places up to a total population
Use fill when you want the server to stay populated. A quota of 10 means the system aims for a total of 10 players, counting humans and bots. As humans join, bots are added or removed to maintain that total.
bot_quota 10
bot_quota_mode fill
bot_join_after_player 1
bot_difficulty 2
Adjust the quota to the total population you want, not simply the number of bots you want at the beginning.
Keep a fixed number of bots
Use normal when the quota should represent a fixed bot count. This is useful for a short warmup or a practice server where you always want the same number of opponents, regardless of how many humans connect.
Maintain a human-to-bot ratio
Use match when the goal is a ratio rather than a total. This is appropriate when you want bots to scale with the number of human players. Because the result depends on the current human count, it is less predictable than fill for a scheduled group match.
Remove bots before the real match
Once all players arrive, switch back to bot_quota 0 or reload the human-only configuration. Check both teams before starting the competitive session; a leftover bot is usually a quota problem, not a map problem.
Which round, overtime and pause settings suit a serious private match?
The core four values establish the regulation match. FACEIT’s published competitive settings from 2025 also provide useful reference points for groups that want a more formal ruleset.
| Rule | Published competitive value | When to adopt it |
|---|---|---|
| Maximum regulation rounds | 24 | Use for the standard competitive-style match length |
| Starting money | $800 | Use when you want the normal economy opening |
| Freeze time | 20 seconds | Use when players need a complete buy and planning phase |
| Warmup time | 600 seconds | Use for a lobby that may wait several minutes for players |
| TV delay | 60 seconds | Relevant only when your setup uses SourceTV or a spectator broadcast |
| Overtime rounds | 6 | Use if tied regulation matches should continue in structured overtime |
| Overtime starting money | $10,000 | Use with the overtime ruleset, not as the ordinary-round economy |
| Tactical timeout length | 30 seconds | Use for organized team play |
| Tactical timeouts per team | 3 | Use when you want each team the same strategic pause allowance |
| Technical pause default | 120 seconds | Reserve for connection, hardware or server problems |
These values come from FACEIT’s 2025 published competitive settings. They are a reference for private play, not a requirement for every community server. A casual group may prefer shorter warmup or no formal timeout system; a team practicing tournament routines may want the complete set.
Do I need a dedicated server for five friends?
No. Five friends can play on a temporary session hosted by one player, but a dedicated server becomes useful when you need persistent uptime, a stable region, repeatable configuration, or access when the usual host is offline.
| Hosting choice | Best for | Advantages | Trade-offs |
|---|---|---|---|
| Temporary player-hosted session | Occasional games with a small group | Fast to start and no separate machine to administer | The host’s availability, upload connection and location affect the session |
| Dedicated server | Regular sessions, larger groups or persistent rules | Runs independently, keeps one configuration, and can be placed near the players | Requires installation, updates, firewall rules, token management and ongoing administration |
For a small private group, choose dedicated hosting for consistency rather than because five players require special hardware. If the group only meets occasionally and can tolerate the host starting the game, a temporary session is usually simpler.
How do I set up a dedicated CS2 server?
Hetzner’s dedicated-server procedure uses SteamCMD, App ID 730, a Game Server Login Token, the cs2.sh launcher and explicit map and port arguments. The following sequence keeps installation, authentication and configuration separate.
- Install or update the server with SteamCMD. Use the CS2 application ID
730and keep the server files in a directory you can back up. - Create a Game Server Login Token for App ID 730 if the server must appear publicly. Keep the token private; it identifies the server account.
- Choose a region close to the players. Physical distance is a practical starting point for latency, although each player’s route to the data center still matters.
- Launch through the script: use
./cs2.sh -dedicated, not the game binary directly. Hetzner’s guide explicitly recommends the script. - Specify the player limit and network endpoint with
-maxplayersand-portas appropriate for your deployment. - Choose the starting map with
+map. - Pass the account token with
+sv_setsteamaccountwhen the server requires public registration. - Load your rules with
+exec server.cfgand verify the values after startup.
A representative launch shape is:
./cs2.sh -dedicated -maxplayers 10 -port 27015 +map de_mirage +sv_setsteamaccount YOUR_GSLT +exec server.cfg
Replace the player count, map and token with values for your deployment. Do not publish the real token in a screenshot, repository or support post.
What hardware and network capacity does a dedicated server need?
For 10–32 players, Hetzner recommends at least 4 vCPU cores, 8 GB of RAM and 80 GB of disk as a starting point. Those figures are not a universal minimum: custom maps, plugins, logging, operating-system overhead and other workloads can increase demand.
- CPU: reserve enough processing capacity for the game process and background services. A busy machine can produce simulation or tick delays even when memory is available.
- Memory: 8 GB is the cited starting point for the 10–32-player range; leave headroom for maps, plugins and the operating system.
- Storage: 80 GB provides room for the server installation and updates, but logs and Workshop content can consume it over time.
- Location: select a data center near most players rather than simply choosing the cheapest region.
- Ports: open only the ports required by the services you actually run.
Monitor CPU, memory, disk usage and network behavior after adding maps or plugins. Sizing guidance is a starting point, not a performance guarantee for every configuration.
Which firewall ports should I open?
Hetzner’s examples identify these common ports, but the exact list depends on the launch options and services enabled on your server.
| Port and protocol | Typical purpose in the guide |
|---|---|
| UDP 27015 | Game server traffic |
| TCP 27015 | RCON or ping-related traffic in the example deployment |
| UDP 27005 | Client communication |
| UDP 27020 | SourceTV |
Confirm the ports for your chosen deployment before changing the firewall. Opening unused ports increases exposure without helping players connect. If a server is private, restrict administration interfaces to trusted addresses whenever your hosting environment allows it.
Can I use custom or Workshop maps safely?
You can run custom or Workshop maps, but an insecure launch changes the trust model. Hetzner warns that -insecure disables anti-cheat. Use that mode only for a trusted private session where every participant understands that normal anti-cheat protection is not active.
Do not add -insecure to a public or competitive server merely to make a map load. Keep a separate launch profile and configuration for experimentation so the setting cannot accidentally carry over to ordinary play.
Why is my CS2 configuration not taking effect?
Most failures are path, load-order or quota problems rather than invalid gameplay rules. Check these branches in order.
The file is ignored
- Confirm the path is exactly
game/csgo/cfg/server.cfg. - Confirm the filename is
server.cfg, notserver.cfg.txt. - Confirm the launch command includes
+exec server.cfg. - Stop the server before editing and restart it afterward.
The value changes after players join
Check bot quota behavior first. fill maintains a total population, while normal uses a fixed bot count and match maintains a human-to-bot ratio. A setting that appears to “revert” may be the selected quota mode doing exactly what it was told to do.
A practice command is rejected
Verify sv_cheats. Cheat-flagged variables require sv_cheats 1, and that mode belongs only on a server controlled by the group. Restore sv_cheats 0 before returning to ordinary play.
Players cannot connect
Check that the server is running, the selected port is open for the correct protocol, the host region is reachable, and the launch options match the firewall rules. If you enabled SourceTV, RCON or another service, verify its port separately instead of opening every common port.
The dedicated process fails during startup
Launch through ./cs2.sh as recommended by Hetzner rather than invoking the binary directly. Then verify the map name, player limit, port and Game Server Login Token arguments one at a time.
How should I separate competitive, bot and practice configurations?
Use separate files or launch profiles instead of repeatedly editing one production file. A simple arrangement is:
server.cfg: human-only competitive baseline withsv_cheats 0andbot_quota 0.server_bots.cfg: the selected quota mode, total population, join behavior and difficulty for waiting players.server_practice.cfg: experimental settings for a private, controlled session with the required cheat permission.
Load the intended file explicitly when launching or testing, and keep the practice profile away from the public server. This arrangement makes it harder to start a serious match with a leftover bot or a cheat-enabled rule.
What is the practical recommendation for most groups?
Start with the six-line human-only baseline, save it in game/csgo/cfg/server.cfg, and launch with +exec server.cfg. Add bot_quota_mode fill only when the group needs the server populated while people join. Move to a dedicated server when persistent uptime, a consistent region or repeatable administration matters more than the convenience of a temporary host. Keep custom-map experiments and -insecure launches isolated from normal play.
Frequently Asked Questions
What is the difference between server.cfg and config.cfg in CS2?
server.cfg is the file you deliberately create for server rules and load with +exec server.cfg. config.cfg can contain archived convar values written by the game, so it should not be treated as a substitute for an explicitly loaded server policy.
Why do bots keep returning after I remove them?
A quota mode may be repopulating the server. Check whether bot_quota_mode is set to fill or match, then set bot_quota 0 and reload the human-only configuration.
What should I back up before updating a dedicated CS2 server?
Back up game/csgo/cfg/server.cfg, any separate practice or bot profiles, custom map files and your launch script. Keep the Game Server Login Token out of those backups if they will be shared or stored in a public repository.
Does a closer server region guarantee lower ping for everyone?
No. A nearby data center is a sensible starting point, but each player’s internet provider and routing path can add delay. Test from the actual locations of your group before committing to a long-term region.