# cottonindustries/steamkit-rs architecture

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

- Interactive diagram: https://gitdiagram.com/cottonindustries/steamkit-rs
- Repository: https://github.com/cottonindustries/steamkit-rs

## Overview

steamkit-rs is a Rust Steam-network client library, with companion protocol definitions and SteamKit tooling. The principal workflow is to configure and authenticate a client, discover a CM server, connect over a supported transport, exchange framed messages, and use handlers or other services such as the Web API and CDN. The graph also retains documented authentication, handler, and tooling capabilities. Many subsystem links are documented in the README but their implementation files were not sampled, so those links are dashed with no source evidence.

Main entry points: [`crates/steamkit/src/steam/steam_client/steam_client.rs`](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/steam_client.rs) (Steam Client), [`crates/steamkit/src/steam/cm_client.rs`](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/cm_client.rs) (CM Connection), [`crates/steamkit-tools/src/nethook`](https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit-tools/src/nethook) (Dump Analyzer), [`crates/steamkit/src/steam/steam_client/configuration/steam_configuration.rs`](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/configuration/steam_configuration.rs) (Client Configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Steam Client"]
  node_config["Client Configuration"]
  node_auth["Authentication"]
  node_steamclient["Steam Client<br/>[steam_client.rs]"]
  node_discovery["CM Discovery"]
  node_serverrecord["Server Records<br/>[server_record.rs]"]
end

subgraph group_protocol["Protocol Runtime"]
  node_cm["CM Connection<br/>[cm_client.rs]"]
  node_transports["Network Transports"]
  node_packet["Packet Parsing<br/>[packet_base.rs]"]
  node_messages["Client Messages<br/>[client_msg.rs]"]
  node_msgbase["Message Serialization<br/>[msg_base.rs]"]
  node_jobs["Async Jobs"]
  node_jobid["Job IDs<br/>[job_id.rs]"]
  node_protos["Protocol Definitions"]
end

subgraph group_services["Steam Services"]
  node_handlers["Steam Handlers"]
  node_webapi["Web API<br/>[web_api.rs]"]
  node_cdn["CDN Client<br/>[client.rs]"]
end

subgraph group_tooling["Capture Tooling"]
  node_nethook["NetHook DLL"]
  node_analyzer["Dump Analyzer"]
  node_body["Decoded Bodies<br/>[body.rs]"]
  node_renderer["Dump Renderer<br/>[render.rs]"]
end

node_user(("Application"))

node_user -.->|"configures"| node_config
node_user -.->|"authenticates"| node_auth
node_user -.->|"uses"| node_steamclient
node_config -.->|"configures"| node_steamclient
node_steamclient -->|"discovers servers"| node_discovery
node_discovery -->|"selects endpoint"| node_serverrecord
node_steamclient -->|"owns connection"| node_cm
node_cm -->|"connects over"| node_transports
node_cm -->|"dispatches packets"| node_packet
node_packet -->|"parses messages"| node_messages
node_messages -->|"uses serialization"| node_msgbase
node_steamclient -.->|"provides handlers"| node_handlers
node_steamclient -.->|"tracks requests"| node_jobs
node_jobs -->|"tracks by ID"| node_jobid
node_user -.->|"calls"| node_webapi
node_user -.->|"downloads depot data"| node_cdn
node_handlers -.->|"uses messages"| node_protos
node_nethook -.->|"provides traffic dumps"| node_analyzer
node_analyzer -->|"decodes bodies"| node_body
node_analyzer -->|"renders dumps"| node_renderer
node_renderer -->|"renders"| node_body

click node_config "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/configuration/steam_configuration.rs"
click node_auth "https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit/src/steam/authentication"
click node_steamclient "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/steam_client.rs"
click node_discovery "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/discovery/smart_cm_server_list.rs"
click node_serverrecord "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/discovery/server_record.rs"
click node_cm "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/cm_client.rs"
click node_transports "https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit/src/networking/steam3"
click node_packet "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/base/packet_base.rs"
click node_messages "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/base/client_msg.rs"
click node_msgbase "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/base/msg_base.rs"
click node_jobs "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/async_job_manager.rs"
click node_jobid "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/types/job_id.rs"
click node_handlers "https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit/src/steam/handlers"
click node_webapi "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/webapi/web_api.rs"
click node_cdn "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/cdn/client.rs"
click node_protos "https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit-protos/proto"
click node_nethook "https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit-nethook/src"
click node_analyzer "https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit-tools/src/nethook"
click node_body "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit-tools/src/nethook/body.rs"
click node_renderer "https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit-tools/src/nethook/render.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_config,node_auth,node_steamclient,node_discovery,node_serverrecord toneBlue
class node_cm,node_transports,node_packet,node_messages,node_msgbase,node_jobs,node_jobid,node_protos toneAmber
class node_handlers,node_webapi,node_cdn toneMint
class node_nethook,node_analyzer,node_body,node_renderer toneRose
class node_user toneIndigo
```

## Components

### Steam Client

- [Client Configuration](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/configuration/steam_configuration.rs): `crates/steamkit/src/steam/steam_client/configuration/steam_configuration.rs`
- [Authentication](https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit/src/steam/authentication): `crates/steamkit/src/steam/authentication`
- [Steam Client](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/steam_client.rs): `crates/steamkit/src/steam/steam_client/steam_client.rs`
- [CM Discovery](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/discovery/smart_cm_server_list.rs): `crates/steamkit/src/steam/discovery/smart_cm_server_list.rs`
- [Server Records](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/discovery/server_record.rs): `crates/steamkit/src/steam/discovery/server_record.rs`

### Protocol Runtime

- [CM Connection](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/cm_client.rs): `crates/steamkit/src/steam/cm_client.rs`
- [Network Transports](https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit/src/networking/steam3): `crates/steamkit/src/networking/steam3`
- [Packet Parsing](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/base/packet_base.rs): `crates/steamkit/src/base/packet_base.rs`
- [Client Messages](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/base/client_msg.rs): `crates/steamkit/src/base/client_msg.rs`
- [Message Serialization](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/base/msg_base.rs): `crates/steamkit/src/base/msg_base.rs`
- [Async Jobs](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/steam_client/async_job_manager.rs): `crates/steamkit/src/steam/steam_client/async_job_manager.rs`
- [Job IDs](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/types/job_id.rs): `crates/steamkit/src/types/job_id.rs`
- [Protocol Definitions](https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit-protos/proto): `crates/steamkit-protos/proto`

### Steam Services

- [Steam Handlers](https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit/src/steam/handlers): `crates/steamkit/src/steam/handlers`
- [Web API](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/webapi/web_api.rs): `crates/steamkit/src/steam/webapi/web_api.rs`
- [CDN Client](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit/src/steam/cdn/client.rs): `crates/steamkit/src/steam/cdn/client.rs`

### Capture Tooling

- [NetHook DLL](https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit-nethook/src): `crates/steamkit-nethook/src`
- [Dump Analyzer](https://github.com/cottonindustries/steamkit-rs/tree/main/crates/steamkit-tools/src/nethook): `crates/steamkit-tools/src/nethook`
- [Decoded Bodies](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit-tools/src/nethook/body.rs): `crates/steamkit-tools/src/nethook/body.rs`
- [Dump Renderer](https://github.com/cottonindustries/steamkit-rs/blob/main/crates/steamkit-tools/src/nethook/render.rs): `crates/steamkit-tools/src/nethook/render.rs`

### Other components

- **Application**

## Connections

- Application → Client Configuration: configures
- Application → Authentication: authenticates (evidence: `README.md`)
- Application → Steam Client: uses (evidence: `README.md`)
- Client Configuration → Steam Client: configures (evidence: `README.md`)
- Steam Client → CM Discovery: discovers servers (evidence: `crates/steamkit/src/steam/cm_client.rs`)
- CM Discovery → Server Records: selects endpoint (evidence: `crates/steamkit/src/steam/cm_client.rs`)
- Steam Client → CM Connection: owns connection (evidence: `crates/steamkit/src/steam/cm_client.rs`)
- CM Connection → Network Transports: connects over (evidence: `crates/steamkit/src/steam/cm_client.rs`)
- CM Connection → Packet Parsing: dispatches packets (evidence: `crates/steamkit/src/steam/cm_client.rs`)
- Packet Parsing → Client Messages: parses messages (evidence: `crates/steamkit/src/base/packet_base.rs`)
- Client Messages → Message Serialization: uses serialization (evidence: `crates/steamkit/src/base/client_msg.rs`)
- Steam Client → Steam Handlers: provides handlers (evidence: `README.md`)
- Steam Client → Async Jobs: tracks requests (evidence: `crates/steamkit/src/steam/steam_client/async_job_manager.rs`)
- Async Jobs → Job IDs: tracks by ID (evidence: `crates/steamkit/src/steam/steam_client/async_job_manager.rs`)
- Application → Web API: calls (evidence: `README.md`)
- Application → CDN Client: downloads depot data (evidence: `README.md`)
- Steam Handlers → Protocol Definitions: uses messages (evidence: `README.md`)
- NetHook DLL → Dump Analyzer: provides traffic dumps (evidence: `README.md`)
- Dump Analyzer → Decoded Bodies: decodes bodies (evidence: `crates/steamkit-tools/src/nethook/specializations/remote_client_steam.rs`)
- Dump Analyzer → Dump Renderer: renders dumps (evidence: `crates/steamkit-tools/src/nethook/render.rs`)
- Dump Renderer → Decoded Bodies: renders (evidence: `crates/steamkit-tools/src/nethook/render.rs`)
