Running a TF2 server in 2026 is still one of the most fun projects in the Source-engine world — but the vanilla dedicated server is a blank canvas. This guide gets you from an empty VPS to a running community server with MetaMod:Source 1.11, SourceMod 1.12, a chosen plugin preset (vanilla, MGE, Jump, Trade, 2fort-only, x10, randomizer), SourceTV demo recording, and a proper FastDL setup so players aren’t stuck on a download screen for ten minutes.
01 // Requirements
Software
- Ubuntu 22.04 LTS or 24.04 LTS — 64-bit. Debian 12 works too.
- 32-bit libraries — srcds is a 32-bit binary.
- SteamCMD — for installing and updating TF2 (app id
232250). - MetaMod:Source 1.11 — stable branch as of 2026.
- SourceMod 1.12 — stable branch as of 2026.
- GSLT (Game Server Login Token) — required for servers exposed on the public internet. Generate one here using app
440.
Network ports (open on firewall)
| Port | Protocol | Purpose |
|---|---|---|
| 27015 | UDP | Main game traffic |
| 27015 | TCP | RCON (remote admin) |
| 27020 | UDP | SourceTV / demo relay |
| 27005 | UDP | Client outbound (usually auto) |
| 80 | TCP | FastDL (nginx, optional but strongly recommended) |
02 // Hardware — Don’t Over- or Under-Spec
TF2 is lightweight compared to modern games, but a heavy SourceMod plugin stack (MGE with stats, x10, randomizer, or a full Jump server with 200+ maps) changes the math. Here’s the honest breakdown:
| Scenario | Players | CPU | RAM | Recommended plan |
|---|---|---|---|---|
| Vanilla 2fort / pl | 24 | 2 vCPU | 4 GB | Hostinger KVM 1 |
| Community server + 5-10 plugins | 24-32 | 2 vCPU | 8 GB | Hostinger KVM 2 |
| MGE / Jump / x10 (heavy SM) | 24 | 2-4 vCPU | 8 GB | Hostinger KVM 2 |
| Multiple servers (2-4) on one box | 24-32 each | 4 vCPU | 16 GB | Hostinger KVM 4 |
| Server network / trade hub cluster | 32+ per server | 8 vCPU | 32 GB | Hostinger KVM 8 |
Hostinger KVM 2 — the TF2 community sweet spot
2 vCPU, 8 GB RAM, 100 GB NVMe. Handles a 24-slot server with a full SourceMod stack plus a small FastDL nginx on the same box. Scales up to a 32-slot with headroom. About €8.49/month.
Get Hostinger KVM 2 →Hostinger KVM 4 — multi-server headroom
4 vCPU, 16 GB RAM, 200 GB NVMe. Run 3-4 TF2 servers (e.g. 2fort + MGE + Jump + trade) on one box with SourceTV, FastDL, and log aggregation without fighting for tick. About €12.99/month.
Get Hostinger KVM 4 →GTXGaming — TF2 specialists with one-click SourceMod
For TF2 community admins who want to run a server without learning srcds flags. GTXGaming specializes in Source engine — pre-configured TF2 installs, one-click SourceMod / MetaMod / HLstatsX, Workshop map sync, SourceTV ready, and support staff who know the Source engine quirks. Global datacenters (US / EU / AU / SG) and DDoS protection included. Trade-off: per-slot pricing scales faster than a VPS once you run 2+ servers or pass 32 slots — that’s where Option 2 above wins on raw €-per-slot.
03 // System Preparation
On a fresh Ubuntu 22.04 or 24.04 VPS, run the following as root or with sudo. TF2 is a 32-bit binary, so multi-arch is mandatory.
# update the system
apt update && apt upgrade -y
# enable 32-bit libs (srcds needs them)
dpkg --add-architecture i386
apt update
# core dependencies
apt install -y curl wget file tar bzip2 gzip unzip bsdmainutils python3 \
util-linux ca-certificates binutils bc jq tmux netcat-openbsd \
lib32gcc-s1 lib32stdc++6 libsdl2-2.0-0:i386 libcurl4-gnutls-dev:i386
# dedicated user for the server (never run as root)
useradd -m -s /bin/bash tf2server
If a plugin ever gets exploited, it’s confined to tf2server’s home directory. Running srcds as root is the #1 sin of community admins and turns a plugin bug into a box takeover.
04 // Install SteamCMD
# switch to the tf2server user for everything below
su - tf2server
# create SteamCMD folder and download
mkdir -p ~/steamcmd && cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
rm steamcmd_linux.tar.gz
# first run seeds self-updates
./steamcmd.sh +quit
05 // Install the TF2 Dedicated Server
TF2’s dedicated server is app id 232250, free and anonymously downloadable — no Steam account needed, no game purchase required.
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/tf2server/tf2 \
+login anonymous \
+app_update 232250 validate \
+quit
This downloads roughly 6-8 GB. Re-run the same command any time Valve pushes an update — SteamCMD patches in place.
06 // Generate a GSLT (Required for Public Servers)
Since 2016 Valve requires a Game Server Login Token (GSLT) for any TF2 server that accepts public connections. Without one, your server is invisible to the server browser.
- Sign in at steamcommunity.com/dev/managegameservers (the Steam account must be at least level 0 and not limited — one small purchase removes the limited flag).
- Create a token for app id
440(Team Fortress 2). - Copy the token — you’ll paste it into the launch command or
autoexec.cfgassv_setsteamaccount.
Treat GSLTs like passwords. If yours leaks, revoke it on that same Steam page. Tokens are tied to your account and Valve can ban every token on your account if any one of them hosts a cheat-advertising or fake-player farm.
07 // Basic server.cfg
Create /home/tf2server/tf2/tf/cfg/server.cfg. This is the baseline a community server needs before plugins come into play:
// ===== identity =====
hostname "My TF2 Community Server | hostingbuff.com"
sv_contact "admin@example.com"
sv_region 3 // 0=US east, 1=US west, 3=EU, 4=Asia
// ===== access =====
rcon_password "CHANGE_ME_LONG_RANDOM_STRING"
sv_password "" // leave blank for public, set for private
sv_lan 0
// ===== gameplay =====
mp_timelimit 30
mp_maxrounds 0
sv_alltalk 0
tf_weapon_criticals 0 // community standard: off
tf_damage_disablespread 1
mp_respawnwavetime 10.0
mp_autoteambalance 1
mp_teams_unbalance_limit 2
// ===== rates (modern defaults) =====
sv_minrate 30000
sv_maxrate 0
sv_mincmdrate 66
sv_maxcmdrate 66
sv_minupdaterate 66
sv_maxupdaterate 66
// ===== logging =====
log on
sv_logbans 1
sv_logecho 0
sv_logfile 1
sv_log_onefile 0
// ===== downloads / FastDL =====
sv_allowdownload 1
sv_allowupload 1
net_maxfilesize 64
// sv_downloadurl "https://fastdl.example.com/tf/" // enable once FastDL is live
exec banned_user.cfg
exec banned_ip.cfg
08 // systemd Service (survives reboots)
Create /etc/systemd/system/tf2-main.service as root:
[Unit]
Description=TF2 Dedicated Server (main)
After=network.target
[Service]
Type=simple
User=tf2server
Group=tf2server
WorkingDirectory=/home/tf2server/tf2
ExecStart=/home/tf2server/tf2/srcds_run \
-game tf -console -usercon -port 27015 \
+map ctf_2fort +maxplayers 24 \
-secured -timeout 10 \
+sv_setsteamaccount YOUR_GSLT_HERE
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now tf2-main.service
systemctl status tf2-main.service
journalctl -u tf2-main.service -f # live log
09 // Install MetaMod:Source 1.11
MetaMod:Source is the runtime layer that lets Source engine games load plugins. SourceMod sits on top of it. Install MetaMod first.
# as tf2server, go to the TF2 game dir
cd /home/tf2server/tf2/tf
# fetch latest MetaMod 1.11 stable for Linux
# get the current filename from https://mms.alliedmods.net/mmsdrop/1.11/mmsource-latest-linux
wget https://mms.alliedmods.net/mmsdrop/1.11/$(wget -q -O- https://mms.alliedmods.net/mmsdrop/1.11/mmsource-latest-linux)
# extract (this creates addons/ and cfg/ folders)
tar xzf mmsource-*-linux.tar.gz
rm mmsource-*-linux.tar.gz
10 // Install SourceMod 1.12
# still in /home/tf2server/tf2/tf
wget https://sm.alliedmods.net/smdrop/1.12/$(wget -q -O- https://sm.alliedmods.net/smdrop/1.12/sourcemod-latest-linux)
tar xzf sourcemod-*-linux.tar.gz
rm sourcemod-*-linux.tar.gz
# verify both layers exist
ls addons/
# expected: metamod metamod.vdf metamod_x64.vdf sourcemod sourcemod.vdf
Now restart the server and check the console for plugin load messages:
sudo systemctl restart tf2-main.service
journalctl -u tf2-main.service -n 100 | grep -iE "metamod|sourcemod"
# you should see MetaMod:Source version and SourceMod version lines
In-game or via rcon, confirm:
meta version
sm version
sm plugins list
Nine times out of ten the issue is that addons/metamod.vdf wasn’t extracted into the correct folder. It must live in tf/addons/metamod.vdf, not tf/addons/metamod/metamod.vdf. Check with ls tf/addons/.
11 // Configure Admins
SourceMod admin entries live in tf/addons/sourcemod/configs/admins_simple.ini. Find your SteamID64 at steamid.io, then add yourself as a root admin:
// admins_simple.ini
"STEAM_0:1:12345678" "99:z"
"[U:1:24691357]" "99:z" // steam3 format also works
The flag z is root (full access). You can be more granular with flags abcde later (a=reserved slot, b=kick, c=ban, d=unban, e=slay, etc — the full list is in the SourceMod wiki).
Reload admins without restart:
sm_reloadadmins
12 // Server Preset Picker (Interactive)
Community TF2 servers mostly fit into a handful of well-known presets. Pick one and the tool below spits out the exact SourceMod plugins you should install, the recommended map rotation, and a tuned server.cfg override block you can copy straight in.
13 // SourceTV — Demo Recording & Spectator Relay
SourceTV lets admins record every round automatically (invaluable for cheater reports and match VODs) and lets spectators watch live without taking a player slot. Enable it in autoexec.cfg or server.cfg:
// ===== SourceTV =====
tv_enable 1
tv_port 27020
tv_maxclients 10 // how many spectators allowed
tv_delay 90 // seconds — broadcast delay (helps vs ghosting)
tv_autorecord 1 // auto-record every match
tv_name "hostingbuff.com TV"
tv_title "Community Server TV"
tv_password "" // set to make TV private
tv_relaypassword "" // for cascading relay servers
log on
Demo files land in the TF2 root as auto-YYYYMMDD-HHMMSS-mapname.dem. A weekly cleanup is a good idea:
# crontab -e (as tf2server)
# delete .dem files older than 30 days every Sunday 4am
0 4 * * 0 find /home/tf2server/tf2 -maxdepth 1 -name "auto-*.dem" -mtime +30 -delete
SourceTV runs on its own port. If UDP 27020 isn’t open on the VPS firewall, the TV client silently fails to connect — there’s no error message, it just won’t show up in the server browser’s spectator tab.
14 // FastDL — No More 10-Minute Map Downloads
Without FastDL, players downloading a custom map get served over the slow in-game UDP channel at ~50 KB/s — a 30 MB map takes ten minutes and many players just disconnect. FastDL serves the same files over HTTP from a lightweight web server, usually nginx on the same VPS, at 50–100× the speed.
The short version:
- Install nginx on the same VPS.
- Create
/var/www/fastdl/tf/and mirror yourtf/maps/,tf/materials/,tf/models/,tf/sound/folders into it. - Compress maps with
bzip2so clients get.bsp.bz2files (auto-extracted client-side). - Set
sv_downloadurl "https://fastdl.example.com/tf/"inserver.cfg. - Set
sv_allowdownload 1(the in-game fallback stays available).
Full walkthrough — including the cron sync script, correct nginx Content-Type headers, common 403 permission mistakes, and how to set this up with a sub-domain on a shared VPS — lives in our dedicated guide:
FastDL Setup for CS2 and TF2 — Custom Maps Without the Wait
Step-by-step nginx FastDL setup, bz2 compression, automated map sync cron script, and the five permission mistakes that cause silent 403s.
Read the FastDL guide →15 // Custom Maps — Where to Get Them, How to Install
Custom maps live in tf/maps/*.bsp. The server looks for exactly that filename when a changelevel cp_orange_x3 is issued.
| Source | Best for | URL |
|---|---|---|
| TF2Maps.net | Community competitions, new maps | tf2maps.net/downloads |
| GameBanana | Trade maps, meme maps, classics | gamebanana.com |
| Steam Workshop | Official maps published by creators | Steam Workshop |
| Jump.tf map pack | Every competitive jump map | jump.tf |
Install workflow:
# upload new map via scp / sftp
scp cp_orange_x3.bsp tf2server@your-server:/home/tf2server/tf2/tf/maps/
# then on the server: copy to FastDL root + bz2 compress
cp /home/tf2server/tf2/tf/maps/cp_orange_x3.bsp /var/www/fastdl/tf/maps/
bzip2 -k /var/www/fastdl/tf/maps/cp_orange_x3.bsp
chown -R www-data:www-data /var/www/fastdl/
# add to mapcycle.txt, then rcon
rcon changelevel cp_orange_x3
16 // Anti-Cheat — StAC and sv_pure
TF2’s official matchmaking is famously overrun with bots, and community servers are next in line. There are two layers of defence you should run together:
StAC — Stephanie’s Anti-Cheat
StAC is the de facto community anti-cheat for TF2 in 2026. It catches aimbot snapping, no-recoil, and most silent-aim patterns. It’s a SourceMod plugin that runs server-side, so the only client-side impact is on cheaters.
# install into addons/sourcemod/plugins/
wget https://github.com/stephanieLGBT/StAC-tf2/releases/latest/download/StAC.smx \
-O /home/tf2server/tf2/tf/addons/sourcemod/plugins/StAC.smx
# restart or:
sm plugins load StAC
Tune detection in cfg/sourcemod/stac.cfg — start at default sensitivities for two weeks, then adjust based on false-positive reports in your Discord.
sv_pure — Kick Custom-Material Cheaters
Sets how strict the server is about client files. Most community servers run sv_pure 1 or sv_pure 2 with an allowlist for HUDs:
// server.cfg
sv_pure 1
sv_pure_kick_clients 1
sv_consistency 1
sv_pure 0 = anything goes (don’t use on public servers). sv_pure 1 = default whitelist, allows most HUDs. sv_pure 2 = strict. Keep a pure_server_whitelist.txt in tf/cfg/ if players report custom HUD issues.
17 // Honest Pros & Cons of Self-Hosting a TF2 Community Server
| Pros | Cons |
|---|---|
| Full control — any plugin, any config | You become the sysadmin, not just an admin |
| Best possible tickrate and ping (if VPS is close to players) | Valve GSLT can be banned if your server is flagged |
| Costs ~€8/month vs ~€15-25/month for managed TF2 hosting | Cheater waves require active moderation — AFK admins = dead server |
| Room for FastDL, SourceTV relay, web stats, all on one VPS | DDoS protection isn’t free — TF2 community servers get targeted |
| SourceMod plugin ecosystem is enormous and free | Plugin-vs-plugin conflicts are real — load order matters |
| Can host 2-4 servers on the same box (trade, MGE, 2fort, etc.) | Getting on the Quickplay / in-game browser radar takes weeks of uptime |
18 // Hosting Approaches Compared
| Approach | Difficulty | Cost / month | Best for |
|---|---|---|---|
| Hostinger KVM VPS + this guide | Intermediate | €8-13 | Serious community admins, multi-server networks |
| Nitrado managed TF2 | Beginner | €10-15 | Casual admins who just want it to work |
| Pterodactyl panel + VPS | Advanced | €13-25 | People running 5+ servers, want a web UI |
| Bare-metal dedicated | Expert | €50+ | Full server networks (10+ servers, DDoS mitigation) |
| Home PC (port forward) | Beginner | €0 + power | LAN parties, private friends-only |
19 // Troubleshooting — Real Problems, Real Fixes
| Symptom | Most likely cause | Fix |
|---|---|---|
| Server doesn’t show up in public server browser | Missing or banned GSLT | Generate a new token at steamcommunity.com/dev/managegameservers, add to sv_setsteamaccount launch flag, restart. |
meta version says MetaMod not loaded |
metamod.vdf in wrong folder |
Ensure it lives at tf/addons/metamod.vdf, not nested. Re-extract the tarball inside the tf/ directory. |
sm plugins list shows “failed to load” |
SourceMod version doesn’t match plugin | Update to the latest SM 1.12 stable. Some older plugins need .smx recompile — check the plugin’s AlliedMods thread. |
| Players get “connection failed after 4 retries” | UDP 27015 not reachable | Check VPS firewall (ufw allow 27015), check provider’s external firewall, run nc -zvu YOUR_IP 27015 from outside. |
| “Map not found” when changing to a custom map | Map name typo or missing .bsp |
Map names are case-sensitive on Linux. Confirm file exists in tf/maps/ with ls tf/maps/ | grep -i mapname. |
| Custom map downloads are painfully slow (50 KB/s) | FastDL not configured | Set sv_downloadurl in server.cfg, set up nginx per the FastDL guide, bz2 compress your maps. |
| Client sees 403 Forbidden when downloading from FastDL | File permissions on /var/www/fastdl/ |
chown -R www-data:www-data /var/www/fastdl/ && chmod -R 755 /var/www/fastdl/ |
Client sees 404 for .bsp.bz2 |
bz2 file not generated or wrong folder | bzip2 -k map.bsp in the FastDL maps folder. Check both map.bsp and map.bsp.bz2 exist. |
| SourceTV not showing in spectator tab | UDP 27020 blocked | ufw allow 27020/udp on VPS and ensure provider firewall allows it too. |
Random Disconnect: No Steam logon kicks |
Valve Steam network hiccup or bad GSLT | Usually transient. If persistent, regenerate your GSLT — Valve occasionally invalidates tokens. |
| sv_pure kicks legitimate players with custom HUDs | sv_pure 2 too strict |
Drop to sv_pure 1 or create a pure_server_whitelist.txt that allows common HUD folders. |
| Server laggy with 10+ players despite low CPU% | Tickrate-limited or bad region | Check stats rcon output for fps (should be near 66). If fps <60, reduce plugins or upgrade VPS. |
| StAC spamming false positives | Detection thresholds too tight for your region | Tune stac_aim_snap_threshold and similar cvars upward. Monitor addons/sourcemod/logs/stac/ for patterns. |
| Can’t rcon — “Bad Password” loop | Rcon password has a special character being parsed wrong | Use only alphanumerics in rcon_password. Restart after changing. |
20 // Next Steps
- FastDL: Set up nginx FastDL for CS2 & TF2 — the companion guide with the full sync cron, bz2 automation, and permission fixes.
- Web stats: Install HLStatsX:CE or GameMe on your VPS for player stats, leaderboards, and heatmaps.
- Multiple servers: Scale to 2–4 TF2 servers on the same VPS by using different ports (27015, 27025, 27035, 27045) and separate systemd units.
- Pterodactyl panel: If you’re running 3+ servers, a Pterodactyl setup gives a clean web UI instead of SSH.
- Other Source engine games: see our CS2 dedicated server guide — most of the SourceMod flow transfers directly.
- DDoS protection: For larger communities, consider Cloudflare Spectrum or a provider with native DDoS filtering (Hostinger includes basic protection; OVH Game is more advanced at higher price).
Last updated April 2026. SourceMod 1.12 / MetaMod:Source 1.11 / TF2 app id 232250. Commands verified against Ubuntu 22.04 LTS and 24.04 LTS.
21 // Frequently Asked Questions
Are TF2 community servers still active in 2026?
Yes — Team Fortress 2 community servers remain surprisingly active in 2026. Long-running networks like Skial, Uncletopia, Casual.tf, Creators.TF, and many trade/idle/jailbreak/x10 community servers continue to draw thousands of daily players. TF2's community-server ecosystem actually grew during the bot crisis of 2022-2023 (when official matchmaking was overrun) because community servers had their own moderation. The game itself hasn't had a major update in years, but the community keeps it alive — and SourceMod plugin development is still active.
How do I create a TF2 community server?
Five-step overview: (1) Install SteamCMD on a Linux or Windows server and download the TF2 dedicated server (appid 232250); (2) Edit tf/cfg/server.cfg with your server name, password (if private), rcon password, and gamemode settings; (3) Install SourceMod + MetaMod for plugin support (mandatory for any community server worth playing); (4) Set up FastDL for custom maps and content (see our FastDL guide); (5) Forward UDP ports 27015 (game) and 27020 (SourceTV) on your firewall/router. Our guide covers each step with copy-paste commands.
Why are TF2 servers free to host?
Because Valve releases the dedicated server software for free and doesn't charge licensing fees for community hosting. This is the same model Valve uses for Counter-Strike, Garry's Mod, Left 4 Dead 2, and all their Source/Source 2 games. Valve's long-running philosophy is that healthy community servers drive game longevity — and TF2's 18-year-and-counting lifespan proves them right. You only pay for the hardware to host on. Plugins, maps, mods, and the server binary itself are all free.
What is SourceMod and do I need it?
SourceMod is the de facto plugin framework for Source engine servers — it provides the scripting platform that 99% of TF2 community plugins are built on. With SourceMod installed you can add custom commands, anti-cheat hooks, vote systems, donor perks, custom gamemodes, RTV (rock-the-vote), and hundreds of community plugins from AlliedModders forums. Without it your server is vanilla TF2 only. Yes, you need SourceMod for any community server beyond pure vanilla — installation takes 10 minutes and is covered in our guide.