Open-source Rust implementation of Blizzard's NGDP (Next Generation Distribution Pipeline) for World of Warcraft emulation.
Current Version: 0.1.0 (Ready for Release)
Component | Version | Status | Description |
---|---|---|---|
ngdp-bpsv |
0.1.0 | β Stable | BPSV parser/writer for NGDP formats |
ribbit-client |
0.1.0 | β Stable | Ribbit protocol client with signature verification |
tact-client |
0.1.0 | β Stable | TACT HTTP client for version/CDN queries |
ngdp-cdn |
0.1.0 | β Stable | CDN content delivery with parallel downloads |
ngdp-cache |
0.1.0 | β Stable | Caching layer for NGDP operations |
ngdp-client |
0.1.0 | β Stable | CLI tool for NGDP operations |
- β Ribbit Protocol: Full implementation including V1/V2, signature verification, all endpoints
- β TACT Protocol: HTTP/HTTPS clients for version and CDN queries
- β BPSV Format: Complete parser and builder with zero-copy optimizations
- β CDN Operations: Parallel downloads, streaming, retry logic, rate limiting
- β Caching: Transparent caching for all protocols with TTL support
- β CLI Tool: Feature-complete command-line interface
- π§ CASC Storage: Local storage implementation (planned for v0.2.0)
- π§ TVFS: TACT Virtual File System (planned for v0.2.0)
Add to your Cargo.toml
:
[dependencies]
ribbit-client = "0.1"
ngdp-bpsv = "0.1"
Basic example:
use ribbit_client::{Region, RibbitClient};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create a client for US region
let client = RibbitClient::new(Region::US);
// Request WoW versions with typed API
let versions = client.get_product_versions("wow").await?;
// Print version information
for entry in &versions.entries {
println!(
"{}: {} (build {})",
entry.region, entry.versions_name, entry.build_id
);
}
Ok(())
}
cargo install ngdp-client
cargo add ribbit-client ngdp-bpsv tact-client ngdp-cdn ngdp-cache
git clone https://github.com/wowemulation-dev/cascette-rs
cd cascette-rs
cargo build --release
# CLI binary will be at target/release/ngdp
-
BPSV Parser/Writer (
ngdp-bpsv
)- β Complete BPSV format support with zero-copy parsing
- β Type-safe field definitions (STRING, HEX, DEC)
- β Schema validation and sequence number handling
- β Builder pattern for document creation
- β Round-trip compatibility
-
Ribbit Protocol Client (
ribbit-client
)- β All Blizzard regions (US, EU, CN, KR, TW, SG)
- β V1 (MIME) and V2 (raw) protocol support
- β Typed API for all endpoints
- β PKCS#7/CMS signature verification
- β Certificate and OCSP support
- β Automatic retry with exponential backoff
- β DNS caching for performance
-
TACT HTTP Client (
tact-client
)- β Version and CDN configuration queries
- β Support for V1 (port 1119) and V2 (HTTPS) protocols
- β Typed response parsing
- β Automatic retry handling
- β All Blizzard regions supported
-
CDN Content Delivery (
ngdp-cdn
)- β Parallel downloads with progress tracking
- β Streaming operations for large files
- β Automatic retry with rate limit handling
- β Content verification
- β Configurable connection pooling
- β Automatic fallback to backup CDN servers
- β Built-in support for community mirrors (arctium.tools, reliquaryhq.com)
-
Caching Layer (
ngdp-cache
)- β Transparent caching for all NGDP operations
- β TTL-based expiration policies
- β Streaming I/O for memory efficiency
- β CDN-compatible directory structure
- β Batch operations for performance
-
CLI Tool (
ngdp-client
)- β Product queries and version information
- β Certificate operations
- β BPSV inspection
- β Multiple output formats (text, JSON, BPSV)
- β Beautiful terminal formatting
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Special thanks to the WoW emulation community and the documentation efforts at wowdev.wiki.
This project is dual-licensed under either:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Note: This project is not affiliated with or endorsed by Blizzard Entertainment. It is an independent implementation based on reverse engineering efforts by the community for educational and preservation purposes.