Download
depot / guides / workshop

Workshop & UGC without the client

The Steam client's "Subscribe" button is great right up until the machine that needs the mod has no Steam client — a dedicated server that wants maps, a build box, a NAS where you archive mods that keep getting "updated" into something worse. DepotDownloader pulls workshop items by ID, and the whole trick fits in one flag — I've leaned on it for every one of those cases myself.

01When this is the right tool

Three scenarios send people here, in my experience in this order:

  • Headless servers. Your Garry's Mod, Left 4 Dead 2 or CS2 server needs maps and addons, and there's no Steam client on the box to subscribe with. This is the canonical use — pair it with the dedicated servers workflow and the whole server provisions from two commands.
  • Archiving. Workshop items have no public version history — when an author updates or delists a mod, the old version is simply gone for subscribers. That's the Workshop trap that's caught me more than once — I went back for a mod version I'd been running happily, and it had been updated out from under me with no way back. If a particular version of a mod matters to you (modpack curation, speedrun rulesets, "the update broke everything"), the only insurance is a copy on your own disk, taken while it's still live — and when the game itself patched out from under those mods, pairing this with rolling the game back to keep your mods working is what restores the old setup whole.
  • Inspection. You want to look inside a mod — diff two versions you archived, audit what a "client-side enhancement" actually contains — without letting the client auto-install it into a live game. It's the same impulse behind datamining a game's raw assets: pull the files to a folder and study them, rather than trusting the live install.

A word for anyone who arrived searching "steam workshop downloader" and landed on a pile of online sites (steamworkshopdownloader.io/.net/.app and friends). Those exist for one reason DepotDownloader doesn't serve well: grabbing a workshop item without owning the game or signing in — which works for items attached to free games but not for paid-game workshop content. DepotDownloader is the CLI, account-based path: it's the right tool when you run a server, want to archive a version, or don't trust a random web tool with your download — but it does require Steam auth (and, for paid games, ownership), so if you're here hoping for a no-account grab of a paid game's mod, that expectation is the thing to adjust. The single most-searched niche, Wallpaper Engine wallpapers (app 431960), is just the same -pubfile pattern below pointed at that app. (Chasing a different kind of bonus content rather than a mod? Pulling a game's bundled soundtrack and OST files is a depot job, not a workshop one — but the same "grab the bytes you're licensed to" principle applies.)

02Finding the ID in the URL

Every workshop item's address ends with its PublishedFileId:

https://steamcommunity.com/sharedfiles/filedetails/?id=3070284539

That trailing number is the only thing you need from the page. Collections don't have a bulk ID — a collection is just a list page; open each item and take its own number. (If you're provisioning a server from a big collection, you'll end up with a text file of IDs and a shell loop — that's not a workaround, that is the workflow, and it beats clicking subscribe forty times.)

03The command

Two flags: the game the item belongs to, and the item:

$ ./DepotDownloader -app 4020 -pubfile 3070284539 -dir ./addons-staging

That's a Garry's Mod (4020) item going into a staging folder. The -app is required and must be the game the item was published for — the workshop is partitioned per game, and the ID only resolves in its own app's context. From there, deployment is the game's business, not DepotDownloader's: GMod wants .gma files in garrysmod/addons, Source servers want maps in maps/, every game differs. The download gets the bytes; the game's own server docs say where they go.

04-pubfile vs -ugc — which one and why both exist

You'll almost always use -pubfile. A workshop item's public identity is its PublishedFileId; under the hood that record points at a raw content handle — the UGC ID — and DepotDownloader resolves one to the other automatically. -ugc exists for when you already hold the raw handle without the workshop wrapper: IDs fished out of Web API responses, older Source-engine UGC references, tooling that works below the workshop layer. Same download either way:

$ ./DepotDownloader -app 4020 -ugc 123456789012345678

If you don't know which one you have: a number you copied from a steamcommunity.com URL is a pubfile ID. UGC handles tend to be the much longer numbers you only meet inside API payloads.

05Anonymous or logged in?

Both forms accept optional credentials, and the honest rule is: try anonymous first, expect to need an account for paid games. Whether anonymous workshop access works is a per-game setting — content for free games and many server-oriented titles downloads without any login, while plenty of paid games gate their workshop behind ownership exactly like their depots. The failure is quick and harmless, so what I do is just try anonymous first and only reach for an account when it refuses; if it refuses, rerun with -username on an account that owns the game (or -qr — the safer shape on shared boxes). The ownership logic is the same machinery as everywhere else on this site: the workshop isn't a side door into content for games you don't have.

06Caveats worth knowing

  • You get the current version, full stop. Unlike game depots with their manifest history, workshop items expose no past versions to download. There is no -manifest equivalent for a mod. This is precisely why the archiving habit above exists — the version you can reach is always and only today's.
  • Delisted means gone. An item the author hid or removed stops resolving — for new downloads, even for old subscribers. If a server depends on a mod, keep your own copy; treat the workshop as a distribution channel, not a backup.
  • Respect the licensing. Mods belong to their authors. Downloading for your own server, archive or analysis is what this exists for; repackaging someone's work and re-uploading it is the thing every modding community rightly torches people for.
  • One item at a time. DepotDownloader takes a single -pubfile per run — there's no "download this whole collection" switch. To grab a collection, get each item's ID (a collection page lists them) and loop the command, or use a dedicated collection-aware tool for that one job. For a handful of items a quick shell loop is the whole solution.
  • Errors look familiar. Auth and connection failures here are ordinary DepotDownloader errors, and the usual pages apply — though if you hit a wall on a workshop item specifically, ownership (this section above) is the cause far more often than the request-code gating that plagues old game builds.

Flag details live in the CLI reference; the server side of the pairing lives in the dedicated servers hub.