# xenutheflock/quest-runner architecture

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

- Interactive diagram: https://gitdiagram.com/xenutheflock/quest-runner
- Repository: https://github.com/xenutheflock/quest-runner

## Overview

Quest Runner helps Linux users accrue Discord play-quest time by running an idle executable under a detectable game name. Users can search and launch games from the CLI or GUI, then inspect or stop running processes; the GUI also supports timed stops and opening Discord’s Quests page. The README documents game-list caching, native and Flatpak execution, and cleanup. Source excerpts only show the dummy executable, so the CLI and GUI links reflect documented behavior, not inspected implementation details.

Main entry points: [`src/quest`](https://github.com/xenutheflock/quest-runner/blob/main/src/quest) (CLI commands), [`src/quest-gui`](https://github.com/xenutheflock/quest-runner/blob/main/src/quest-gui) (GUI), [`src/dummy.c`](https://github.com/xenutheflock/quest-runner/blob/main/src/dummy.c) (Idle dummy)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_cli["CLI commands"]
  node_gui["GUI"]
end

subgraph group_runtime["Quest runtime"]
  node_catalog["Game catalog"]
  node_cache[("Catalog cache")]
  node_gamefiles[("Fake game files")]
  node_launcher["Process launcher"]
  node_dummy["Idle dummy<br/>[dummy.c]"]
  node_processcontrol["Process control"]
end

subgraph group_platform["Discord integration"]
  node_discordapi["Detectable-games API"]
  node_discordnative["Native Discord"]
  node_flatpak["Flatpak Discord"]
  node_flatpakenter["Flatpak entry"]
  node_quests["Discord Quests page"]
end

node_user(("User"))

node_user -->|"runs commands"| node_cli
node_user -->|"uses"| node_gui
node_cli -->|"searches"| node_catalog
node_gui -->|"searches"| node_catalog
node_catalog -->|"downloads list"| node_discordapi
node_catalog -->|"caches list"| node_cache
node_cli -->|"runs game"| node_launcher
node_gui -->|"runs game"| node_launcher
node_launcher -->|"copies dummy"| node_gamefiles
node_launcher -->|"starts"| node_dummy
node_cli -->|"checks or stops"| node_processcontrol
node_gui -->|"timed stop"| node_processcontrol
node_processcontrol -->|"stops"| node_dummy
node_cli -->|"cleans files"| node_gamefiles
node_discordnative -->|"detects process"| node_dummy
node_launcher -.->|"starts sandbox process"| node_flatpakenter
node_flatpakenter -.->|"enters sandbox"| node_flatpak
node_flatpak -.->|"detects process"| node_dummy
node_flatpakenter -.->|"uses sandbox files"| node_gamefiles
node_gui -->|"opens page"| node_quests

click node_cli "https://github.com/xenutheflock/quest-runner/blob/main/src/quest"
click node_gui "https://github.com/xenutheflock/quest-runner/blob/main/src/quest-gui"
click node_catalog "https://github.com/xenutheflock/quest-runner/blob/main/src/quest"
click node_launcher "https://github.com/xenutheflock/quest-runner/blob/main/src/quest"
click node_dummy "https://github.com/xenutheflock/quest-runner/blob/main/src/dummy.c"
click node_processcontrol "https://github.com/xenutheflock/quest-runner/blob/main/src/quest"
click node_flatpakenter "https://github.com/xenutheflock/quest-runner/blob/main/src/quest"

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_cli,node_gui,node_user toneBlue
class node_catalog,node_cache,node_gamefiles,node_launcher,node_dummy,node_processcontrol toneAmber
class node_discordapi,node_discordnative,node_flatpak,node_flatpakenter,node_quests toneMint
```

## Components

### User interfaces

- [CLI commands](https://github.com/xenutheflock/quest-runner/blob/main/src/quest): `src/quest`
- [GUI](https://github.com/xenutheflock/quest-runner/blob/main/src/quest-gui): `src/quest-gui`

### Quest runtime

- [Game catalog](https://github.com/xenutheflock/quest-runner/blob/main/src/quest): `src/quest`
- **Catalog cache**
- **Fake game files**
- [Process launcher](https://github.com/xenutheflock/quest-runner/blob/main/src/quest): `src/quest`
- [Idle dummy](https://github.com/xenutheflock/quest-runner/blob/main/src/dummy.c): `src/dummy.c`
- [Process control](https://github.com/xenutheflock/quest-runner/blob/main/src/quest): `src/quest`

### Discord integration

- **Detectable-games API**
- **Native Discord**
- **Flatpak Discord**
- [Flatpak entry](https://github.com/xenutheflock/quest-runner/blob/main/src/quest): `src/quest`
- **Discord Quests page**

### Other components

- **User**

## Connections

- User → CLI commands: runs commands
- User → GUI: uses
- CLI commands → Game catalog: searches
- GUI → Game catalog: searches
- Game catalog → Detectable-games API: downloads list
- Game catalog → Catalog cache: caches list
- CLI commands → Process launcher: runs game
- GUI → Process launcher: runs game
- Process launcher → Fake game files: copies dummy
- Process launcher → Idle dummy: starts
- CLI commands → Process control: checks or stops
- GUI → Process control: timed stop
- Process control → Idle dummy: stops
- CLI commands → Fake game files: cleans files
- Native Discord → Idle dummy: detects process
- Process launcher → Flatpak entry: starts sandbox process
- Flatpak entry → Flatpak Discord: enters sandbox
- Flatpak Discord → Idle dummy: detects process
- Flatpak entry → Fake game files: uses sandbox files
- GUI → Discord Quests page: opens page
