# xodiosx/xodos-ark architecture

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

- Interactive diagram: https://gitdiagram.com/xodiosx/xodos-ark
- Repository: https://github.com/xodiosx/xodos-ark

## Overview

XoDos-Ark is an Android environment for installing and using Linux distributions and launching graphical guest applications through X11 or Wayland. The main user path is distro installation, shell access, desktop setup, then display-backend selection and launch. The graph also preserves terminal interaction, controller support, HUD and graphics options, and native runtime components. Source coverage is uneven: edges are limited to README statements and relationships visible in the supplied excerpts or SOURCE INDEX; unsampled subsystems are represented without guessed wiring.

Main entry points: [`xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt`](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt) (Display orchestrator), [`xodosark-app/app/src/main/java/app/xodos2/NativeBridge.kt`](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/NativeBridge.kt) (Native runtime bridge), [`xodosark-native/src/android/mod.rs`](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-native/src/android/mod.rs) (Native Android runtime), [`xodosark-app/app/src/main/java/app/xodos2/shell/ShellSessionClient.kt`](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/shell/ShellSessionClient.kt) (Shell session client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Install and setup"]
  node_setup_ui["Install and setup UI<br/>[InstallScreen.kt]"]
  node_native_install["Native install coordinator"]
end

subgraph group_runtime["Guest runtime"]
  node_native_runtime["Native runtime bridge<br/>[NativeBridge.kt]"]
  node_proot["Guest rootfs and proot<br/>[proot.rs]"]
  node_rootfs_fetch["Rootfs fetching<br/>[rootfs_fetch.rs]"]
  node_native_android["Native Android runtime<br/>[mod.rs]"]
  node_shell_ui["Shell screen<br/>[ShellScreen.kt]"]
  node_shell_client["Shell session client"]
  node_terminal["Terminal view<br/>[TerminalView.java]"]
  node_audio["Android audio sinks<br/>[module-sles-sink.c]"]
end

subgraph group_display["Display and input"]
  node_display_orchestrator["Display orchestrator"]
  node_x11_runtime["X11 runtime<br/>[X11Runtime.kt]"]
  node_x11_service["X11 server service"]
  node_wayland_bridge["Wayland bridge<br/>[WaylandBridge.kt]"]
  node_wayland_surface["Wayland surface and input"]
  node_x11_ui["Embedded X11 surface"]
  node_wayland_native["Wayland compositor runtime<br/>[compositor.c]"]
end

subgraph group_controls["App controls"]
  node_drawer["Environment options drawer<br/>[DrawerPages.kt]"]
  node_graphics["Graphics mode controls"]
  node_driver["Graphics driver manager"]
  node_hud["Performance HUD<br/>[HudService.java]"]
  node_input_controls["Controller input profiles"]
end

node_user(("Android user"))

node_user -->|"selects distro"| node_setup_ui
node_setup_ui -.->|"starts install"| node_native_install
node_native_install -->|"invokes native"| node_native_runtime
node_native_runtime -->|"calls runtime"| node_native_android
node_native_android -->|"delegates"| node_proot
node_native_android -->|"fetches rootfs"| node_rootfs_fetch
node_user -->|"opens shell"| node_shell_ui
node_shell_ui -.->|"uses session"| node_shell_client
node_shell_client -->|"calls bridge"| node_native_runtime
node_shell_client -->|"provides session"| node_terminal
node_user -->|"chooses desktop"| node_drawer
node_drawer -.->|"selects backend"| node_display_orchestrator
node_display_orchestrator -->|"calls bridge"| node_native_runtime
node_display_orchestrator -->|"calls bridge"| node_wayland_bridge
node_display_orchestrator -.->|"configures X11"| node_x11_runtime
node_x11_runtime -->|"starts service"| node_x11_service
node_wayland_bridge -.->|"handles surface"| node_wayland_surface
node_wayland_native -.->|"serves display"| node_wayland_surface
node_user -.->|"configures controls"| node_input_controls
node_user -.->|"chooses graphics"| node_graphics
node_graphics -->|"uses drivers"| node_driver
node_user -.->|"views HUD"| node_hud
node_user -.->|"plays guest audio"| node_audio

click node_setup_ui "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/setup/InstallScreen.kt"
click node_native_install "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/NativeInstallCoordinator.kt"
click node_native_runtime "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/NativeBridge.kt"
click node_proot "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-native/src/android/proot.rs"
click node_rootfs_fetch "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-native/src/android/rootfs_fetch.rs"
click node_native_android "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-native/src/android/mod.rs"
click node_shell_ui "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/shell/ShellScreen.kt"
click node_shell_client "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/shell/ShellSessionClient.kt"
click node_terminal "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/view/TerminalView.java"
click node_display_orchestrator "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt"
click node_x11_runtime "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/X11Runtime.kt"
click node_x11_service "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/x11/X11ServerService.java"
click node_wayland_bridge "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/WaylandBridge.kt"
click node_wayland_surface "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/wayland/WaylandSurfaceView.kt"
click node_x11_ui "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/x11/EmbeddedX11Surface.kt"
click node_drawer "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/drawer/pages/DrawerPages.kt"
click node_graphics "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/GraphicsModeController.kt"
click node_driver "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/AdrenotoolsDriverManager.kt"
click node_hud "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/x11/HudService.java"
click node_input_controls "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/x11/controller/inputcontrols/InputControlsManager.java"
click node_audio "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-audio/pulse-android/modules/module-sles-sink.c"
click node_wayland_native "https://github.com/xodiosx/xodos-ark/blob/main/xodosark-wayland/src/compositor.c"

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_setup_ui,node_native_install,node_user toneBlue
class node_native_runtime,node_proot,node_rootfs_fetch,node_native_android,node_shell_ui,node_shell_client,node_terminal,node_audio toneAmber
class node_display_orchestrator,node_x11_runtime,node_x11_service,node_wayland_bridge,node_wayland_surface,node_x11_ui,node_wayland_native toneMint
class node_drawer,node_graphics,node_driver,node_hud,node_input_controls toneRose
```

## Components

### Install and setup

- [Install and setup UI](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/setup/InstallScreen.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/setup/InstallScreen.kt`
- [Native install coordinator](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/NativeInstallCoordinator.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/NativeInstallCoordinator.kt`

### Guest runtime

- [Native runtime bridge](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/NativeBridge.kt): `xodosark-app/app/src/main/java/app/xodos2/NativeBridge.kt`
- [Guest rootfs and proot](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-native/src/android/proot.rs): `xodosark-native/src/android/proot.rs`
- [Rootfs fetching](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-native/src/android/rootfs_fetch.rs): `xodosark-native/src/android/rootfs_fetch.rs`
- [Native Android runtime](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-native/src/android/mod.rs): `xodosark-native/src/android/mod.rs`
- [Shell screen](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/shell/ShellScreen.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/shell/ShellScreen.kt`
- [Shell session client](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/shell/ShellSessionClient.kt): `xodosark-app/app/src/main/java/app/xodos2/shell/ShellSessionClient.kt`
- [Terminal view](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/view/TerminalView.java): `xodosark-app/app/src/main/java/com/termux/view/TerminalView.java`
- [Android audio sinks](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-audio/pulse-android/modules/module-sles-sink.c): `xodosark-audio/pulse-android/modules/module-sles-sink.c`

### Display and input

- [Display orchestrator](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt`
- [X11 runtime](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/X11Runtime.kt): `xodosark-app/app/src/main/java/app/xodos2/X11Runtime.kt`
- [X11 server service](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/x11/X11ServerService.java): `xodosark-app/app/src/main/java/com/termux/x11/X11ServerService.java`
- [Wayland bridge](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/WaylandBridge.kt): `xodosark-app/app/src/main/java/app/xodos2/WaylandBridge.kt`
- [Wayland surface and input](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/wayland/WaylandSurfaceView.kt): `xodosark-app/app/src/main/java/app/xodos2/wayland/WaylandSurfaceView.kt`
- [Embedded X11 surface](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/x11/EmbeddedX11Surface.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/x11/EmbeddedX11Surface.kt`
- [Wayland compositor runtime](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-wayland/src/compositor.c): `xodosark-wayland/src/compositor.c`

### App controls

- [Environment options drawer](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/drawer/pages/DrawerPages.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/drawer/pages/DrawerPages.kt`
- [Graphics mode controls](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/GraphicsModeController.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/GraphicsModeController.kt`
- [Graphics driver manager](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/app/xodos2/ui/runtime/AdrenotoolsDriverManager.kt): `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/AdrenotoolsDriverManager.kt`
- [Performance HUD](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/x11/HudService.java): `xodosark-app/app/src/main/java/com/termux/x11/HudService.java`
- [Controller input profiles](https://github.com/xodiosx/xodos-ark/blob/main/xodosark-app/app/src/main/java/com/termux/x11/controller/inputcontrols/InputControlsManager.java): `xodosark-app/app/src/main/java/com/termux/x11/controller/inputcontrols/InputControlsManager.java`

### Other components

- **Android user**

## Connections

- Android user → Install and setup UI: selects distro (evidence: `README.md`)
- Install and setup UI → Native install coordinator: starts install
- Native install coordinator → Native runtime bridge: invokes native (evidence: `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt`)
- Native runtime bridge → Native Android runtime: calls runtime
- Native Android runtime → Guest rootfs and proot: delegates (evidence: `xodosark-native/src/android/mod.rs`)
- Native Android runtime → Rootfs fetching: fetches rootfs (evidence: `xodosark-native/src/android/mod.rs`)
- Android user → Shell screen: opens shell (evidence: `README.md`)
- Shell screen → Shell session client: uses session
- Shell session client → Native runtime bridge: calls bridge (evidence: `xodosark-app/app/src/main/java/app/xodos2/shell/ShellSessionClient.kt`)
- Shell session client → Terminal view: provides session (evidence: `xodosark-app/app/src/main/java/app/xodos2/shell/ShellSessionClient.kt`)
- Android user → Environment options drawer: chooses desktop (evidence: `README.md`)
- Environment options drawer → Display orchestrator: selects backend
- Display orchestrator → Native runtime bridge: calls bridge (evidence: `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt`)
- Display orchestrator → Wayland bridge: calls bridge (evidence: `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/DisplayOrchestrator.kt`)
- Display orchestrator → X11 runtime: configures X11
- X11 runtime → X11 server service: starts service (evidence: `xodosark-app/app/src/main/java/app/xodos2/X11Runtime.kt`)
- Wayland bridge → Wayland surface and input: handles surface
- Wayland compositor runtime → Wayland surface and input: serves display
- Android user → Controller input profiles: configures controls
- Android user → Graphics mode controls: chooses graphics
- Graphics mode controls → Graphics driver manager: uses drivers (evidence: `xodosark-app/app/src/main/java/app/xodos2/ui/runtime/AdrenotoolsDriverManager.kt`)
- Android user → Performance HUD: views HUD
- Android user → Android audio sinks: plays guest audio
