01The wall you hit
SteamCMD is the tool game developers point you at for dedicated servers, and it's excellent at its job: app_update <id> installs and keeps a server's files on the current version. The wall appears the moment you want a different version — to match a community server pinned to an old patch, to roll back after an update broke your mods or your server, or to hold a build that worked. You search for a SteamCMD flag to specify the version, and there isn't a usable one. This is the recurring "SteamCMD download old version" question across the Rust, ARK and Satisfactory server communities, and the answer is the same each time: SteamCMD isn't built for it.
02Why SteamCMD can't
SteamCMD's app_update is a syncing mechanism — it brings your install to whatever the app's current build is, full stop. There's no parameter to say "give me the build from three patches ago." It does carry a hidden download_depot console command that takes a manifest, but it's the same one in the Steam client and it's subject to the same restrictions — it increasingly only fetches the current build or refuses old manifests (the full story is on the download_depot page). So in practice SteamCMD gives you one version: today's. To pin a specific older one you need a tool that speaks manifests, and that's exactly what DepotDownloader is.
03Who does what
| The task | The tool |
|---|---|
| Install / keep a server on the current version | SteamCMD — what the devs document, the production path |
| Download a specific older version by manifest | DepotDownloader — the -manifest flag SteamCMD lacks |
| Pin a server to an old build and stop it updating | DepotDownloader for the build, then hold it |
| Routine "is there an update? apply it" automation | SteamCMD — built for exactly that loop |
So it's not "DepotDownloader instead of SteamCMD" — it's both, for different jobs. Many server setups use SteamCMD day to day and reach for DepotDownloader only when they need a version SteamCMD can't express — that's exactly how I run mine, and the mistake I see people make is assuming there must be a SteamCMD flag for old versions and burning an afternoon hunting for it. The fuller side-by-side (and where steamctl fits) is on the comparison page; this page is just the old-version task.
04The bridge: roll a server back
Concretely, to put a dedicated server on a specific old version: find that version's manifest for the server app on SteamDB, and download it with DepotDownloader instead of SteamCMD. Dedicated-server apps are usually free and download anonymously, so often no login is even needed:
# SteamCMD (current only): app_update 258550 validate
# DepotDownloader (a specific build):
$ ./DepotDownloader -app 258550 -depot 258551 -manifest <old-build-manifest> -dir ./serverThen pin it — set the install not to auto-update and update it deliberately, the stop-download-restart rhythm the Rust server guide details. The dedicated-servers hub covers the per-game app IDs and the cron pattern for keeping (or holding) a server's version.
05Server-admin notes
- Match clients to the server. A server pinned to an old build only accepts clients on the same version — the version-matching guide covers getting everyone aligned.
- Old manifests can be gated. Very old server builds ride the same request-code restrictions as games — recent versions are the reliable case; deep history is a coin flip.
- Panels that wrap SteamCMD. If your host panel (AMP, Pterodactyl, a game-server provider) only knows SteamCMD, you can still drop a DepotDownloader-fetched build into the server's files directory and point the panel at it — it runs the files, it doesn't care which tool fetched them.
The summary fits on a sticky note: SteamCMD for the current version, DepotDownloader for a specific old one. Keep both in the toolbox and the "SteamCMD won't downgrade" wall stops being a wall.