# manic-emu/manicemu architecture

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

## Overview

Manic EMU is an iOS retro-game emulator. The main user path is opening the app, importing or selecting a game, and launching gameplay; the app also provides library management, settings, skins and controls, saves, achievements, synchronization, and online play. The graph reflects documented capabilities and indexed source references. Several feature implementations were not sampled, so their connections are marked unverified rather than asserted as direct calls.

Main entry points: [`ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift`](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift) (Play Session), [`ManicEmu/ManicEmu/Sources/Business/Games/ViewControllers/GamesViewController.swift`](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Games/ViewControllers/GamesViewController.swift) (Game Library), [`ManicEmu/ManicEmu/Sources/Business/Import/ViewControllers/ImportViewController.swift`](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Import/ViewControllers/ImportViewController.swift) (Game Import), [`ManicEmu/ManicEmu/Sources/Business/Home/ViewControllers/HomeViewController.swift`](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Home/ViewControllers/HomeViewController.swift) (Home Navigation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App Navigation"]
  node_scene["Scene Lifecycle"]
  node_home["Home Navigation"]
end

subgraph group_library["Games and Import"]
  node_games["Game Library"]
  node_game["Game Records<br/>[Game.swift]"]
  node_import["Game Import"]
  node_providers["Import Providers"]
end

subgraph group_gameplay["Gameplay"]
  node_play["Play Session"]
  node_cores["Emulator Cores"]
  node_controls["Controls and Skins<br/>[Skin.swift]"]
  node_cheats["Cheat Codes"]
  node_history["Play History"]
end

subgraph group_state["Data and Settings"]
  node_database[("Local Database<br/>[Database.swift]")]
  node_settings["App Settings<br/>[Settings.swift]"]
  node_sync["File Sync"]
end

subgraph group_integrations["Connected Features"]
  node_achievements["Achievements"]
  node_online["Online Play"]
  node_airplay["AirPlay"]
  node_cloud["Cloud Import"]
end

node_user(("Player"))

node_user -.->|"opens app"| node_scene
node_scene -.->|"shows home"| node_home
node_home -->|"navigates to"| node_games
node_home -->|"navigates to"| node_import
node_user -.->|"selects files"| node_import
node_import -.->|"uses providers"| node_providers
node_user -.->|"selects game"| node_games
node_games -->|"reads library"| node_game
node_games -->|"queries records"| node_database
node_game -->|"starts session"| node_play
node_play -->|"dispatches emulation"| node_cores
node_play -->|"uses controls"| node_controls
node_play -->|"reads settings"| node_settings
node_play -.->|"reports progress"| node_achievements
node_play -.->|"supports sessions"| node_online
node_play -->|"mirrors display"| node_airplay
node_play -.->|"supports cheats"| node_cheats
node_play -.->|"records activity"| node_history
node_settings -.->|"persists preferences"| node_database
node_sync -.->|"syncs game data"| node_database
node_user -.->|"imports remotely"| node_cloud
node_cloud -.->|"provides files"| node_import

click node_scene "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Base/ApplicationSceneDelegate.swift"
click node_home "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Home/ViewControllers/HomeViewController.swift"
click node_games "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Games/ViewControllers/GamesViewController.swift"
click node_game "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Play/Models/Game.swift"
click node_import "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Import/ViewControllers/ImportViewController.swift"
click node_providers "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Import/Models/ImportService.swift"
click node_play "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift"
click node_cores "https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Tools/Cores"
click node_controls "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Play/Models/Skin.swift"
click node_cheats "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/CheatCode/Views/CheatCodeListView.swift"
click node_history "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/History/Views/PlayHistoryView.swift"
click node_database "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Tools/Others/Database.swift"
click node_settings "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Settings/Models/Settings.swift"
click node_sync "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Tools/Sync/FilesSyncEngine.swift"
click node_achievements "https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Business/RetroAchievements"
click node_online "https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Business/OnlinePlay"
click node_airplay "https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/AirPlay/ViewController/AirPlayViewController.swift"
click node_cloud "https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Business/Import/Models"

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_scene,node_home toneBlue
class node_games,node_game,node_import,node_providers toneAmber
class node_play,node_cores,node_controls,node_cheats,node_history toneMint
class node_database,node_settings,node_sync toneRose
class node_achievements,node_online,node_airplay,node_cloud,node_user toneIndigo
```

## Components

### App Navigation

- [Scene Lifecycle](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Base/ApplicationSceneDelegate.swift): `ManicEmu/ManicEmu/Sources/Base/ApplicationSceneDelegate.swift`
- [Home Navigation](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Home/ViewControllers/HomeViewController.swift): `ManicEmu/ManicEmu/Sources/Business/Home/ViewControllers/HomeViewController.swift`

### Games and Import

- [Game Library](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Games/ViewControllers/GamesViewController.swift): `ManicEmu/ManicEmu/Sources/Business/Games/ViewControllers/GamesViewController.swift`
- [Game Records](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Play/Models/Game.swift): `ManicEmu/ManicEmu/Sources/Business/Play/Models/Game.swift`
- [Game Import](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Import/ViewControllers/ImportViewController.swift): `ManicEmu/ManicEmu/Sources/Business/Import/ViewControllers/ImportViewController.swift`
- [Import Providers](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Import/Models/ImportService.swift): `ManicEmu/ManicEmu/Sources/Business/Import/Models/ImportService.swift`

### Gameplay

- [Play Session](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift): `ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift`
- [Emulator Cores](https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Tools/Cores): `ManicEmu/ManicEmu/Sources/Tools/Cores`
- [Controls and Skins](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Play/Models/Skin.swift): `ManicEmu/ManicEmu/Sources/Business/Play/Models/Skin.swift`
- [Cheat Codes](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/CheatCode/Views/CheatCodeListView.swift): `ManicEmu/ManicEmu/Sources/Business/CheatCode/Views/CheatCodeListView.swift`
- [Play History](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/History/Views/PlayHistoryView.swift): `ManicEmu/ManicEmu/Sources/Business/History/Views/PlayHistoryView.swift`

### Data and Settings

- [Local Database](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Tools/Others/Database.swift): `ManicEmu/ManicEmu/Sources/Tools/Others/Database.swift`
- [App Settings](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/Settings/Models/Settings.swift): `ManicEmu/ManicEmu/Sources/Business/Settings/Models/Settings.swift`
- [File Sync](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Tools/Sync/FilesSyncEngine.swift): `ManicEmu/ManicEmu/Sources/Tools/Sync/FilesSyncEngine.swift`

### Connected Features

- [Achievements](https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Business/RetroAchievements): `ManicEmu/ManicEmu/Sources/Business/RetroAchievements`
- [Online Play](https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Business/OnlinePlay): `ManicEmu/ManicEmu/Sources/Business/OnlinePlay`
- [AirPlay](https://github.com/manic-emu/manicemu/blob/main/ManicEmu/ManicEmu/Sources/Business/AirPlay/ViewController/AirPlayViewController.swift): `ManicEmu/ManicEmu/Sources/Business/AirPlay/ViewController/AirPlayViewController.swift`
- [Cloud Import](https://github.com/manic-emu/manicemu/tree/main/ManicEmu/ManicEmu/Sources/Business/Import/Models): `ManicEmu/ManicEmu/Sources/Business/Import/Models`

### Other components

- **Player**

## Connections

- Player → Scene Lifecycle: opens app (evidence: `README.md`)
- Scene Lifecycle → Home Navigation: shows home
- Home Navigation → Game Library: navigates to (evidence: `ManicEmu/ManicEmu/Sources/Business/Home/ViewControllers/HomeViewController.swift`)
- Home Navigation → Game Import: navigates to (evidence: `ManicEmu/ManicEmu/Sources/Business/Home/ViewControllers/HomeViewController.swift`)
- Player → Game Import: selects files (evidence: `README.md`)
- Game Import → Import Providers: uses providers
- Player → Game Library: selects game (evidence: `README.md`)
- Game Library → Game Records: reads library (evidence: `ManicEmu/ManicEmu/Sources/Business/Games/ViewControllers/GamesViewController.swift`)
- Game Library → Local Database: queries records (evidence: `ManicEmu/ManicEmu/Sources/Business/Games/ViewControllers/GamesViewController.swift`)
- Game Records → Play Session: starts session (evidence: `ManicEmu/ManicEmu/Sources/Business/Play/Models/Game.swift`)
- Play Session → Emulator Cores: dispatches emulation (evidence: `ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift`)
- Play Session → Controls and Skins: uses controls (evidence: `ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift`)
- Play Session → App Settings: reads settings (evidence: `ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift`)
- Play Session → Achievements: reports progress (evidence: `ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift`)
- Play Session → Online Play: supports sessions (evidence: `README.md`)
- Play Session → AirPlay: mirrors display (evidence: `ManicEmu/ManicEmu/Sources/Business/Play/VIewControllers/PlayViewController.swift`)
- Play Session → Cheat Codes: supports cheats (evidence: `README.md`)
- Play Session → Play History: records activity
- App Settings → Local Database: persists preferences (evidence: `ManicEmu/ManicEmu/Sources/Business/Settings/Models/Settings.swift`)
- File Sync → Local Database: syncs game data (evidence: `README.md`)
- Player → Cloud Import: imports remotely (evidence: `README.md`)
- Cloud Import → Game Import: provides files
