Tiny proxy for Source Engine FastDL backed by a SFTP connection to your game server.
| .dockerignore | ||
| .editorconfig | ||
| .gitignore | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
foxfastdl
Tiny proxy that provides a Source Engine FastDL HTTP server backed by one or more SSH/SFTP connections to underlying game servers.
Important notes:
- Does not support Bzip2, you should use compressed BSPs.
- Performs no caching on its own, so make sure to run it behind a CDN.
- Allows you to require a
x-foxfastdl-passwordwhich you can set from your CDN. - Monitors server connections, attempting to reconnect automatically, and exiting on connection loss.
Usage
You can configure foxfastdl with environment variables:
FASTDL_SERVERn- list ofsftp://URLs to proxy, supply server name with?name=xxxxxFASTDL_PASSWORD- required value for thex-foxfastdl-passwordheader, or an empty string to disableFASTDL_PATHS- comma-seperated lists of directories to expose, defaultmaps,materials,models,sound,particles,scripts,resource,replayFASTDL_BIND- listen for HTTP connections on this port, default:8080FASTDL_MONITOR_SECONDS- delay between checking server connections when idle, zero to disable, default60
Here's an example of what foxfastdl looks like:
$ FASTDL_SERVER1=sftp://USER:PASS@orchid.nodes.pyro.sh:2022/tf/?name=pound3
$ FASTDL_SERVER2=sftp://USER:PASS@camellia.nodes.pyro.sh:2022/tf/?name=pound4
$ ./foxfastdl
foxfastdl v0.3.0 (c) 2025 Lua MacDougall <lua@foxgirl.dev>
connected pound3 at orchid.nodes.pyro.sh:2022
connected pound4 at camellia.nodes.pyro.sh:2022
listening on :8080
GET /
GET /favicon.ico
GET /pound3
GET /pound3/maps
GET /pound3/maps/koth_harvest_final.bsp
License
Made with ❤ by Lua (foxgirl.dev). Licensed under MIT.


