Setting Up FastDL for Faster Content Downloads
How to configure a web server as a FastDL host so clients download maps and content at full speed instead of the built-in 20 KB/s limit.
Why FastDL Matters
GMod's built-in download system (sv_allowdownload) throttles transfers to approximately 20 KB/s per file. A typical custom map is 50–300 MB. At 20 KB/s, a 100 MB map takes over 80 minutes to download — players will never wait that long.
FastDL replaces the built-in transfer with direct HTTP downloads from a web server. Clients download at their full connection speed.
How FastDL Works
- You mirror your server's content to a web server
- You set
sv_downloadurlinserver.cfgto point at that web server - When a client connects and needs a file, GMod redirects the download request to your web server
- The client downloads at HTTP speed instead of through the game protocol
FastDL delivers: maps, materials, models, sounds, and resource files. It does not deliver Lua files — those are handled by GMod's own Lua transfer system regardless of FastDL.
Directory Structure
Your web server must mirror the garrysmod/ directory structure. The paths that matter most:
https://yourcdn.example.com/
└── garrysmod/
├── maps/ ← Highest priority; largest files
├── materials/
├── models/
├── sounds/
└── resource/
If your sv_downloadurl is https://yourcdn.example.com/, then a map file should be accessible at:
https://yourcdn.example.com/garrysmod/maps/rp_downtown_v4c_v2.bsp
server.cfg Settings
sv_allowdownload 1
sv_allowupload 1
sv_downloadurl "https://yourcdn.example.com/"
The trailing slash on sv_downloadurl is required. Without it the URL concatenation breaks and clients fall back to the slow built-in download.
File Compression (bzip2)
Clients request .bz2 compressed versions first and fall back to uncompressed if not found. Compressing files significantly reduces transfer size:
# Compress a single map
bzip2 -k rp_downtown_v4c_v2.bsp
# Compress all maps in a directory
for f in *.bsp; do bzip2 -k "$f"; done
The -k flag keeps the original file alongside the compressed .bz2 version. Upload both to your web server:
garrysmod/maps/rp_downtown_v4c_v2.bsp
garrysmod/maps/rp_downtown_v4c_v2.bsp.bz2
BSP maps typically compress to 40–60% of their original size.
What to Upload
Prioritize in this order:
- Maps — Largest files; highest impact on join time
- Models — Custom player models, props, vehicles
- Materials — Textures, overlays
- Sounds — Music, ambient, custom weapon sounds
- Resource files — Spray logos, fonts
Do not upload files that are already in the base game or CSS — clients already have those. Only upload content you added to the server.
Hosting Options
- CDN storage buckets (R2, S3, Backblaze B2): Low cost, high availability, good for static files
- Nginx/Apache on a VPS: Full control; set up directory browsing at the content path
- Existing web hosting: Works fine if directory listing is enabled at the correct path
Ensure your web server has directory listing enabled or that it returns 200 OK for direct file requests. A 403 Forbidden on directory access is fine as long as individual file requests return 200.
Verifying FastDL is Working
Connect to your server from a client with a map the client does not have cached. Watch the download progress bar — if speeds exceed 1 MB/s, FastDL is working. If you see speeds around 20 KB/s, the client is falling back to the built-in download.
Check the server console for:
Client connected from <IP>
Sending file: garrysmod/maps/rp_downtown_v4c_v2.bsp
If you see this, the client is downloading through the game — not FastDL. Double-check your sv_downloadurl value and confirm the file exists at the expected URL by testing it in a browser.