Expand description
High-level Steam depot download orchestration and delta patching.
Built on steamroom for protocol-level operations, this crate handles the
full download lifecycle:
download– Pipelined chunk fetching with concurrent I/O, backpressure, retry with exponential backoff, and ordered file assemblydownload::FileFilter– Filter files by literal paths, regex, orregex:-prefixed filelist entries (compatible with DepotDownloader format)download::CdnChunkFetcher– CDN fetcher with automatic server rotation and rate-limit awareness viasteamroom::cdn::CdnServerPooldepot_config– Track installed manifests and depot keys for delta updatesevent–DownloadEventstream for progress reportingmanifest– Manifest cache for avoiding redundant CDN downloads
§Example
use steamroom::depot::{DepotId, DepotKey};
use steamroom::cdn::{CdnClient, CdnServerPool};
use steamroom::cdn::server::CdnServer;
use steamroom_client::download::{CdnChunkFetcher, DepotJob};
use steamroom_client::event::DownloadEvent;
let (event_tx, mut event_rx) = tokio::sync::mpsc::unbounded_channel();
let job = DepotJob::builder()
.depot_id(DepotId(481))
.depot_key(depot_key)
.install_dir("/tmp/spacewar".into())
.verify(true)
.event_sender(event_tx)
.build()
.expect("missing required fields");
let fetcher = CdnChunkFetcher::new(
CdnClient::new().expect("http client"),
CdnServerPool::new(cdn_servers),
None,
);
let stats = job.download(&manifest, std::sync::Arc::new(fetcher)).await
.expect("download failed");
println!("downloaded {} files ({} bytes)", stats.files_completed, stats.bytes_downloaded);Modules§
- credentials
- Saved login token storage.
- depot_
config - Installed depot/manifest tracking for delta updates.
- download
- Pipelined download orchestration, file filtering, and retry logic.
- event
- Download progress events for UI integration.
- manifest
- Manifest cache to avoid redundant CDN fetches.