# foxtale-group/vsmm architecture

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

- Interactive diagram: https://gitdiagram.com/foxtale-group/vsmm
- Repository: https://github.com/foxtale-group/vsmm

## Overview

VSMM is a desktop manager for Vintage Story mods. The main workflow is to configure game-data paths, scan installed mod archives, retrieve ModDB metadata, compare versions, and present mods for filtering or updates. Updates and GUI-added mods are handled through the loader and store; game-version and mod-directory discovery support compatibility checks and scanning. The README also documents add-mod and update-selection capabilities. The supplied tree omits the QML UI sources, so UI details and some screen-to-backend wiring cannot be verified; arrows below reflect sampled code and documented behavior.

Main entry points: [`src/App.cpp`](https://github.com/foxtale-group/vsmm/blob/main/src/App.cpp) (App and UI host), [`src/modloader/ModLoader.cpp`](https://github.com/foxtale-group/vsmm/blob/main/src/modloader/ModLoader.cpp) (Mod loader), [`src/modstore/ModStore.cpp`](https://github.com/foxtale-group/vsmm/blob/main/src/modstore/ModStore.cpp) (Mod store), [`src/gamemngr/GameMngr.cpp`](https://github.com/foxtale-group/vsmm/blob/main/src/gamemngr/GameMngr.cpp) (Game discovery)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_apphost["App and UI host<br/>[App.cpp]"]
  node_filter["Search and filtering"]
  node_list["Mod list model<br/>[ModListModel.cpp]"]
  node_images["Mod icon provider"]
end

subgraph group_discovery["Discovery and metadata"]
  node_loader["Mod loader<br/>[ModLoader.cpp]"]
  node_zip["Archive reading<br/>[ZipArchive.cpp]"]
end

subgraph group_management["Mod management"]
  node_store[("Mod store<br/>[ModStore.cpp]")]
  node_entry["Mod details and versions<br/>[ModEntry.cpp]"]
end

subgraph group_support["Configuration and services"]
  node_config["Settings<br/>[Config.cpp]"]
  node_game["Game discovery<br/>[GameMngr.cpp]"]
  node_http["HTTP client<br/>[HttpClient.cpp]"]
end

node_user(("User"))
node_gamefiles["Game data and executable"]
node_modfiles["Installed mod archives"]
node_moddb(("Vintage Story ModDB"))
node_modicon["Mod icons"]

node_user -->|"uses"| node_apphost
node_apphost -->|"loads settings"| node_config
node_apphost -->|"configures"| node_game
node_apphost -->|"configures"| node_store
node_apphost -->|"configures"| node_loader
node_apphost -->|"connects"| node_list
node_apphost -->|"connects"| node_filter
node_apphost -->|"registers"| node_images
node_config -->|"provides paths"| node_game
node_gamefiles -->|"reads settings and version"| node_game
node_game -->|"provides mod directories"| node_loader
node_modfiles -->|"scans archives"| node_loader
node_loader -->|"reads mod info"| node_zip
node_loader -->|"requests metadata and downloads"| node_http
node_http -->|"sends GET"| node_moddb
node_moddb -->|"returns data"| node_http
node_loader -->|"updates mod records"| node_store
node_store -->|"holds mod details"| node_entry
node_store -->|"dispatches update requests"| node_loader
node_store -->|"notifies changes"| node_list
node_list -->|"supplies mod list"| node_filter
node_images -->|"downloads icons"| node_http
node_images -->|"provides images"| node_modicon

click node_apphost "https://github.com/foxtale-group/vsmm/blob/main/src/App.cpp"
click node_filter "https://github.com/foxtale-group/vsmm/blob/main/src/modsortfiltermodel/ModSortFilterModel.cpp"
click node_list "https://github.com/foxtale-group/vsmm/blob/main/src/modlistmodel/ModListModel.cpp"
click node_config "https://github.com/foxtale-group/vsmm/blob/main/src/config/Config.cpp"
click node_game "https://github.com/foxtale-group/vsmm/blob/main/src/gamemngr/GameMngr.cpp"
click node_loader "https://github.com/foxtale-group/vsmm/blob/main/src/modloader/ModLoader.cpp"
click node_zip "https://github.com/foxtale-group/vsmm/blob/main/src/zip/ZipArchive.cpp"
click node_http "https://github.com/foxtale-group/vsmm/blob/main/src/httpclient/HttpClient.cpp"
click node_store "https://github.com/foxtale-group/vsmm/blob/main/src/modstore/ModStore.cpp"
click node_entry "https://github.com/foxtale-group/vsmm/blob/main/src/modentry/ModEntry.cpp"
click node_images "https://github.com/foxtale-group/vsmm/blob/main/src/imgprovider/ModImageProvider.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_apphost,node_filter,node_list,node_images,node_user toneBlue
class node_loader,node_zip toneAmber
class node_store,node_entry toneMint
class node_config,node_game,node_http toneRose
class node_gamefiles,node_modfiles,node_moddb,node_modicon toneIndigo
```

## Components

### Application

- [App and UI host](https://github.com/foxtale-group/vsmm/blob/main/src/App.cpp): `src/App.cpp`
- [Search and filtering](https://github.com/foxtale-group/vsmm/blob/main/src/modsortfiltermodel/ModSortFilterModel.cpp): `src/modsortfiltermodel/ModSortFilterModel.cpp`
- [Mod list model](https://github.com/foxtale-group/vsmm/blob/main/src/modlistmodel/ModListModel.cpp): `src/modlistmodel/ModListModel.cpp`
- [Mod icon provider](https://github.com/foxtale-group/vsmm/blob/main/src/imgprovider/ModImageProvider.cpp): `src/imgprovider/ModImageProvider.cpp`

### Discovery and metadata

- [Mod loader](https://github.com/foxtale-group/vsmm/blob/main/src/modloader/ModLoader.cpp): `src/modloader/ModLoader.cpp`
- [Archive reading](https://github.com/foxtale-group/vsmm/blob/main/src/zip/ZipArchive.cpp): `src/zip/ZipArchive.cpp`

### Mod management

- [Mod store](https://github.com/foxtale-group/vsmm/blob/main/src/modstore/ModStore.cpp): `src/modstore/ModStore.cpp`
- [Mod details and versions](https://github.com/foxtale-group/vsmm/blob/main/src/modentry/ModEntry.cpp): `src/modentry/ModEntry.cpp`

### Configuration and services

- [Settings](https://github.com/foxtale-group/vsmm/blob/main/src/config/Config.cpp): `src/config/Config.cpp`
- [Game discovery](https://github.com/foxtale-group/vsmm/blob/main/src/gamemngr/GameMngr.cpp): `src/gamemngr/GameMngr.cpp`
- [HTTP client](https://github.com/foxtale-group/vsmm/blob/main/src/httpclient/HttpClient.cpp): `src/httpclient/HttpClient.cpp`

### Other components

- **User**
- **Game data and executable**
- **Installed mod archives**
- **Vintage Story ModDB**
- **Mod icons**

## Connections

- User → App and UI host: uses
- App and UI host → Settings: loads settings
- App and UI host → Game discovery: configures
- App and UI host → Mod store: configures
- App and UI host → Mod loader: configures
- App and UI host → Mod list model: connects
- App and UI host → Search and filtering: connects
- App and UI host → Mod icon provider: registers
- Settings → Game discovery: provides paths
- Game data and executable → Game discovery: reads settings and version
- Game discovery → Mod loader: provides mod directories
- Installed mod archives → Mod loader: scans archives
- Mod loader → Archive reading: reads mod info
- Mod loader → HTTP client: requests metadata and downloads
- HTTP client → Vintage Story ModDB: sends GET
- Vintage Story ModDB → HTTP client: returns data
- Mod loader → Mod store: updates mod records
- Mod store → Mod details and versions: holds mod details
- Mod store → Mod loader: dispatches update requests
- Mod store → Mod list model: notifies changes
- Mod list model → Search and filtering: supplies mod list
- Mod icon provider → HTTP client: downloads icons
- Mod icon provider → Mod icons: provides images
