# lyravoid/folkpatch architecture

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

- Interactive diagram: https://gitdiagram.com/lyravoid/folkpatch
- Repository: https://github.com/lyravoid/folkpatch

## Overview

FolkPatch is an Android root-management application built on KernelPatch. The user-facing workflow is to manage root features and install or control system and kernel modules through the app; the APD command-line runtime provides module, plugin, and policy operations, while a built-in Shizuku service offers a separate privileged-service capability. The README documents major capabilities that are not fully visible in sampled implementation excerpts, so those links are shown as unverified rather than asserted as source-confirmed calls.

Main entry points: [`app/src/main/java/me/bmax/apatch/ui/MainActivity.kt`](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/MainActivity.kt) (Android app), [`apd/src/module.rs`](https://github.com/lyravoid/folkpatch/blob/main/apd/src/module.rs) (Module lifecycle), [`apd/src/cli.rs`](https://github.com/lyravoid/folkpatch/blob/main/apd/src/cli.rs) (Command interface), [`apd/src/lua.rs`](https://github.com/lyravoid/folkpatch/blob/main/apd/src/lua.rs) (Lua execution)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_manager["Android manager"]
  node_android["Android app<br/>[MainActivity.kt]"]
  node_install["Root setup"]
end

subgraph group_modules["Module management"]
  node_apm["APM modules<br/>[APM.kt]"]
  node_bulk["Batch install"]
  node_kpm["KPM modules<br/>[KPM.kt]"]
end

subgraph group_runtime["APD runtime"]
  node_apd["APD command runtime<br/>[main.rs]"]
  node_cli["Command interface<br/>[cli.rs]"]
  node_module["Module lifecycle<br/>[module.rs]"]
  node_mount["System mounts<br/>[magic_mount.rs]"]
  node_moduleconfig["Module configuration<br/>[module_config.rs]"]
  node_plugin["Lua plugins<br/>[plugin.rs]"]
  node_lua["Lua execution<br/>[lua.rs]"]
  node_policy["Runtime policies<br/>[supercall.rs]"]
  node_resetprop["Property changes<br/>[resetprop.rs]"]
  node_sepolicy["SELinux policy<br/>[sepolicy.rs]"]
end

subgraph group_privilege["Privilege services"]
  node_shizuku["Shizuku manager"]
  node_shizukusvc["Shizuku service"]
  node_service["Binder services<br/>[Service.java]"]
  node_clients["Client permissions<br/>[ClientManager.java]"]
  node_userservices["User services"]
end

subgraph group_personalization["Interface customization"]
  node_themes["Theme store<br/>[ThemeStore.kt]"]
  node_thememanager["Theme manager<br/>[ThemeManager.kt]"]
  node_settings["Settings<br/>[Settings.kt]"]
end

node_user(("Device owner"))

node_user -.->|"manages device"| node_android
node_android -.->|"starts setup"| node_install
node_android -.->|"manages modules"| node_apm
node_apm -.->|"batch installs"| node_bulk
node_android -.->|"manages modules"| node_kpm
node_apd -->|"runs"| node_cli
node_cli -.->|"dispatches commands"| node_module
node_module -.->|"manages mounts"| node_mount
node_module -->|"uses configuration"| node_moduleconfig
node_module -->|"reads policy"| node_sepolicy
node_plugin -.->|"runs scripts"| node_lua
node_lua -->|"loads module data"| node_module
node_lua -->|"reads plugin config"| node_plugin
node_lua -->|"exposes properties"| node_resetprop
node_cli -.->|"dispatches plugin commands"| node_plugin
node_cli -.->|"dispatches runtime controls"| node_policy
node_android -.->|"manages service"| node_shizuku
node_shizuku -->|"starts service"| node_shizukusvc
node_shizukusvc -->|"extends service"| node_service
node_service -->|"creates manager"| node_clients
node_service -->|"routes requests"| node_userservices
node_android -.->|"imports themes"| node_themes
node_themes -.->|"manages themes"| node_thememanager
node_android -.->|"configures interface"| node_settings

click node_android "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/MainActivity.kt"
click node_install "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/InstallModeSelect.kt"
click node_apm "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/APM.kt"
click node_bulk "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/util/BulkInstallManager.kt"
click node_kpm "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/KPM.kt"
click node_apd "https://github.com/lyravoid/folkpatch/blob/main/apd/src/main.rs"
click node_cli "https://github.com/lyravoid/folkpatch/blob/main/apd/src/cli.rs"
click node_module "https://github.com/lyravoid/folkpatch/blob/main/apd/src/module.rs"
click node_mount "https://github.com/lyravoid/folkpatch/blob/main/apd/src/magic_mount.rs"
click node_moduleconfig "https://github.com/lyravoid/folkpatch/blob/main/apd/src/module_config.rs"
click node_plugin "https://github.com/lyravoid/folkpatch/blob/main/apd/src/plugin.rs"
click node_lua "https://github.com/lyravoid/folkpatch/blob/main/apd/src/lua.rs"
click node_policy "https://github.com/lyravoid/folkpatch/blob/main/apd/src/supercall.rs"
click node_resetprop "https://github.com/lyravoid/folkpatch/blob/main/apd/src/resetprop.rs"
click node_sepolicy "https://github.com/lyravoid/folkpatch/blob/main/apd/src/sepolicy.rs"
click node_shizuku "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/util/ShizukuServiceManager.kt"
click node_shizukusvc "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/ShizukuService.java"
click node_service "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/Service.java"
click node_clients "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/ClientManager.java"
click node_userservices "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/UserServiceManager.java"
click node_themes "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/ThemeStore.kt"
click node_thememanager "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/theme/ThemeManager.kt"
click node_settings "https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/Settings.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_android,node_install toneBlue
class node_apm,node_bulk,node_kpm toneAmber
class node_apd,node_cli,node_module,node_mount,node_moduleconfig,node_plugin,node_lua,node_policy,node_resetprop,node_sepolicy toneMint
class node_shizuku,node_shizukusvc,node_service,node_clients,node_userservices toneRose
class node_themes,node_thememanager,node_settings,node_user toneIndigo
```

## Components

### Android manager

- [Android app](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/MainActivity.kt): `app/src/main/java/me/bmax/apatch/ui/MainActivity.kt`
- [Root setup](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/InstallModeSelect.kt): `app/src/main/java/me/bmax/apatch/ui/screen/InstallModeSelect.kt`

### Module management

- [APM modules](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/APM.kt): `app/src/main/java/me/bmax/apatch/ui/screen/APM.kt`
- [Batch install](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/util/BulkInstallManager.kt): `app/src/main/java/me/bmax/apatch/util/BulkInstallManager.kt`
- [KPM modules](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/KPM.kt): `app/src/main/java/me/bmax/apatch/ui/screen/KPM.kt`

### APD runtime

- [APD command runtime](https://github.com/lyravoid/folkpatch/blob/main/apd/src/main.rs): `apd/src/main.rs`
- [Command interface](https://github.com/lyravoid/folkpatch/blob/main/apd/src/cli.rs): `apd/src/cli.rs`
- [Module lifecycle](https://github.com/lyravoid/folkpatch/blob/main/apd/src/module.rs): `apd/src/module.rs`
- [System mounts](https://github.com/lyravoid/folkpatch/blob/main/apd/src/magic_mount.rs): `apd/src/magic_mount.rs`
- [Module configuration](https://github.com/lyravoid/folkpatch/blob/main/apd/src/module_config.rs): `apd/src/module_config.rs`
- [Lua plugins](https://github.com/lyravoid/folkpatch/blob/main/apd/src/plugin.rs): `apd/src/plugin.rs`
- [Lua execution](https://github.com/lyravoid/folkpatch/blob/main/apd/src/lua.rs): `apd/src/lua.rs`
- [Runtime policies](https://github.com/lyravoid/folkpatch/blob/main/apd/src/supercall.rs): `apd/src/supercall.rs`
- [Property changes](https://github.com/lyravoid/folkpatch/blob/main/apd/src/resetprop.rs): `apd/src/resetprop.rs`
- [SELinux policy](https://github.com/lyravoid/folkpatch/blob/main/apd/src/sepolicy.rs): `apd/src/sepolicy.rs`

### Privilege services

- [Shizuku manager](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/util/ShizukuServiceManager.kt): `app/src/main/java/me/bmax/apatch/util/ShizukuServiceManager.kt`
- [Shizuku service](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/ShizukuService.java): `app/src/main/java/rikka/shizuku/server/ShizukuService.java`
- [Binder services](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/Service.java): `app/src/main/java/rikka/shizuku/server/Service.java`
- [Client permissions](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/ClientManager.java): `app/src/main/java/rikka/shizuku/server/ClientManager.java`
- [User services](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/rikka/shizuku/server/UserServiceManager.java): `app/src/main/java/rikka/shizuku/server/UserServiceManager.java`

### Interface customization

- [Theme store](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/ThemeStore.kt): `app/src/main/java/me/bmax/apatch/ui/screen/ThemeStore.kt`
- [Theme manager](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/theme/ThemeManager.kt): `app/src/main/java/me/bmax/apatch/ui/theme/ThemeManager.kt`
- [Settings](https://github.com/lyravoid/folkpatch/blob/main/app/src/main/java/me/bmax/apatch/ui/screen/Settings.kt): `app/src/main/java/me/bmax/apatch/ui/screen/Settings.kt`

### Other components

- **Device owner**

## Connections

- Device owner → Android app: manages device (evidence: `README.md`)
- Android app → Root setup: starts setup
- Android app → APM modules: manages modules (evidence: `README.md`)
- APM modules → Batch install: batch installs (evidence: `README.md`)
- Android app → KPM modules: manages modules (evidence: `README.md`)
- APD command runtime → Command interface: runs (evidence: `apd/src/main.rs`)
- Command interface → Module lifecycle: dispatches commands
- Module lifecycle → System mounts: manages mounts
- Module lifecycle → Module configuration: uses configuration (evidence: `apd/src/module.rs`)
- Module lifecycle → SELinux policy: reads policy (evidence: `apd/src/module.rs`)
- Lua plugins → Lua execution: runs scripts (evidence: `README.md`)
- Lua execution → Module lifecycle: loads module data (evidence: `apd/src/lua.rs`)
- Lua execution → Lua plugins: reads plugin config (evidence: `apd/src/lua.rs`)
- Lua execution → Property changes: exposes properties (evidence: `apd/src/lua.rs`)
- Command interface → Lua plugins: dispatches plugin commands
- Command interface → Runtime policies: dispatches runtime controls
- Android app → Shizuku manager: manages service (evidence: `README.md`)
- Shizuku manager → Shizuku service: starts service (evidence: `app/src/main/java/me/bmax/apatch/util/ShizukuServiceManager.kt`)
- Shizuku service → Binder services: extends service (evidence: `app/src/main/java/rikka/shizuku/server/ShizukuService.java`)
- Binder services → Client permissions: creates manager (evidence: `app/src/main/java/rikka/shizuku/server/Service.java`)
- Binder services → User services: routes requests (evidence: `app/src/main/java/rikka/shizuku/server/Service.java`)
- Android app → Theme store: imports themes (evidence: `README.md`)
- Theme store → Theme manager: manages themes
- Android app → Settings: configures interface (evidence: `README.md`)
