{"id":31549492,"url":"https://github.com/wowemulation-dev/cascette-rs","last_synced_at":"2025-10-04T17:21:32.609Z","repository":{"id":299939266,"uuid":"1002303607","full_name":"wowemulation-dev/cascette-rs","owner":"wowemulation-dev","description":"A collection of Blizzard NGDP tools written for Rust.","archived":false,"fork":false,"pushed_at":"2025-08-12T06:22:08.000Z","size":1344,"stargazers_count":8,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-22T22:43:29.799Z","etag":null,"topics":["blizzard","casc","ngdp","reverse-engineering","tact"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wowemulation-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"danielsreichenbach"}},"created_at":"2025-06-15T07:00:22.000Z","updated_at":"2025-09-12T21:14:24.000Z","dependencies_parsed_at":"2025-07-15T06:23:02.729Z","dependency_job_id":"c477c995-9a86-4c4d-a630-7a0152ede8a1","html_url":"https://github.com/wowemulation-dev/cascette-rs","commit_stats":null,"previous_names":["wowemulation-dev/cascette-rs"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/wowemulation-dev/cascette-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wowemulation-dev%2Fcascette-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wowemulation-dev%2Fcascette-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wowemulation-dev%2Fcascette-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wowemulation-dev%2Fcascette-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wowemulation-dev","download_url":"https://codeload.github.com/wowemulation-dev/cascette-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wowemulation-dev%2Fcascette-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278343790,"owners_count":25971566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blizzard","casc","ngdp","reverse-engineering","tact"],"created_at":"2025-10-04T17:21:29.439Z","updated_at":"2025-10-04T17:21:32.544Z","avatar_url":"https://github.com/wowemulation-dev.png","language":"Rust","funding_links":["https://github.com/sponsors/danielsreichenbach"],"categories":[],"sub_categories":[],"readme":"# cascette-rs\n\nRust implementation of Blizzard's NGDP (Next Generation Distribution Pipeline)\nfor World of Warcraft emulation.\n\n\u003cdiv align=\"center\"\u003e\n\n[![Discord](https://img.shields.io/discord/1394228766414471219?logo=discord\u0026style=flat-square)](https://discord.gg/Q44pPMvGEd)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE-APACHE)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE-MIT)\n[![CI Status](https://github.com/wowemulation-dev/cascette-rs/workflows/CI/badge.svg)](https://github.com/wowemulation-dev/cascette-rs/actions)\n[![Crates.io Version](https://img.shields.io/crates/v/ngdp-client)](https://crates.io/crates/ngdp-client)\n[![docs.rs](https://img.shields.io/docsrs/ngdp-client)](https://docs.rs/ngdp-client)\n\n\u003c/div\u003e\n\n## 🎯 Project Status\n\n**Current Version**: 0.4.3\n\n### Core Components\n\n| Component       | Version | Status      | Description                                        |\n| --------------- | ------- | ----------- | -------------------------------------------------- |\n| `ngdp-bpsv`     | 0.4.3   | ✅ Stable   | BPSV parser/writer for NGDP formats                |\n| `ribbit-client` | 0.4.3   | ✅ Stable   | Ribbit protocol client with signature verification |\n| `tact-client`   | 0.4.3   | ✅ Stable   | TACT HTTP client with retry logic and batching     |\n| `tact-parser`   | 0.4.3   | ✅ Stable   | TACT file format parser (encoding, install, etc.) |\n| `ngdp-cdn`      | 0.4.3   | ✅ Stable   | CDN client with fallback hosts and connection pooling |\n| `ngdp-cache`    | 0.4.3   | ✅ Stable   | Comprehensive caching layer with LRU eviction     |\n| `blte`          | 0.4.3   | ✅ Stable   | BLTE decompression with memory pooling            |\n| `ngdp-crypto`   | 0.4.3   | ✅ Stable   | Modern encryption with Salsa20 and key service    |\n| `ngdp-client`   | 0.4.3   | ✅ Stable   | CLI tool for NGDP operations                      |\n| `casc-storage`  | 0.4.3   | 🚧 Beta     | CASC storage implementation (in development)      |\n| `ngdp-patch`    | 0.4.3   | 🚧 Beta     | Patch file support (in development)               |\n\n### Implementation Progress\n\n- ✅ **Version Discovery**: HTTP-first approach with HTTPS endpoints, Ribbit fallback\n  for compatibility\n- ✅ **TACT Protocol**: HTTP/HTTPS clients for version and CDN queries with retry\n  logic\n- ✅ **BPSV Format**: Parser and builder with zero-copy optimizations\n- ✅ **TACT Parsers**: Support for encoding, install, download, size, build config,\n  TVFS\n- ✅ **BLTE Decompression**: Compression modes (ARC4/Frame deprecated in v0.4.0)\n- ✅ **Encryption**: Salsa20 cipher with key management (ARC4 deprecated)\n- ✅ **CDN Operations**: Parallel downloads, streaming, retry logic, rate limiting\n- ✅ **Caching**: HTTP-first caching with fallbacks and TTL support\n- ✅ **Install Command**: Client installation with .build.info generation for restoration\n- ✅ **Build Config**: Uncompressed handling and download order (encoding before manifests)\n- 🚧 **CASC Storage**: Local storage implementation (in development)\n- 🔄 **TVFS**: Parser implemented, needs real-world data testing\n\n## 🚀 Quick Start\n\n### Library Usage\n\nAdd to your `Cargo.toml`:\n\n```toml\n[dependencies]\nribbit-client = \"0.4.3\"\nngdp-bpsv = \"0.4.3\"\ntact-parser = \"0.4.3\"\nblte = \"0.4.3\"\nngdp-crypto = \"0.4.3\"\n```\n\nBasic example (HTTP-first approach):\n\n```rust\nuse ngdp_cache::hybrid_version_client::HybridVersionClient;\nuse ribbit_client::Region;\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    // Create a hybrid client (HTTP primary, Ribbit fallback)\n    let client = HybridVersionClient::new(Region::US).await?;\n\n    // Request WoW versions with HTTPS endpoints\n    let versions = client.get_product_versions(\"wow\").await?;\n\n    // Print version information\n    for entry in \u0026versions.entries {\n        println!(\n            \"{}: {} (build {})\",\n            entry.region, entry.versions_name, entry.build_id\n        );\n    }\n\n    Ok(())\n}\n```\n\n## 🧪 Testing with Real WoW Data\n\nMany tests and examples can work with real WoW installation data for comprehensive\ntesting. This is optional - all tests will skip gracefully if no data is available.\n\n### Setup Environment Variables\n\nSet environment variables pointing to your WoW installation Data directories:\n\n```bash\n# Classic Era (1.15.x)\nexport WOW_CLASSIC_ERA_DATA=\"$HOME/Downloads/wow/1.15.2.55140.windows-win64/Data\"\n\n# Classic with expansions\nexport WOW_CLASSIC_DATA=\"$HOME/Downloads/wow/classic/Data\"\n\n# Retail (current)\nexport WOW_RETAIL_DATA=\"$HOME/Downloads/wow/retail/Data\"\n```\n\n### Valid Data Directory Structure\n\nThe Data directory should contain CASC structure:\n\n```\nData/\n├── data/          # CASC archive files (required)\n├── indices/       # CASC index files\n├── config/        # CASC configuration files\n└── ...\n```\n\n### Running Tests with Real Data\n\n```bash\n# Run all tests (will skip those requiring WoW data if not available)\ncargo test\n\n# Run specific integration tests\ncargo test -p casc-storage --test real_data_integration\n\n# Run examples that use real data\ncargo run -p casc-storage --example list_casc_files\n```\n\nTests and examples will automatically:\n\n- Use environment variables when available\n- Fall back to common installation paths\n- Skip gracefully with helpful setup instructions if no data found\n- Work in CI environments without WoW data\n\n## 📦 Installation\n\n### CLI Tool\n\n#### Install with Cargo\n\n```bash\ncargo install ngdp-client\n```\n\n#### Install with Script (Unix/Linux/macOS)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/wowemulation-dev/cascette-rs/main/install.sh | bash\n```\n\n#### Install with Script (Windows PowerShell)\n\n```powershell\nirm https://raw.githubusercontent.com/wowemulation-dev/cascette-rs/main/install.ps1 | iex\n```\n\n### Library Usage\n\n```bash\ncargo add ribbit-client ngdp-bpsv tact-client tact-parser ngdp-cdn ngdp-cache blte ngdp-crypto\n```\n\n### From source\n\n```bash\ngit clone https://github.com/wowemulation-dev/cascette-rs\ncd cascette-rs\ncargo build --release\n# CLI binary will be at target/release/ngdp\n```\n\n## 🖥️ CLI Usage\n\nThe `ngdp-client` provides a comprehensive command-line interface for NGDP operations:\n\n### Install Game Clients\n\n```bash\n# Install WoW Classic Era (minimal installation)\nngdp install game wow_classic_era --install-type minimal --path ./wow-client\n\n# Full installation with verification\nngdp install game wow --install-type full --verify --path ./wow-retail\n\n# Dry-run to see what would be installed\nngdp install game wow_classic --install-type minimal --dry-run --path ./test\n```\n\n### Version and CDN Information\n\n```bash\n# Query product versions (uses HTTPS endpoints)\nngdp query versions wow\n\n# Get CDN configuration\nngdp query cdns wow\n\n# Inspect build configurations\nngdp inspect build-config \u003chash\u003e\n```\n\n### BPSV and File Analysis\n\n```bash\n# Parse and display BPSV files\nngdp inspect bpsv ./file.bpsv\n\n# Analyze BLTE files\nngdp inspect blte ./encrypted.blte\n```\n\nAll commands support multiple output formats (`--format json|text|bpsv`) and the install command automatically creates `.build.info` files for client restoration.\n\n## 📚 Documentation\n\n- [BPSV Format Specification](docs/bpsv-format.md)\n- [BPSV Examples](ngdp-bpsv/examples)\n- [Ribbit Protocol](docs/ribbit-protocol.md)\n- [Ribbit Examples](ribbit-client/examples)\n- [TACT Protocol](docs/tact-protocol.md)\n\n## 📚 Online References\n\n- [TACT Reference](https://wowdev.wiki/TACT)\n- [Ribbit Reference](https://wowdev.wiki/Ribbit)\n- [CASC Reference](https://wowdev.wiki/CASC)\n\n## 🔧 Features\n\n### Complete\n\n- **BPSV Parser/Writer** (`ngdp-bpsv`)\n  - ✅ BPSV format support with zero-copy parsing\n  - ✅ Type-safe field definitions (STRING, HEX, DEC)\n  - ✅ Schema validation and sequence number handling\n  - ✅ Builder pattern for document creation\n  - ✅ Round-trip compatibility\n\n- **Ribbit Protocol Client** (`ribbit-client`)\n  - ✅ Blizzard regions (US, EU, CN, KR, TW, SG)\n  - ✅ V1 (MIME) and V2 (raw) protocol support\n  - ✅ Typed API for all endpoints\n  - ✅ PKCS#7/CMS signature verification\n  - ✅ Certificate and OCSP support\n  - ✅ Retry with exponential backoff\n  - ✅ DNS caching for performance\n\n- **TACT HTTP Client** (`tact-client`)\n  - ✅ Version and CDN configuration queries\n  - ✅ Support for V1 (port 1119) and V2 (HTTPS) protocols\n  - ✅ Typed response parsing\n  - ✅ Retry handling\n  - ✅ Blizzard regions supported\n\n- **CDN Content Delivery** (`ngdp-cdn`)\n  - ✅ Parallel downloads with progress tracking\n  - ✅ Streaming operations for large files\n  - ✅ Retry with rate limit handling\n  - ✅ Content verification\n  - ✅ Configurable connection pooling\n  - ✅ Fallback to backup CDN servers\n  - ✅ Support for community mirrors (arctium.tools, reliquaryhq.com)\n\n- **Caching Layer** (`ngdp-cache`)\n  - ✅ Transparent caching for all NGDP operations\n  - ✅ TTL-based expiration policies\n  - ✅ Streaming I/O for memory efficiency\n  - ✅ CDN-compatible directory structure\n  - ✅ Batch operations for performance\n\n- **TACT File Parsers** (`tact-parser`)\n  - ✅ Encoding files (CKey ↔ EKey mapping)\n  - ✅ Install manifests with tag-based filtering\n  - ✅ Download manifests with priority sorting\n  - ✅ Size files for installation calculations\n  - ✅ Build configurations (key-value format)\n  - ✅ TVFS (TACT Virtual File System)\n  - ✅ 40-bit integer and varint support\n\n- **BLTE Decompression** (`blte`)\n  - ✅ Compression modes (None, ZLib, LZ4, Frame, Encrypted)\n  - ✅ Multi-chunk file support\n  - ✅ Checksum verification\n  - ✅ Integration with ngdp-crypto for encrypted blocks\n  - ✅ Memory processing\n\n- **Encryption Support** (`ngdp-crypto`)\n  - ✅ Salsa20 stream cipher (WoW encryption)\n  - ✅ ARC4/RC4 cipher (legacy content)\n  - ✅ Key management and loading\n  - ✅ Multiple key file formats (CSV, TXT, TSV)\n  - ✅ TACTKeys repository integration\n\n- **CLI Tool** (`ngdp-client`)\n  - ✅ Product queries and version information\n  - ✅ Certificate operations\n  - ✅ BPSV inspection and build config analysis\n  - ✅ Encryption key management commands\n  - ✅ Inspect commands with BLTE support\n  - ✅ Multiple output formats (text, JSON, BPSV)\n  - ✅ Terminal formatting\n\n## 🤝 Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\nSpecial thanks to the WoW emulation community and the documentation efforts at\n[wowdev.wiki](https://wowdev.wiki).\n\n## 📄 License\n\nThis project is dual-licensed under either:\n\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003chttp://opensource.org/licenses/MIT\u003e)\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\n---\n\n**Note**: This project is not affiliated with or endorsed by Blizzard Entertainment.\nIt is an independent implementation based on reverse engineering efforts by the\ncommunity for educational and preservation purposes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwowemulation-dev%2Fcascette-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwowemulation-dev%2Fcascette-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwowemulation-dev%2Fcascette-rs/lists"}