# rommapp/argosy-launcher architecture

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

- Interactive diagram: https://gitdiagram.com/rommapp/argosy-launcher
- Repository: https://github.com/rommapp/argosy-launcher

## Overview

Argosy is a gamepad-first Android launcher for retro-gaming handhelds. Its main user journey is browsing a local or RomM-synced game library, obtaining missing ROMs, and launching a game through a detected or configured emulator. Supporting branches cover saves, achievements, collections, media, Steam, and online play. The tree and README establish these capabilities; the sampled excerpts are partial, so uncertain connections between unsampled modules are omitted.

Main entry points: [`app/src/main/kotlin/com/nendo/argosy/MainActivity.kt`](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/MainActivity.kt) (Main activity), [`app/src/main/kotlin/com/nendo/argosy/data/emulator/GameLauncher.kt`](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/emulator/GameLauncher.kt) (Game launch), [`app/src/main/kotlin/com/nendo/argosy/data/local/ALauncherDatabase.kt`](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/ALauncherDatabase.kt) (Local game and media data), [`app/src/main/kotlin/com/nendo/argosy/data/remote/romm/RomMLibrarySyncService.kt`](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/remote/romm/RomMLibrarySyncService.kt) (RomM library sync)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Launcher experience"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_input["Controller input"]
  node_prefs["Preferences"]
end

subgraph group_library["Library and sync"]
  node_romm_sync["RomM library sync"]
  node_jellyfin_sync["Jellyfin library sync"]
  node_db[("Local game and media data")]
  node_collections["Collections and library views<br/>[CollectionDao.kt]"]
  node_cache["Image cache"]
  node_downloads["ROM and media downloads<br/>[DownloadManager.kt]"]
end

subgraph group_play["Game play"]
  node_emulators["Emulator detection and config"]
  node_launcher["Game launch<br/>[GameLauncher.kt]"]
  node_session["Play session and saves"]
end

subgraph group_connect["Connected services"]
  node_save_sync[("Save sync state<br/>[SaveSyncDao.kt]")]
  node_achievements[("Achievements<br/>[AchievementDao.kt]")]
  node_netplay["Netplay join"]
  node_social["Social service"]
  node_steam["Steam integration<br/>[SteamService.kt]"]
end

subgraph group_platform["App services"]
  node_updater["In-app updater"]
end

node_user(("Player"))
node_romm["RomM server"]
node_jellyfin["Jellyfin server"]
node_emulator_app["Installed emulator"]
node_android["Android package installer"]

node_user -->|"uses"| node_activity
node_activity -->|"handles input"| node_input
node_activity -->|"reads settings"| node_prefs
node_romm_sync -->|"syncs library"| node_romm
node_romm_sync -->|"updates games"| node_db
node_romm_sync -->|"marks cache dirty"| node_cache
node_jellyfin_sync -->|"fetches library"| node_jellyfin
node_jellyfin_sync -->|"persists media"| node_db
node_activity -->|"browses library"| node_db
node_activity -->|"organizes games"| node_collections
node_activity -->|"requests downloads"| node_downloads
node_downloads -->|"downloads files"| node_romm
node_activity -->|"launches game"| node_launcher
node_launcher -->|"resolves emulator"| node_emulators
node_launcher -->|"starts game"| node_emulator_app
node_session -->|"tracks save state"| node_save_sync
node_netplay -->|"obtains game files"| node_downloads
node_netplay -->|"starts matched game"| node_launcher
node_steam -->|"indexes games"| node_db
node_updater -->|"requests install"| node_android

