How to use Custom Maps and setup FastDL for Team Fortress 2
Build your mapcycle.txt file, add custom map files, and configure sv_downloadurl fast downloads to prevent slow loading screens.
This guide covers the map cycle, adding custom maps, and setting up a fast download (sv_downloadurl) so players are not stuck on the Source engine's painfully slow built-in download. Complete Getting started with your Team Fortress 2 server first.
The Map Cycle
tf/cfg/mapcycle.txt lists the maps the server rotates through, one per line:
ctf_2fort
cp_dustbowl
pl_badwater
koth_viaduct
cp_gravelpit
pl_upward
cp_steel The server advances to the next map when the time limit (mp_timelimit) or round limit is reached.
To force a specific map on boot, set +map cp_dustbowl in the Startup tab arguments (or use the Startup map field).
For player-controlled rotation (voting, nominations, RTV), install MapChooser Extended, covered in SourceMod Plugins. With it, players vote on the next map near the end of each round.
Adding Custom Maps
Find a map on
gamebanana.com/maps, the TF2 Workshop, or another source.Download the
.bspfile.Upload it to
tf/maps/via SFTP or the File Manager on your hosted Team Fortress 2 server.Add the map name (without the
.bspextension) tomapcycle.txt.Restart, or switch to it live with
changelevel mapname.
Some maps come with extra files (custom textures, sounds, particles). Upload those to the matching tf/ subfolders (tf/materials/, tf/sound/, etc.) so the map renders correctly.
Playing a Custom Map on Your Own Client
A map you download from GameBanana is a .bsp, and on your own machine it goes in the same place it goes on the server:
steamapps/common/Team Fortress 2/tf/maps/ That is the folder the game loads maps from. A .bsp sitting there is playable immediately — no mapcycle.txt entry, no restart.
Maps you picked up by joining a server are a different case. They arrive on their own — as Valve's wiki puts it, "upon joining a server currently playing a custom map, the map files start downloading automatically if the player does not already have it" — but they land in tf/download/maps/, the engine's separate path for server-supplied content, not in tf/maps/. That is fine while you are connected and no help offline. If map cp_custom tells you the map is not found, copy the .bsp from tf/download/maps/ into tf/maps/.
Players can turn custom downloads off
The same wiki notes it "is possible to disable custom content downloads in the options menu; however, doing so prevents downloading custom maps from servers". If one player reports timing out on every custom-map server while everyone else connects, check that setting before you touch FastDL.
Enabling the developer console
You need the console to type map at all. Turn it on in Options → Keyboard → Advanced → Enable Developer Console, then open it with the backtick/tilde key (the one to the left of 1). Adding -console to the game's launch options does the same job, and -developer opens the console automatically on startup.
map offline versus changelevel on the server
They are not interchangeable.
map cp_customchanges the map and restarts the server. Run from the main menu it starts a new local server, which is how you load a custom map on your own machine without going through the Create Server dialog.changelevel cp_customchanges the map on a server that is already running, without the restart. This is the one to use in your panel Console on a live server —maprestarts and drops everyone.
Neither adds the map to rotation. That still needs the name in mapcycle.txt, as above.
Fast Downloads (sv_downloadurl)
The one thing to get right on a custom-map server
This is the single most important thing for any server running custom maps.
The Problem
Without sv_downloadurl, players downloading custom content from the game server are throttled to roughly 20 KB/s, a hard Source engine limit. A 60 MB custom map takes minutes, and players often give up and disconnect before it finishes.
The Fix
Host your custom files on a normal HTTP web server and point the game at it:
Host the contents of
tf/maps/(and any customtf/materials/,tf/sound/) on a web server, your own or a CDN.In
server.cfg, set:sv_downloadurl "https://fastdl.yourdomain.com/tf/" sv_allowdownload 1 sv_allowupload 1Mirror the server's folder structure on the HTTP host. A map at
tf/maps/cp_custom.bspon the game server must be reachable athttps://fastdl.yourdomain.com/tf/maps/cp_custom.bsp.
Now custom downloads come from your fast HTTP server at full speed instead of the throttled game server.
Compressing Files (Optional but Recommended)
Source supports bzip2-compressed fast-download files. Compress each .bsp to .bsp.bz2 and host both. Clients download the smaller compressed version and decompress locally, cutting download time further. Tools like bzip2 on the command line produce these.
Hosting Options
- Your own web server: Full control, mirror the
tf/structure - A dedicated FastDL host: Some providers offer FastDL space specifically for this
- A CDN or object storage (S3-compatible, etc.): Works as long as the path structure matches and files are publicly readable
sv_pure and Custom Content
sv_pure controls how strictly the server enforces client file consistency:
| Value | Effect |
|---|---|
| 0 | Anything goes; clients can use custom skins and content |
| 1 | Enforces consistency.txt; common for competitive |
| 2 | Strict; only stock content |
Pick the value that matches your server's purpose
For trade and casual servers running lots of custom content,
sv_pure 0is typical. For competitive integrity,sv_pure 1or higher.
Common Issues
- Custom maps not downloading for clients:
sv_downloadurlnot set, orsv_allowdownload 0. Confirm both. Also confirm the file is actually reachable at the mirrored URL path (paste it in a browser). - Map downloads but textures are missing: The map's custom materials/sounds were not uploaded, or not mirrored to the FastDL host. Upload the full content set.
- FastDL URL returns 404: Folder structure mismatch. The path after the base URL must exactly mirror the
tf/structure (e.g.,/tf/maps/yourmap.bsp). - Map not in rotation: Confirm it is listed in
mapcycle.txtwith the correct name (no.bspextension) and that the.bspis intf/maps/.
What to Read Next
- SourceMod Plugins for MapChooser Extended (map voting and RTV)
- Game Mode Servers for maps tied to specific game modes
- Getting started with your Team Fortress 2 server for the
server.cfgsettings referenced here - Team Fortress 2 Admin Commands to change maps and run map votes from the console
Made with 💜 by GameServerKings

Need a Team Fortress 2 server?
Deploy an instantly-provisioned Team Fortress 2 server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $5.40 /month