depot-dl
Python Steam depot downloader built for single-session, many-manifest workflows. Unlike the official DepotDownloader, depot-dl logs in once and reuses the same authenticated session across every manifest request — no more getting rate-limited by Steam's login throttle when fetching historical builds.
Why depot-dl?
The official DepotDownloader is a
great tool, but each invocation performs a fresh Steam login. If you need to
fetch dozens or hundreds of historical manifests, you'll hit
RateLimitExceeded after a few dozen requests and get locked out for hours.
depot-dl's core design: one login, one session, N manifests. You can fetch hundreds of historical builds in a single run without tripping Steam's rate limiter, because only one login handshake ever happens.
Installation
pip install depot-dl
Or from source:
git clone https://github.com/bitalizer/depot-dl
cd depot-dl
pip install -e .
Quick start
Download a single manifest
depot-dl download --app 440 --depot 441 \
--manifest 3087768970110163342 --user YOUR_STEAM_LOGIN
Download many manifests in one session
# manifests.txt — one manifest ID per line
echo 3087768970110163342 > manifests.txt
echo 1619985635172051553 >> manifests.txt
depot-dl download --app 440 --depot 441 \
--manifest-file manifests.txt \
--user YOUR_STEAM_LOGIN
Only download specific files
depot-dl download --app 440 --depot 441 \
--manifest-file manifests.txt \
--file "*.cfg" \
--user YOUR_STEAM_LOGIN
Or use a filelist file (same format as DepotDownloader):
# filelist.txt
regex:.*\.cfg$
*.json
depot-dl download --app 440 --depot 441 \
--manifest-file manifests.txt \
--filelist filelist.txt \
--user YOUR_STEAM_LOGIN
Flat output with name templates
depot-dl download --app 440 --depot 441 \
--manifest-file manifests.txt \
--file "game.exe" \
--name-template "{file}_{date}_{manifest}" \
--user YOUR_STEAM_LOGIN
Template variables: {file}, {manifest}, {app}, {depot}, {date}
List files in a manifest
depot-dl list --app 440 --depot 441 --manifest 3087768970110163342 --user YOUR_STEAM_LOGIN
Get manifest info
depot-dl info --app 440 --depot 441 --manifest 3087768970110163342 --user YOUR_STEAM_LOGIN
Filelist format
depot-dl supports the same filelist format as DepotDownloader:
# comment lines start with #
game/steam.inf
regex:.*\.cfg$
*.swf
- Plain paths match exactly
regex:prefix enables regex matching- Anything with glob characters (
*,?,[) is treated as a glob - Case-insensitive matching by default
Authentication
Email/2FA code is required once per run. The session is then reused for all manifests in that run.
depot-dl login --user YOUR_STEAM_LOGIN # interactive login
depot-dl whoami # show cached user
depot-dl logout # clear cached credentials
Anonymous mode is supported for free-to-play apps:
depot-dl download --app <id> --depot <id> --manifest <id> --anonymous
Concurrency
Chunk downloads are parallelized per file via --max-chunks (default 8).
Manifests are processed sequentially within a single session.
Library usage
from depot_dl import DepotClient, DownloadRequest, FileFilter
client = DepotClient()
client.login(username="YOUR_STEAM_LOGIN")
request = DownloadRequest(
app_id=440,
depot_id=441,
manifest_id=3087768970110163342,
output_dir="./downloads",
file_filter=FileFilter.from_patterns(["*.cfg"]),
)
for progress in client.download(request):
print(f"{progress.file}: {progress.percent:.1f}%")
License
MIT — see LICENSE.
Credits
Built on top of ValvePython/steam for Steam protocol handling. Inspired by the SteamRE/DepotDownloader project.
Metadata
Release files for depot-dl 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| depot_dl-1.0.0.tar.gz | 15.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| depot_dl-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.1 kB
Release files / depot_dl-1.0.0.tar.gz
| Download URL | depot_dl-1.0.0.tar.gz |
|---|---|
| Size | 15.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f00515a684e1f1837f63dd8abb4091d60ce2a609b7d3c5d81744fbd0a80cee2f
|
|
BLAKE2b-256 checksum How to use checksums |
6cefdf0ff3a599ceff222033cf7a9331adf33637c9c181693b70947d946c3004
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 12, 2026.
Transparency logRelease files / depot_dl-1.0.0-py3-none-any.whl
| Download URL | depot_dl-1.0.0-py3-none-any.whl |
|---|---|
| Size | 18.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2523a73954ad8183cae89e1dc2e6a8f6312149b13e65e728776b6d4568483228
|
|
BLAKE2b-256 checksum How to use checksums |
1d823617cc5a90a0c88d4175e0c76b357ce5676e15557074d09f55474ae4e4f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 12, 2026.
Transparency log