Skip to content

How to use Custom Maps and setup FastDL

Updated July 03, 2026
Team Fortress 2
Team Fortress 2: Maps and Fast Downloads | GameServerKings KB

Team Fortress 2: Maps and Fast Downloads

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 first.

The Map Cycle

tf/cfg/mapcycle.txt lists the maps the server rotates through, one per line:

Code
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

  1. Find a map on gamebanana.com/maps, the TF2 Workshop, or another source.
  2. Download the .bsp file.
  3. Upload it to tf/maps/ via SFTP or the File Manager.
  4. Add the map name (without the .bsp extension) to mapcycle.txt.
  5. 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.

Fast Downloads (sv_downloadurl)

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:

  1. Host the contents of tf/maps/ (and any custom tf/materials/, tf/sound/) on a web server, your own or a CDN.
  2. In server.cfg, set: ``cfg sv_downloadurl "https://fastdl.yourdomain.com/tf/" sv_allowdownload 1 sv_allowupload 1 ``
  3. Mirror the server's folder structure on the HTTP host. A map at tf/maps/cp_custom.bsp on the game server must be reachable at https://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.

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:

ValueEffect
0Anything goes; clients can use custom skins and content
1Enforces consistency.txt; common for competitive
2Strict; only stock content

For trade and casual servers running lots of custom content, sv_pure 0 is typical. For competitive integrity, sv_pure 1 or higher.

Common Issues

  • Custom maps not downloading for clients: sv_downloadurl not set, or sv_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.txt with the correct name (no .bsp extension) and that the .bsp is in tf/maps/.
Made with 💜 by GameServerKings