# wowdev/tactsharp architecture

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

- Interactive diagram: https://gitdiagram.com/wowdev/tactsharp
- Repository: https://github.com/wowdev/tactsharp

## Overview

TACTSharp is a WoW CASC/TACT library for loading local or online game data and extracting files; TACTTool exposes that capability as a CLI. The principal flow is CLI options and input selection, build/configuration loading, manifest or listfile lookup, content retrieval and decoding, then file output. The graph retains distinct manifest, index, CDN, and version-discovery stages. Edges reflect the excerpts, source index references, or README; several runtime details are unsampled, so uncertain links are omitted.

Main entry points: [`TACTSharp/Build.cs`](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Build.cs) (Build loader), [`TACTTool/Program.cs`](https://github.com/wowdev/tactsharp/blob/main/TACTTool/Program.cs) (TACTTool), [`TACTSharp/VersionServices/Ribbit.cs`](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/VersionServices/Ribbit.cs) (Ribbit service), [`TACTSharp/CDN.cs`](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/CDN.cs) (CDN access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["Extraction CLI"]
  node_tool["TACTTool<br/>[Program.cs]"]
  node_verify["Storage verify<br/>[Verify.cs]"]
end

subgraph group_build["Build and discovery"]
  node_settings["Build settings<br/>[Settings.cs]"]
  node_build_instance["Build loader<br/>[Build.cs]"]
  node_version_ribbit["Ribbit service<br/>[Ribbit.cs]"]
  node_version_channels["Channels service<br/>[TACTChannels.cs]"]
  node_config["Config parser<br/>[Config.cs]"]
  node_version_service["Version service API<br/>[IVersionService.cs]"]
end

subgraph group_lookup["Manifest and lookup"]
  node_encoding["Encoding table"]
  node_root["Root manifest<br/>[RootInstance.cs]"]
  node_tvfs["TVFS manifest<br/>[TVFSInstance.cs]"]
  node_install["Install manifest<br/>[InstallInstance.cs]"]
  node_listfile["Listfile names<br/>[Listfile.cs]"]
end

subgraph group_content["Content access"]
  node_cdn["CDN access<br/>[CDN.cs]"]
  node_group_index["Group index<br/>[GroupIndex.cs]"]
  node_index["Archive index<br/>[IndexInstance.cs]"]
  node_casc_index["CASC index"]
  node_blte["BLTE decoder<br/>[BLTE.cs]"]
  node_key_service["Key service<br/>[KeyService.cs]"]
end

node_user(("CLI user"))
node_version_host(("Battle.net version host"))
node_cdn_host(("CDN hosts"))
node_local_source[("Local data source")]
node_output["Extracted files"]

node_user -->|"provides options"| node_tool
node_tool -->|"sets options"| node_settings
node_tool -->|"loads build"| node_build_instance
node_tool -->|"queries version"| node_version_ribbit
node_build_instance -->|"reads settings"| node_settings
node_build_instance -->|"selects service"| node_version_ribbit
node_build_instance -->|"selects service"| node_version_channels
node_version_ribbit -->|"implements"| node_version_service
node_version_channels -->|"implements"| node_version_service
node_version_ribbit -->|"requests metadata"| node_version_host
node_version_channels -->|"requests catalog"| node_version_host
node_build_instance -->|"parses configs"| node_config
node_build_instance -->|"loads table"| node_encoding
node_build_instance -->|"loads manifest"| node_root
node_build_instance -->|"loads manifest"| node_tvfs
node_build_instance -->|"loads manifest"| node_install
node_build_instance -->|"loads index"| node_group_index
node_build_instance -->|"loads index"| node_index
node_tool -->|"resolves names"| node_listfile
node_tool -->|"looks up names"| node_install
node_tool -->|"looks up IDs"| node_root
node_tool -->|"requests file"| node_build_instance
node_cdn -->|"downloads content"| node_cdn_host
node_cdn -->|"reads cache"| node_local_source
node_cdn -->|"uses index"| node_casc_index
node_blte -->|"looks up keys"| node_key_service
node_tool -->|"writes extraction"| node_output
node_verify -->|"checks entries"| node_index
node_verify -->|"checks files"| node_local_source

click node_tool "https://github.com/wowdev/tactsharp/blob/main/TACTTool/Program.cs"
click node_verify "https://github.com/wowdev/tactsharp/blob/main/TACTTool/RunModes/Verify.cs"
click node_settings "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Settings.cs"
click node_build_instance "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Build.cs"
click node_version_ribbit "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/VersionServices/Ribbit.cs"
click node_version_channels "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/VersionServices/TACTChannels.cs"
click node_config "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Config.cs"
click node_cdn "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/CDN.cs"
click node_encoding "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/EncodingInstance.cs"
click node_root "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/RootInstance.cs"
click node_tvfs "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/TVFSInstance.cs"
click node_install "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/InstallInstance.cs"
click node_listfile "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Listfile.cs"
click node_group_index "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/GroupIndex.cs"
click node_index "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/IndexInstance.cs"
click node_casc_index "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/CASCIndexInstance.cs"
click node_blte "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/BLTE.cs"
click node_key_service "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Utils/KeyService.cs"
click node_version_service "https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Interfaces/IVersionService.cs"

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_tool,node_verify,node_user toneBlue
class node_settings,node_build_instance,node_version_ribbit,node_version_channels,node_config,node_version_service,node_local_source toneAmber
class node_encoding,node_root,node_tvfs,node_install,node_listfile toneMint
class node_cdn,node_group_index,node_index,node_casc_index,node_blte,node_key_service toneRose
class node_version_host,node_cdn_host,node_output toneIndigo
```

## Components

### Extraction CLI

- [TACTTool](https://github.com/wowdev/tactsharp/blob/main/TACTTool/Program.cs): `TACTTool/Program.cs`
- [Storage verify](https://github.com/wowdev/tactsharp/blob/main/TACTTool/RunModes/Verify.cs): `TACTTool/RunModes/Verify.cs`

### Build and discovery

- [Build settings](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Settings.cs): `TACTSharp/Settings.cs`
- [Build loader](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Build.cs): `TACTSharp/Build.cs`
- [Ribbit service](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/VersionServices/Ribbit.cs): `TACTSharp/VersionServices/Ribbit.cs`
- [Channels service](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/VersionServices/TACTChannels.cs): `TACTSharp/VersionServices/TACTChannels.cs`
- [Config parser](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Config.cs): `TACTSharp/Config.cs`
- [Version service API](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Interfaces/IVersionService.cs): `TACTSharp/Interfaces/IVersionService.cs`

### Manifest and lookup

- [Encoding table](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/EncodingInstance.cs): `TACTSharp/EncodingInstance.cs`
- [Root manifest](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/RootInstance.cs): `TACTSharp/RootInstance.cs`
- [TVFS manifest](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/TVFSInstance.cs): `TACTSharp/TVFSInstance.cs`
- [Install manifest](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/InstallInstance.cs): `TACTSharp/InstallInstance.cs`
- [Listfile names](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Listfile.cs): `TACTSharp/Listfile.cs`

### Content access

- [CDN access](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/CDN.cs): `TACTSharp/CDN.cs`
- [Group index](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/GroupIndex.cs): `TACTSharp/GroupIndex.cs`
- [Archive index](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/IndexInstance.cs): `TACTSharp/IndexInstance.cs`
- [CASC index](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/CASCIndexInstance.cs): `TACTSharp/CASCIndexInstance.cs`
- [BLTE decoder](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/BLTE.cs): `TACTSharp/BLTE.cs`
- [Key service](https://github.com/wowdev/tactsharp/blob/main/TACTSharp/Utils/KeyService.cs): `TACTSharp/Utils/KeyService.cs`

### Other components

- **CLI user**
- **Battle.net version host**
- **CDN hosts**
- **Local data source**
- **Extracted files**

## Connections

- CLI user → TACTTool: provides options (evidence: `README.md`)
- TACTTool → Build settings: sets options (evidence: `TACTTool/Program.cs`)
- TACTTool → Build loader: loads build (evidence: `TACTTool/Program.cs`)
- TACTTool → Ribbit service: queries version (evidence: `TACTTool/Program.cs`)
- Build loader → Build settings: reads settings (evidence: `TACTSharp/Build.cs`)
- Build loader → Ribbit service: selects service (evidence: `TACTSharp/Build.cs`)
- Build loader → Channels service: selects service (evidence: `TACTSharp/Build.cs`)
- Ribbit service → Version service API: implements (evidence: `TACTSharp/VersionServices/Ribbit.cs`)
- Channels service → Version service API: implements (evidence: `TACTSharp/VersionServices/TACTChannels.cs`)
- Ribbit service → Battle.net version host: requests metadata (evidence: `TACTSharp/VersionServices/Ribbit.cs`)
- Channels service → Battle.net version host: requests catalog (evidence: `TACTSharp/VersionServices/TACTChannels.cs`)
- Build loader → Config parser: parses configs (evidence: `TACTSharp/Build.cs`)
- Build loader → Encoding table: loads table (evidence: `TACTSharp/Build.cs`)
- Build loader → Root manifest: loads manifest (evidence: `TACTSharp/Build.cs`)
- Build loader → TVFS manifest: loads manifest (evidence: `TACTSharp/Build.cs`)
- Build loader → Install manifest: loads manifest (evidence: `TACTSharp/Build.cs`)
- Build loader → Group index: loads index (evidence: `TACTSharp/Build.cs`)
- Build loader → Archive index: loads index (evidence: `TACTSharp/Build.cs`)
- TACTTool → Listfile names: resolves names (evidence: `TACTTool/Program.cs`)
- TACTTool → Install manifest: looks up names (evidence: `README.md`)
- TACTTool → Root manifest: looks up IDs (evidence: `README.md`)
- TACTTool → Build loader: requests file (evidence: `README.md`)
- CDN access → CDN hosts: downloads content (evidence: `TACTSharp/CDN.cs`)
- CDN access → Local data source: reads cache (evidence: `TACTSharp/CDN.cs`)
- CDN access → CASC index: uses index (evidence: `TACTSharp/CDN.cs`)
- BLTE decoder → Key service: looks up keys (evidence: `TACTSharp/BLTE.cs`)
- TACTTool → Extracted files: writes extraction (evidence: `README.md`)
- Storage verify → Archive index: checks entries (evidence: `TACTTool/RunModes/Verify.cs`)
- Storage verify → Local data source: checks files (evidence: `TACTTool/RunModes/Verify.cs`)
