# awesomesk1ll/casc-browser architecture

> Architecture diagram of the GitHub repository awesomesk1ll/casc-browser, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/awesomesk1ll/casc-browser
- Repository: https://github.com/awesomesk1ll/casc-browser

## Overview

CASC Browser is a desktop explorer for Blizzard game assets. The user selects a game and region, then App creates CASCStorage, which discovers build/CDN configuration, loads VFS indexes and builds a browsable tree. FileBrowser supports navigation, search and recursive downloads; selecting a supported file opens previews, including image, text, audio/video and MDX model rendering. Frontend CDN requests use Tauri’s native HTTP commands, which also decode BLTE data for downloads and write results to disk. The README documents the connection and asset-resolution stages; unsampled service code limits detail on their internal calls.

Main entry points: [`src/App.tsx`](https://github.com/awesomesk1ll/casc-browser/blob/main/src/App.tsx) (App orchestration), [`src/components/FileBrowser.tsx`](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FileBrowser.tsx) (Browse and search), [`src/services/casc.ts`](https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts) (CASC connection), [`src/components/FilePreviewModal.tsx`](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FilePreviewModal.tsx) (File preview)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Desktop interface"]
  node_selector["Game and region"]
  node_app["App orchestration<br/>[App.tsx]"]
  node_status["Connection status<br/>[StatusBar.tsx]"]
  node_browser["Browse and search<br/>[FileBrowser.tsx]"]
  node_download["Download workflow<br/>[FileBrowser.tsx]"]
  node_preview["File preview"]
  node_renderers["Media and model rendering"]
end

subgraph group_casc["CASC asset access"]
  node_storage["CASC connection<br/>[casc.ts]"]
  node_discovery["Build config discovery<br/>[casc.ts]"]
  node_vfs["VFS tree assembly<br/>[casc.ts]"]
  node_resolution["Key and archive resolution<br/>[casc.ts]"]
end

subgraph group_native["Native services"]
  node_nativehttp["Native HTTP and BLTE<br/>[lib.rs]"]
  node_nativefiles["Native file writing<br/>[lib.rs]"]
end

subgraph group_external["External resources"]
  node_blizzard["Blizzard patch and CDN"]
end

node_user(("User"))
node_filesystem[("Local filesystem")]

node_user -->|"chooses game"| node_selector
node_selector -->|"requests connection"| node_app
node_app -->|"starts connection"| node_storage
node_app -->|"passes status"| node_status
node_app -->|"passes tree"| node_browser
node_storage -->|"loads configs"| node_discovery
node_discovery -->|"fetches versions"| node_blizzard
node_discovery -->|"loads VFS"| node_vfs
node_vfs -->|"provides tree"| node_browser
node_resolution -->|"resolves asset data"| node_blizzard
node_storage -->|"invokes fetch"| node_nativehttp
node_nativehttp -->|"requests CDN data"| node_blizzard
node_browser -->|"offers downloads"| node_download
node_download -->|"resolves file location"| node_resolution
node_download -->|"invokes download"| node_nativefiles
node_nativefiles -->|"fetches and decodes"| node_blizzard
node_nativefiles -->|"writes files"| node_filesystem
node_browser -->|"opens selected file"| node_preview
node_preview -->|"finds textures"| node_storage
node_preview -->|"decodes and renders"| node_renderers

click node_selector "https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/ProductSelector.tsx"
click node_app "https://github.com/awesomesk1ll/casc-browser/blob/main/src/App.tsx"
click node_status "https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/StatusBar.tsx"
click node_browser "https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FileBrowser.tsx"
click node_download "https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FileBrowser.tsx"
click node_preview "https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FilePreviewModal.tsx"
click node_renderers "https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FilePreviewModal.tsx"
click node_storage "https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts"
click node_discovery "https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts"
click node_vfs "https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts"
click node_resolution "https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts"
click node_nativehttp "https://github.com/awesomesk1ll/casc-browser/blob/main/src-tauri/src/lib.rs"
click node_nativefiles "https://github.com/awesomesk1ll/casc-browser/blob/main/src-tauri/src/lib.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_selector,node_app,node_status,node_browser,node_download,node_preview,node_renderers,node_user toneBlue
class node_storage,node_discovery,node_vfs,node_resolution,node_filesystem toneAmber
class node_nativehttp,node_nativefiles toneMint
class node_blizzard toneRose
```

## Components

### Desktop interface

- [Game and region](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/ProductSelector.tsx): `src/components/ProductSelector.tsx`
- [App orchestration](https://github.com/awesomesk1ll/casc-browser/blob/main/src/App.tsx): `src/App.tsx`
- [Connection status](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/StatusBar.tsx): `src/components/StatusBar.tsx`
- [Browse and search](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FileBrowser.tsx): `src/components/FileBrowser.tsx`
- [Download workflow](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FileBrowser.tsx): `src/components/FileBrowser.tsx`
- [File preview](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FilePreviewModal.tsx): `src/components/FilePreviewModal.tsx`
- [Media and model rendering](https://github.com/awesomesk1ll/casc-browser/blob/main/src/components/FilePreviewModal.tsx): `src/components/FilePreviewModal.tsx`

### CASC asset access

- [CASC connection](https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts): `src/services/casc.ts`
- [Build config discovery](https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts): `src/services/casc.ts`
- [VFS tree assembly](https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts): `src/services/casc.ts`
- [Key and archive resolution](https://github.com/awesomesk1ll/casc-browser/blob/main/src/services/casc.ts): `src/services/casc.ts`

### Native services

- [Native HTTP and BLTE](https://github.com/awesomesk1ll/casc-browser/blob/main/src-tauri/src/lib.rs): `src-tauri/src/lib.rs`
- [Native file writing](https://github.com/awesomesk1ll/casc-browser/blob/main/src-tauri/src/lib.rs): `src-tauri/src/lib.rs`

### External resources

- **Blizzard patch and CDN**

### Other components

- **User**
- **Local filesystem**

## Connections

- User → Game and region: chooses game (evidence: `README.md`)
- Game and region → App orchestration: requests connection (evidence: `src/App.tsx`)
- App orchestration → CASC connection: starts connection (evidence: `src/App.tsx`)
- App orchestration → Connection status: passes status (evidence: `src/App.tsx`)
- App orchestration → Browse and search: passes tree (evidence: `src/App.tsx`)
- CASC connection → Build config discovery: loads configs (evidence: `README.md`)
- Build config discovery → Blizzard patch and CDN: fetches versions (evidence: `README.md`)
- Build config discovery → VFS tree assembly: loads VFS (evidence: `README.md`)
- VFS tree assembly → Browse and search: provides tree (evidence: `README.md`)
- Key and archive resolution → Blizzard patch and CDN: resolves asset data (evidence: `README.md`)
- CASC connection → Native HTTP and BLTE: invokes fetch (evidence: `src/services/casc.ts`)
- Native HTTP and BLTE → Blizzard patch and CDN: requests CDN data (evidence: `README.md`)
- Browse and search → Download workflow: offers downloads (evidence: `src/components/FileBrowser.tsx`)
- Download workflow → Key and archive resolution: resolves file location (evidence: `src/components/FileBrowser.tsx`)
- Download workflow → Native file writing: invokes download (evidence: `src/components/FileBrowser.tsx`)
- Native file writing → Blizzard patch and CDN: fetches and decodes (evidence: `src-tauri/src/lib.rs`)
- Native file writing → Local filesystem: writes files (evidence: `src-tauri/src/lib.rs`)
- Browse and search → File preview: opens selected file (evidence: `src/components/FileBrowser.tsx`)
- File preview → CASC connection: finds textures (evidence: `src/components/FilePreviewModal.tsx`)
- File preview → Media and model rendering: decodes and renders (evidence: `src/components/FilePreviewModal.tsx`)