click node_activity "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/MainActivity.kt"
click node_input "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/core/input/ControllerDetector.kt"
click node_prefs "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/preferences/AppPreferencesRepository.kt"
click node_romm_sync "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/remote/romm/RomMLibrarySyncService.kt"
click node_jellyfin_sync "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/remote/jellyfin/JellyfinLibrarySyncService.kt"
click node_db "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/ALauncherDatabase.kt"
click node_collections "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/dao/CollectionDao.kt"
click node_cache "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/cache/ImageCacheManager.kt"
click node_downloads "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/download/DownloadManager.kt"
click node_emulators "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/emulator/EmulatorResolver.kt"
click node_launcher "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/emulator/GameLauncher.kt"
click node_session "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/emulator/GameSessionService.kt"
click node_save_sync "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/dao/SaveSyncDao.kt"
click node_achievements "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/dao/AchievementDao.kt"
click node_netplay "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/netplay/NetplayJoinService.kt"
click node_social "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/social/ArgosSocialService.kt"
click node_steam "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/steam/SteamService.kt"
click node_updater "https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/update/ApkInstallManager.kt"

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_activity,node_input,node_prefs toneBlue
class node_romm_sync,node_jellyfin_sync,node_db,node_collections,node_cache,node_downloads toneAmber
class node_emulators,node_launcher,node_session,node_romm,node_jellyfin toneMint
class node_save_sync,node_achievements,node_netplay,node_social,node_steam toneRose
class node_updater,node_user,node_emulator_app,node_android toneIndigo
```

## Components

### Launcher experience

- [Main activity](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/MainActivity.kt): `app/src/main/kotlin/com/nendo/argosy/MainActivity.kt`
- [Controller input](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/core/input/ControllerDetector.kt): `app/src/main/kotlin/com/nendo/argosy/core/input/ControllerDetector.kt`
- [Preferences](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/preferences/AppPreferencesRepository.kt): `app/src/main/kotlin/com/nendo/argosy/data/preferences/AppPreferencesRepository.kt`

### Library and sync

- [RomM library sync](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/remote/romm/RomMLibrarySyncService.kt): `app/src/main/kotlin/com/nendo/argosy/data/remote/romm/RomMLibrarySyncService.kt`
- [Jellyfin library sync](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/remote/jellyfin/JellyfinLibrarySyncService.kt): `app/src/main/kotlin/com/nendo/argosy/data/remote/jellyfin/JellyfinLibrarySyncService.kt`
- [Local game and media data](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/ALauncherDatabase.kt): `app/src/main/kotlin/com/nendo/argosy/data/local/ALauncherDatabase.kt`
- [Collections and library views](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/dao/CollectionDao.kt): `app/src/main/kotlin/com/nendo/argosy/data/local/dao/CollectionDao.kt`
- [Image cache](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/cache/ImageCacheManager.kt): `app/src/main/kotlin/com/nendo/argosy/data/cache/ImageCacheManager.kt`
- [ROM and media downloads](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/download/DownloadManager.kt): `app/src/main/kotlin/com/nendo/argosy/data/download/DownloadManager.kt`

### Game play

- [Emulator detection and config](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/emulator/EmulatorResolver.kt): `app/src/main/kotlin/com/nendo/argosy/data/emulator/EmulatorResolver.kt`
- [Game launch](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/emulator/GameLauncher.kt): `app/src/main/kotlin/com/nendo/argosy/data/emulator/GameLauncher.kt`
- [Play session and saves](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/emulator/GameSessionService.kt): `app/src/main/kotlin/com/nendo/argosy/data/emulator/GameSessionService.kt`

### Connected services

- [Save sync state](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/dao/SaveSyncDao.kt): `app/src/main/kotlin/com/nendo/argosy/data/local/dao/SaveSyncDao.kt`
- [Achievements](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/local/dao/AchievementDao.kt): `app/src/main/kotlin/com/nendo/argosy/data/local/dao/AchievementDao.kt`
- [Netplay join](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/netplay/NetplayJoinService.kt): `app/src/main/kotlin/com/nendo/argosy/data/netplay/NetplayJoinService.kt`
- [Social service](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/social/ArgosSocialService.kt): `app/src/main/kotlin/com/nendo/argosy/data/social/ArgosSocialService.kt`
- [Steam integration](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/steam/SteamService.kt): `app/src/main/kotlin/com/nendo/argosy/data/steam/SteamService.kt`

### App services

- [In-app updater](https://github.com/rommapp/argosy-launcher/blob/main/app/src/main/kotlin/com/nendo/argosy/data/update/ApkInstallManager.kt): `app/src/main/kotlin/com/nendo/argosy/data/update/ApkInstallManager.kt`

### Other components

- **Player**
- **RomM server**
- **Jellyfin server**
- **Installed emulator**
- **Android package installer**

## Connections

- Player → Main activity: uses
- Main activity → Controller input: handles input
- Main activity → Preferences: reads settings
- RomM library sync → RomM server: syncs library
- RomM library sync → Local game and media data: updates games
- RomM library sync → Image cache: marks cache dirty
- Jellyfin library sync → Jellyfin server: fetches library
- Jellyfin library sync → Local game and media data: persists media
- Main activity → Local game and media data: browses library
- Main activity → Collections and library views: organizes games
- Main activity → ROM and media downloads: requests downloads
- ROM and media downloads → RomM server: downloads files
- Main activity → Game launch: launches game
- Game launch → Emulator detection and config: resolves emulator
- Game launch → Installed emulator: starts game
- Play session and saves → Save sync state: tracks save state
- Netplay join → ROM and media downloads: obtains game files
- Netplay join → Game launch: starts matched game
- Steam integration → Local game and media data: indexes games
- In-app updater → Android package installer: requests install
