High-performance, resilient downloader for Wuthering Waves with multi-CDN fallback, integrity verification, and a clean TUI experience.
✨ Features •
📦 Requirements •
🛠️ Installation •
- Multi-CDN fallback: Automatically tries multiple mirrors on failures
- Interactive version selection: Choose Live/Beta and OS/CN variants
- Integrity checks: Per-file MD5 verification; corrupted files are removed
- Smart retries: Up to 3 retry attempts per CDN with robust timeouts
- Streaming downloads: Chunked I/O for low memory usage
- Clear progress: Per-file progress bars with speed, ETA, totals
- Graceful interrupt: CTRL-C to stop safely with a final summary
- Detailed logs: Errors recorded with timestamps in
logs.log
- Rust nightly toolchain: 1.87.0-nightly or newer
- Windows: Full console experience
- Linux: Fully supported
rustup toolchain install nightly
rustup default nightly
git clone https://github.com/yuhkix/wuwa-downloader.git
cd wuwa-downloader
cargo build --release
- Windows:
target\release\wuwa-downloader.exe
- Linux:
./target/release/wuwa-downloader
- Select a version to download (Live/Beta and OS/CN)
- Choose a download directory or press Enter for current directory
- Wait for index fetching and size estimation
- Monitor download progress with progress bars
- Review final summary and press Enter to exit
- Remote config discovery via JSON
- Index parsing for resource listing
- HEAD request preflight checks
- Range-based downloads with resume capability
- MD5 checksum validation
src/network/client.rs
: Config and download managementsrc/io/util.rs
: Progress tracking and formattingsrc/io/file.rs
: File operations and path handlingsrc/io/logging.rs
: Error logging systemsrc/download/progress.rs
: Progress state management
- Retry Policy: 3 attempts per CDN
- Timeouts: 30s for metadata, extended for transfers
- Logging:
- Errors:
logs.log
- URLs:
urls.txt
(optional)
- Errors:
- Progress: Live window title updates (Windows)
- Download location? User-selected at runtime
- Safe interruption? Yes, via CTRL-C
- Why MD5? Matches upstream checksums for integrity
- Required: Rust nightly (1.87.0-nightly+)
- Dependencies:
reqwest
(blocking)indicatif
flate2
colored
ctrlc
serde_json
Release profile includes:
- Strip symbols
- Link-time optimization
- Maximum optimization level
- Single codegen unit
cargo run --release
Pull requests are welcome. Please ensure:
- Focused changes
- Clear documentation
- Brief motivation explanation
Licensed under the MIT License. See LICENSE.