# batocera-linux/batocera.linux architecture

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

- Interactive diagram: https://gitdiagram.com/batocera-linux/batocera.linux
- Repository: https://github.com/batocera-linux/batocera.linux

## Overview

Batocera Linux is a retro-gaming distribution that turns a computer or small device into a gaming console. The main runtime path is selecting a game and launching it through emulator-specific configuration and controller setup; the tree also shows system-management utilities and a bezel-overlay application. The README documents broad emulator support, but does not describe internal launch wiring. Arrows are limited to relationships supported by the excerpts or SOURCE INDEX; unverified workflow links are dashed.

Main entry points: [`python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py`](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py) (Libretro launcher), [`python-src/python-batocera-common/batocera_common/dataclasses.py`](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/python-batocera-common/batocera_common/dataclasses.py) (Shared data types), [`python-src/batocera-launch/batocera_launch/cli/main.py`](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/cli/main.py) (Launch CLI), [`python-src/batocera-es-system/batocera_es_system/registry.py`](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-es-system/batocera_es_system/registry.py) (System registry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_launch["Game launch"]
  node_cli["Launch CLI<br/>[main.py]"]
  node_arguments["CLI arguments<br/>[arguments.py]"]
  node_launchers["Emulator launchers"]
  node_libretro["Libretro launcher<br/>[emulator.py]"]
  node_libretro_core["Core selection<br/>[core.py]"]
  node_libretro_load["Core loading<br/>[load.py]"]
  node_linux_config["Linux-loader config<br/>[config.py]"]
end

subgraph group_support["Shared launch services"]
  node_config["Launch configuration<br/>[config.py]"]
  node_launch_paths["Launch paths<br/>[paths.py]"]
  node_common_paths["Runtime paths<br/>[paths.py]"]
  node_common_data["Shared data types<br/>[dataclasses.py]"]
  node_common_config["Config parser<br/>[configparser.py]"]
  node_async["Launch async<br/>[asyncio.py]"]
end

subgraph group_input["Input mapping"]
  node_dolphin_input["Dolphin controls<br/>[controllers.py]"]
  node_mame_input["MAME controls<br/>[controllers.py]"]
  node_retro_mame_input["Libretro MAME controls<br/>[controllers.py]"]
  node_linux_input["Linux-loader controls<br/>[controllers.py]"]
end

subgraph group_system["System applications"]
  node_hotkeys["Hotkey daemon<br/>[daemon.py]"]
  node_hotkey_types["Hotkey types<br/>[_types.py]"]
  node_dbus_common["Hotkey D-Bus types<br/>[common.py]"]
  node_overlay_app["Bezel overlay app<br/>[app.py]"]
  node_overlay["Overlay rendering<br/>[overlay.py]"]
  node_es_registry["System registry<br/>[registry.py]"]
end

node_player(("Player"))

node_player -.->|"starts game"| node_cli
node_cli -->|"parses"| node_arguments
node_cli -.->|"dispatches"| node_launchers
node_libretro -->|"selects core"| node_libretro_core
node_libretro -->|"loads core"| node_libretro_load
node_libretro -->|"uses paths"| node_launch_paths
node_libretro -->|"uses paths"| node_common_paths
node_libretro -->|"uses types"| node_common_data
node_linux_input -->|"configures"| node_linux_config
node_dolphin_input -->|"uses types"| node_common_data
node_mame_input -->|"uses types"| node_common_data
node_retro_mame_input -->|"uses types"| node_common_data
node_hotkeys -.->|"uses types"| node_hotkey_types
node_overlay_app -->|"creates overlay"| node_overlay
node_es_registry -->|"uses types"| node_common_data
node_es_registry -.->|"uses parser"| node_common_config

click node_cli "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/cli/main.py"
click node_arguments "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/cli/arguments.py"
click node_launchers "https://github.com/batocera-linux/batocera.linux/tree/master/python-src/batocera-launch/batocera_launch/emulators"
click node_libretro "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py"
click node_libretro_core "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro/batocera_launch_libretro/core.py"
click node_libretro_load "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro/batocera_launch_libretro/load.py"
click node_linux_config "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-linuxloader/batocera_launch_linuxloader/config.py"
click node_config "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/config/config.py"
click node_launch_paths "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/paths.py"
click node_common_paths "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/python-batocera-common/batocera_common/paths.py"
click node_common_data "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/python-batocera-common/batocera_common/dataclasses.py"
click node_common_config "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/python-batocera-common/batocera_common/configparser.py"
click node_async "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/asyncio.py"
click node_dolphin_input "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-dolphin/batocera_launch_dolphin/controllers.py"
click node_mame_input "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-mame/batocera_launch_mame/controllers.py"
click node_retro_mame_input "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro-mame/batocera_launch_libretro_mame/controllers.py"
click node_linux_input "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-linuxloader/batocera_launch_linuxloader/controllers.py"
click node_hotkeys "https://github.com/batocera-linux/batocera.linux/blob/master/package/batocera/utils/hotkeygen/hotkeygen/daemon.py"
click node_hotkey_types "https://github.com/batocera-linux/batocera.linux/blob/master/package/batocera/utils/hotkeygen/hotkeygen/_types.py"
click node_dbus_common "https://github.com/batocera-linux/batocera.linux/blob/master/package/batocera/utils/hotkeygen/hotkeygen/dbus/common.py"
click node_overlay_app "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-bezel-overlay/batocera_bezel_overlay/app.py"
click node_overlay "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-bezel-overlay/batocera_bezel_overlay/overlay.py"
click node_es_registry "https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-es-system/batocera_es_system/registry.py"

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_arguments,node_launchers,node_libretro,node_libretro_core,node_libretro_load,node_linux_config toneBlue
class node_config,node_launch_paths,node_common_paths,node_common_data,node_common_config,node_async toneAmber
class node_dolphin_input,node_mame_input,node_retro_mame_input,node_linux_input toneMint
class node_hotkeys,node_hotkey_types,node_dbus_common,node_overlay_app,node_overlay,node_es_registry toneRose
class node_player toneIndigo
```

## Components

### Game launch

- [Launch CLI](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/cli/main.py): `python-src/batocera-launch/batocera_launch/cli/main.py`
- [CLI arguments](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/cli/arguments.py): `python-src/batocera-launch/batocera_launch/cli/arguments.py`
- [Emulator launchers](https://github.com/batocera-linux/batocera.linux/tree/master/python-src/batocera-launch/batocera_launch/emulators): `python-src/batocera-launch/batocera_launch/emulators`
- [Libretro launcher](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py): `python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py`
- [Core selection](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro/batocera_launch_libretro/core.py): `python-src/batocera-launch-libretro/batocera_launch_libretro/core.py`
- [Core loading](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro/batocera_launch_libretro/load.py): `python-src/batocera-launch-libretro/batocera_launch_libretro/load.py`
- [Linux-loader config](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-linuxloader/batocera_launch_linuxloader/config.py): `python-src/batocera-launch-linuxloader/batocera_launch_linuxloader/config.py`

### Shared launch services

- [Launch configuration](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/config/config.py): `python-src/batocera-launch/batocera_launch/config/config.py`
- [Launch paths](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/paths.py): `python-src/batocera-launch/batocera_launch/paths.py`
- [Runtime paths](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/python-batocera-common/batocera_common/paths.py): `python-src/python-batocera-common/batocera_common/paths.py`
- [Shared data types](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/python-batocera-common/batocera_common/dataclasses.py): `python-src/python-batocera-common/batocera_common/dataclasses.py`
- [Config parser](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/python-batocera-common/batocera_common/configparser.py): `python-src/python-batocera-common/batocera_common/configparser.py`
- [Launch async](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch/batocera_launch/asyncio.py): `python-src/batocera-launch/batocera_launch/asyncio.py`

### Input mapping

- [Dolphin controls](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-dolphin/batocera_launch_dolphin/controllers.py): `python-src/batocera-launch-dolphin/batocera_launch_dolphin/controllers.py`
- [MAME controls](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-mame/batocera_launch_mame/controllers.py): `python-src/batocera-launch-mame/batocera_launch_mame/controllers.py`
- [Libretro MAME controls](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-libretro-mame/batocera_launch_libretro_mame/controllers.py): `python-src/batocera-launch-libretro-mame/batocera_launch_libretro_mame/controllers.py`
- [Linux-loader controls](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-launch-linuxloader/batocera_launch_linuxloader/controllers.py): `python-src/batocera-launch-linuxloader/batocera_launch_linuxloader/controllers.py`

### System applications

- [Hotkey daemon](https://github.com/batocera-linux/batocera.linux/blob/master/package/batocera/utils/hotkeygen/hotkeygen/daemon.py): `package/batocera/utils/hotkeygen/hotkeygen/daemon.py`
- [Hotkey types](https://github.com/batocera-linux/batocera.linux/blob/master/package/batocera/utils/hotkeygen/hotkeygen/_types.py): `package/batocera/utils/hotkeygen/hotkeygen/_types.py`
- [Hotkey D-Bus types](https://github.com/batocera-linux/batocera.linux/blob/master/package/batocera/utils/hotkeygen/hotkeygen/dbus/common.py): `package/batocera/utils/hotkeygen/hotkeygen/dbus/common.py`
- [Bezel overlay app](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-bezel-overlay/batocera_bezel_overlay/app.py): `python-src/batocera-bezel-overlay/batocera_bezel_overlay/app.py`
- [Overlay rendering](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-bezel-overlay/batocera_bezel_overlay/overlay.py): `python-src/batocera-bezel-overlay/batocera_bezel_overlay/overlay.py`
- [System registry](https://github.com/batocera-linux/batocera.linux/blob/master/python-src/batocera-es-system/batocera_es_system/registry.py): `python-src/batocera-es-system/batocera_es_system/registry.py`

### Other components

- **Player**

## Connections

- Player → Launch CLI: starts game
- Launch CLI → CLI arguments: parses (evidence: `python-src/batocera-launch/batocera_launch/cli/main.py`)
- Launch CLI → Emulator launchers: dispatches
- Libretro launcher → Core selection: selects core (evidence: `python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py`)
- Libretro launcher → Core loading: loads core (evidence: `python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py`)
- Libretro launcher → Launch paths: uses paths (evidence: `python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py`)
- Libretro launcher → Runtime paths: uses paths (evidence: `python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py`)
- Libretro launcher → Shared data types: uses types (evidence: `python-src/batocera-launch-libretro/batocera_launch_libretro/emulator.py`)
- Linux-loader controls → Linux-loader config: configures (evidence: `python-src/batocera-launch-linuxloader/batocera_launch_linuxloader/controllers.py`)
- Dolphin controls → Shared data types: uses types (evidence: `python-src/batocera-launch-dolphin/batocera_launch_dolphin/controllers.py`)
- MAME controls → Shared data types: uses types (evidence: `python-src/batocera-launch-mame/batocera_launch_mame/controllers.py`)
- Libretro MAME controls → Shared data types: uses types (evidence: `python-src/batocera-launch-libretro-mame/batocera_launch_libretro_mame/controllers.py`)
- Hotkey daemon → Hotkey types: uses types
- Bezel overlay app → Overlay rendering: creates overlay (evidence: `python-src/batocera-bezel-overlay/batocera_bezel_overlay/app.py`)
- System registry → Shared data types: uses types (evidence: `python-src/batocera-es-system/batocera_es_system/registry.py`)
- System registry → Config parser: uses parser
