How to Add Custom Maps to a Team Fortress 2 Server
Add custom maps to a TF2 server: .bsp files in tf/maps, names in mapcycle.txt, Workshop maps as workshop/ID, and FastDL so players download quickly.
Updated Oct 3, 2026 · 5 min read
On this page
To add custom maps to a Team Fortress 2 server, upload the .bsp files to tf/maps/ and add each map's name, without .bsp, on its own line in tf/cfg/mapcycle.txt. Workshop maps skip the upload: add workshop/<ID> to the cycle and the server downloads them. For players, set sv_downloadurl in tf/cfg/server.cfg to a web host holding compressed copies in maps/<name>.bsp.bz2 (FastDL). Never replace a map with a new version under the same file name.
What you are working with
| File | What it does | Where it lives on the server |
|---|---|---|
<map>.bsp |
The map itself | tf/maps/ |
<map>.bsp.bz2 |
Compressed copy for fast player downloads | Your FastDL web host, in maps/ |
mapcycle.txt |
The rotation, one map per line | tf/cfg/ |
server.cfg |
Download settings and rules | tf/cfg/ |
| Workshop map ID | The number after ?id= in the map's Workshop URL |
Written as workshop/<ID> |
Players keep maps they downloaded in tf/download/maps/ in their own game folder, which is why a changed map with the same name causes trouble later.
Workshop or loose .bsp?
| Source | How it gets on the server | How players get it |
|---|---|---|
| Steam Workshop map | The server downloads it from workshop/<ID> |
Downloaded automatically when they join |
| tf2maps.net, GameBanana or your own map | You upload the .bsp |
Direct from the server (small maps) or FastDL |
| Official Valve map | Already installed | Already installed |

Method 1: Workshop maps (easiest)
Step 1: Get the ID
Open the map on the TF2 Workshop and copy the number at the end of the URL, after ?id=.
Step 2: Load it
Try it live from the server console:
changelevel workshop/454118349
The server downloads the map and loads it. To start on it, set the Default Map in our panel to workshop/454118349.
Step 3: Add it to the cycle
Add the same line to tf/cfg/mapcycle.txt. Maps in the map cycle are tracked by the server and kept up to date when their authors publish changes. tf_workshop_map_sync <ID> in the console does the same for a map you want tracked without putting it in the cycle.
Method 2: Loose .bsp maps
Step 1: Upload the map
Upload the .bsp to tf/maps/ with SFTP or the file manager. On Linux servers file names are case sensitive, so keep them exactly as the author named them, ideally all lowercase.
Step 2: Add it to mapcycle.txt
ctf_2fort
pl_upward
koth_product_final
cp_orange_x3
pl_mymap_rc2
One map per line, no .bsp. If tf/cfg/mapcycle.txt does not exist, create it. Copying mapcycle_default.txt from the same folder gives you the stock list to edit.
Step 3: Load it
Run changelevel pl_mymap_rc2 in the console, or wait for the rotation to reach it. server.cfg runs on each map change, so new settings apply then.
Step 4: Set up FastDL for players
Without FastDL, players download maps from the game server itself. That is slow, and Source caps it with net_maxfilesize: the default is 16 MB, and the highest you can set is 64 MB. Plenty of custom maps are bigger than 16 MB.
FastDL moves the downloads to a normal web host:
- Compress each map with bzip2 so you get
pl_mymap_rc2.bsp.bz2. - Upload them to a web host in a
mapsfolder, for examplehttps://dl.example.com/tf/maps/pl_mymap_rc2.bsp.bz2. - In
tf/cfg/server.cfg, add:
sv_allowdownload 1
sv_downloadurl "https://dl.example.com/tf/"
The URL points at the folder that contains maps, not at maps itself. Keep the uncompressed .bsp on the game server too: the server needs it to run the map. Restart, and players pull the compressed file at web speed.
The gotcha: never overwrite a map with a new version
Every Source client compares its copy of a map with the server's. If a player downloaded pl_mymap.bsp last month and you replace it on the server with an updated file of the same name, that player gets "Your map differs from the server's" and cannot join until they delete their old copy from tf/download/maps/.
That is why mappers name versions _b4, _rc2 or _final2. When a map updates, upload it as a new file with the new name, swap the line in mapcycle.txt, and remove the old one. Workshop maps handle this themselves, which is a good reason to prefer them.
Common problems
- "Map not found" on changelevel: the name has a typo, includes
.bsp, or the case differs from the file on a Linux server. - Players get "Your map differs from the server's": the map was replaced under the same name. Rename the new version or have players delete theirs from
tf/download/maps/. - Players stuck or kicked while downloading: the map is bigger than
net_maxfilesize. Set up FastDL. - FastDL not used: the URL is wrong, files are not in
maps/, or the.bz2name does not match the.bspname exactly. Open the full file URL in a browser to test. - Rotation ignores your new maps: the file is not
tf/cfg/mapcycle.txt, or the server did not change map since you edited it.
Custom maps on GamezServers
On a Team Fortress 2 server from GamezServers, the starting map is the Default Map setting, and maps go into tf/maps over the SFTP login in Settings or through the file manager, which also extracts zips and can download a map from a link straight to the server. Click Backup before a big rotation change, and the server keeps its regulars playing without anyone's PC on. Plugins next? See how to host a Team Fortress 2 server.
FAQ
Where do custom maps go on a TF2 server?
In tf/maps/ as .bsp files. Workshop maps download themselves when you use workshop/<ID>.
How do I add a Workshop map to the TF2 map cycle?
Add a line workshop/<ID> to tf/cfg/mapcycle.txt, using the number from the map's Workshop URL.
Do I need FastDL for a TF2 server?
Not for small maps, but most custom maps download far faster with it, and anything over the net_maxfilesize limit needs it.
Why do players get "Your map differs from the server's"?
They have an older copy of a map with the same file name. Upload new versions under a new name, or have players delete their copy in tf/download/maps/.
Skip the setup. Your own Team Fortress 2 server.
Then $4.99/mo. Just trying it? $1.25 for 3 days