Download
depot / compare

Three crowbars, one warehouse

DepotDownloader, Valve's own SteamCMD, and Python's steamctl all open Steam's content system from the command line — and all three answer to the same server-side rules. This site is obviously about one of them, but pretending the other two don't have their days would make this page useless. Here's the comparison I'd want if I were choosing.

01The three contenders

DepotDownloader — community tool by SteamRE (the SteamKit2 people), C#/.NET, shipped as self-contained binaries. Built around the idea that a depot's history is addressable: manifests are a first-class argument, not an afterthought. The thing this entire site documents.

SteamCMD — Valve's official headless Steam client. The tool game developers document for dedicated servers, the one hosting panels are built around. Its centre of gravity is app_update: give me the current build of this app, validated. Everything else it does, it does reluctantly.

steamctl — community tool from the ValvePython project, pip install steamctl. The widest net of the three: depots and workshop, but also Steam Guard authenticator management, Steam Cloud files, WebAPI queries, master-server browsing. A Swiss army knife where the other two are crowbars.

02The feature matrix

DepotDownloaderSteamCMDsteamctl
Made bySteamRE communityValve, officialValvePython community
Runs onWin · Linux · macOS · ARM64, self-containedWin · Linux · macOS (32-bit libs needed on Linux)Anywhere with Python 3
Latest build of a gameYESYES — its home turfYES
Old builds by manifestFIRST-CLASS — -manifest flagCLUNKY — download_depot console commandSUPPORTED — added later, historically patchy
Anonymous modeYESYESYES
QR / passwordless loginYESNONO
Partial downloads (file lists, regex)YES — -filelistNOLIMITED
Workshop / UGC by IDYES — -pubfile / -ugcPER-GAME — workshop_download_itemYES
Repair in place-validateapp_update … validate
Beyond downloads (Guard, Cloud, WebAPI)NONOYES — its whole point
Community GUISteamDepotDownloaderGUIassorted wrappersNO

One row that isn't there, deliberately: "bypasses manifest gating". Nobody does. All three ask the same Steam servers for the same request codes and get the same answers — a manifest Valve won't serve is unavailable in every tool, and anything claiming otherwise belongs on the safety page's warning list, not in this table.

03The axes that actually decide it

History. If old builds are the job, the gap is wide. DepotDownloader treats app/depot/manifest as its native coordinates. SteamCMD can do it — download_depot 220 221 manifestid in its console — but it buries the result in steamapps/content/, gives terse errors, and the workflow reads like the afterthought it is. steamctl gained proper request-code handling later than the others and the depot corner of the project has seen rougher edges (a long-standing 401-on-old-manifests bug taught its users that lesson). Worth knowing: SteamCMD's console occasionally disagrees with DepotDownloader on what it'll serve — both directions — so the desperate two-minute cross-check is legitimate.

Login UX. DepotDownloader has QR sign-in and stores revocable tokens (details). SteamCMD wants the password typed or — worse, and exactly what every forum tutorial shows — passed inline in the command. steamctl sits between, with the curious twist that it can be your two-factor authenticator. On a shared or rented box, QR alone can settle the choice.

Surgical downloads. Only DepotDownloader does file-level filtering (-filelist with regex support) — pulling three files from a 60 GB depot instead of the depot. If your use case is diffing builds or extracting assets, that's the decisive row of the matrix.

Operational fit. SteamCMD is what the game's own documentation assumes, what panels like AMP or Pterodactyl integrate, what Valve keeps working forever. Migrating a documented server workflow to a different tool buys you nothing unless you need that tool's tricks. Linux footnote: SteamCMD is a 32-bit binary and drags lib32gcc along; DepotDownloader's self-contained build has no such ask; steamctl needs a Python environment.

04When SteamCMD is the right answer

Production game servers, plainly. If the developer's wiki documents app_update 740, do that — official tool, official support surface, and every hosting integration on earth speaks it. It's also the only one of the three made by the people who run the platform: when Steam changes, SteamCMD is updated by definition. I run DepotDownloader for server work because I value one recipe across all my boxes and cron-friendly flags — but if SteamCMD is already wired into your panel and works, switching for its own sake is hobbyism.

05When steamctl is the right answer

When the download is the boring part of a bigger Steam automation. steamctl manages Steam Guard from the terminal, pulls Steam Cloud saves, queries the WebAPI, parses SteamIDs — none of which the other two attempt. If you live in Python and want one dependency that pokes all of Steam, it's genuinely good. For depot work specifically it's the third choice of three, and I think its own maintainers would shrug agreeably at that — depots are one tool in its drawer, not the point of it. One real edge: steamctl is pure Python, so it runs where DepotDownloader's .NET can't — if you're on a BSD or an exotic platform with no .NET runtime, that platform reach is steamctl's to win.

06Two more you'll see mentioned

Searches keep pairing DepotDownloader with two things that aren't really alternatives, so to settle them:

  • ArchiSteamFarm (ASF). Also built on SteamKit2, also account-oriented — but it doesn't download game files at all. ASF farms trading cards and manages licenses (its addlicense adds free games to an account); it has no depot-download function. "ASF vs DepotDownloader" is a category error: one adds licenses and farms cards, the other downloads the content of games you're licensed for. Different jobs entirely.
  • The Steam console download_depot command. The built-in client trick — no extra tool. It used to be a real fourth option for old versions, but it's effectively retired for that: today it mostly fetches the current build or refuses old manifests. The full why-and-migration is on the download_depot page.

07Task → tool

You want to…Reach for
Download an old build by manifest IDDepotDownloaderthe downgrade guide
Run a production server the dev documents via SteamCMDSteamCMD — follow the game's docs
Provision/update servers your own way, scriptedDepotDownloaderone recipe, every game
Pull specific files out of a huge depotDepotDownloader — filelists
Log in without typing a password on a sketchy boxDepotDownloaderQR
Workshop items on a headless machineDepotDownloader or steamctlworkshop guide
Manage Steam Guard, Cloud saves, WebAPI from a terminalsteamctl — nothing else does
Click buttons instead of typing anythingDepotDownloader via the GUI
Add a free game's license / farm trading cardsArchiSteamFarm — it doesn't download game files
Run on a BSD / platform with no .NET runtimesteamctl — pure Python, no .NET needed
Defeat Valve's old-manifest restrictionsNothing. Server-side gate, all tools equal — status page

And since all three are free and small, the honest meta-advice: install two. The cross-check costs nothing and settles arguments faster than any comparison table — including this one.