# deamon87/tactcpp architecture

> Architecture diagram of the GitHub repository deamon87/tactcpp, 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/deamon87/tactcpp
- Repository: https://github.com/deamon87/tactcpp

## Overview

TACTCpp is a C++ library and CLI for loading WoW CASC data and extracting game files by name, ID, content key, or encoding key. The CLI parses requests and delegates file resolution to a loaded BuildInstance; the library resolves manifests and indexes to content, obtains bytes from local or online sources, and decodes them for extraction. The graph preserves the documented online/local and name/ID/key capabilities. Several relationships are based on README or import references; unsampled implementation details are omitted rather than assumed.

Main entry points: [`TactCppLib/BuildInstance.cpp`](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/BuildInstance.cpp) (Build instance), [`TactCppLib/CDN.cpp`](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/CDN.cpp) (CDN and local access), [`TactCppLib/RootInstance.cpp`](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/RootInstance.cpp) (Root manifest), [`src/main.cpp`](https://github.com/deamon87/tactcpp/blob/main/src/main.cpp) (TACTTool CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI extraction"]
  node_tool["TACTTool CLI<br/>[main.cpp]"]
  node_dump["Dump tool<br/>[dumptool.cpp]"]
end

subgraph group_build["Build resolution"]
  node_build_instance["Build instance<br/>[BuildInstance.cpp]"]
  node_settings["Settings<br/>[Settings.cpp]"]
  node_configs["Build and CDN configs<br/>[BuildInfo.h]"]
  node_encoding["Encoding lookup"]
  node_root["Root manifest<br/>[RootInstance.cpp]"]
  node_install["Install manifest"]
  node_listfile["Listfile lookup<br/>[ListFile.cpp]"]
  node_indexes["CASC indexes<br/>[GroupIndex.cpp]"]
end

subgraph group_content["Content access"]
  node_cdn["CDN and local access<br/>[CDN.cpp]"]
  node_file_cache[("File cache<br/>[FileCache.cpp]")]
  node_mapped_file["Memory-mapped files"]
  node_blte["BLTE decoding<br/>[BLTE.cpp]"]
end

subgraph group_internals["Parsing and crypto"]
  node_data_reader["Binary reader<br/>[DataReader.h]"]
  node_crypto["Key and Salsa crypto<br/>[KeyService.cpp]"]
  node_config_parser["TACT config parser"]
end

node_user(("CLI user"))
node_files(("Extracted files"))
node_cdn_service(("Blizzard CDN"))

node_user -->|"selects mode"| node_tool
node_tool -->|"loads build"| node_build_instance
node_tool -->|"writes extraction"| node_files
node_tool -.-> node_dump
node_build_instance -->|"uses settings"| node_settings
node_build_instance -->|"loads configs"| node_configs
node_build_instance -->|"loads indexes"| node_indexes
node_build_instance -->|"loads encoding"| node_encoding
node_build_instance -->|"loads root"| node_root
node_build_instance -->|"loads install"| node_install
node_build_instance -->|"loads optionally"| node_listfile
node_build_instance -.->|"requests content"| node_cdn
node_build_instance -->|"resolves names and IDs"| node_root
node_build_instance -->|"looks up content keys"| node_encoding
node_install -->|"name fallback"| node_root
node_indexes -->|"uses CDN index"| node_cdn
node_cdn -->|"downloads files"| node_cdn_service
node_cdn -->|"uses cache"| node_file_cache
node_encoding -->|"reads mapped data"| node_mapped_file
node_root -->|"uses names"| node_listfile
node_root -->|"parses records"| node_data_reader
node_encoding -->|"parses records"| node_data_reader
node_indexes -->|"parses records"| node_data_reader
node_cdn -.->|"decodes content"| node_blte
node_blte -->|"uses decryption keys"| node_crypto
node_blte -->|"reads blocks"| node_data_reader
node_build_instance -->|"parses configs"| node_config_parser

click node_tool "https://github.com/deamon87/tactcpp/blob/main/src/main.cpp"
click node_dump "https://github.com/deamon87/tactcpp/blob/main/src/dumptool.cpp"
click node_build_instance "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/BuildInstance.cpp"
click node_settings "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/Settings.cpp"
click node_configs "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/BuildInfo.h"
click node_encoding "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/EncodingInstance.cpp"
click node_root "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/RootInstance.cpp"
click node_install "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/InstallInstance.cpp"
click node_listfile "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/ListFile.cpp"
click node_indexes "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/GroupIndex.cpp"
click node_cdn "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/CDN.cpp"
click node_file_cache "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/FileCache.cpp"
click node_mapped_file "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/MemoryMappedFile.cpp"
click node_blte "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/BLTE.cpp"
click node_data_reader "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/utils/DataReader.h"
click node_crypto "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/utils/KeyService.cpp"
click node_config_parser "https://github.com/deamon87/tactcpp/blob/main/TactCppLib/utils/TactConfigParser.cpp"

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_dump,node_user toneBlue
class node_build_instance,node_settings,node_configs,node_encoding,node_root,node_install,node_listfile,node_indexes toneAmber
class node_cdn,node_file_cache,node_mapped_file,node_blte toneMint
class node_data_reader,node_crypto,node_config_parser toneRose
class node_files,node_cdn_service toneIndigo
```

## Components

### CLI extraction

- [TACTTool CLI](https://github.com/deamon87/tactcpp/blob/main/src/main.cpp): `src/main.cpp`
- [Dump tool](https://github.com/deamon87/tactcpp/blob/main/src/dumptool.cpp): `src/dumptool.cpp`

### Build resolution

- [Build instance](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/BuildInstance.cpp): `TactCppLib/BuildInstance.cpp`
- [Settings](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/Settings.cpp): `TactCppLib/Settings.cpp`
- [Build and CDN configs](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/BuildInfo.h): `TactCppLib/BuildInfo.h`
- [Encoding lookup](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/EncodingInstance.cpp): `TactCppLib/EncodingInstance.cpp`
- [Root manifest](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/RootInstance.cpp): `TactCppLib/RootInstance.cpp`
- [Install manifest](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/InstallInstance.cpp): `TactCppLib/InstallInstance.cpp`
- [Listfile lookup](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/ListFile.cpp): `TactCppLib/ListFile.cpp`
- [CASC indexes](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/GroupIndex.cpp): `TactCppLib/GroupIndex.cpp`

### Content access

- [CDN and local access](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/CDN.cpp): `TactCppLib/CDN.cpp`
- [File cache](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/FileCache.cpp): `TactCppLib/FileCache.cpp`
- [Memory-mapped files](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/MemoryMappedFile.cpp): `TactCppLib/MemoryMappedFile.cpp`
- [BLTE decoding](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/BLTE.cpp): `TactCppLib/BLTE.cpp`

### Parsing and crypto

- [Binary reader](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/utils/DataReader.h): `TactCppLib/utils/DataReader.h`
- [Key and Salsa crypto](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/utils/KeyService.cpp): `TactCppLib/utils/KeyService.cpp`
- [TACT config parser](https://github.com/deamon87/tactcpp/blob/main/TactCppLib/utils/TactConfigParser.cpp): `TactCppLib/utils/TactConfigParser.cpp`

### Other components

- **CLI user**
- **Extracted files**
- **Blizzard CDN**

## Connections

- CLI user → TACTTool CLI: selects mode
- TACTTool CLI → Build instance: loads build
- TACTTool CLI → Extracted files: writes extraction
- TACTTool CLI → Dump tool
- Build instance → Settings: uses settings
- Build instance → Build and CDN configs: loads configs (evidence: `TactCppLib/BuildInstance.cpp`)
- Build instance → CASC indexes: loads indexes (evidence: `TactCppLib/BuildInstance.cpp`)
- Build instance → Encoding lookup: loads encoding
- Build instance → Root manifest: loads root (evidence: `TactCppLib/BuildInstance.cpp`)
- Build instance → Install manifest: loads install
- Build instance → Listfile lookup: loads optionally
- Build instance → CDN and local access: requests content
- Build instance → Root manifest: resolves names and IDs (evidence: `TactCppLib/BuildInstance.cpp`)
- Build instance → Encoding lookup: looks up content keys (evidence: `TactCppLib/BuildInstance.cpp`)
- Install manifest → Root manifest: name fallback
- CASC indexes → CDN and local access: uses CDN index
- CDN and local access → Blizzard CDN: downloads files
- CDN and local access → File cache: uses cache
- Encoding lookup → Memory-mapped files: reads mapped data
- Root manifest → Listfile lookup: uses names (evidence: `TactCppLib/RootInstance.cpp`)
- Root manifest → Binary reader: parses records (evidence: `TactCppLib/RootInstance.cpp`)
- Encoding lookup → Binary reader: parses records (evidence: `TactCppLib/EncodingInstance.cpp`)
- CASC indexes → Binary reader: parses records
- CDN and local access → BLTE decoding: decodes content
- BLTE decoding → Key and Salsa crypto: uses decryption keys (evidence: `TactCppLib/BLTE.cpp`)
- BLTE decoding → Binary reader: reads blocks (evidence: `TactCppLib/BLTE.cpp`)
- Build instance → TACT config parser: parses configs (evidence: `TactCppLib/BuildInstance.cpp`)
