# gwqlike/gwqproxy architecture

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

- Interactive diagram: https://gitdiagram.com/gwqlike/gwqproxy
- Repository: https://github.com/gwqlike/gwqproxy

## Overview

GWQProxy combines an Android community proxy client with a control-plane backend; the backend manages accounts and configuration but does not carry proxy traffic. The primary workflow is member sign-in, configuration and node retrieval, then Android VPN startup through TUN-to-SOCKS forwarding and Mihomo; the app also reports presence. Admins manage users, invitations, nodes, and versioned YAML through the served admin pages. The backend is represented as a monolith because the tree and sampled source show a single server module. Some feature wiring is documented but unsampled, so uncertain internal links are omitted.

Main entry points: [`backend/src/server.mjs`](https://github.com/gwqlike/gwqproxy/blob/main/backend/src/server.mjs) (Control API), [`android/app/src/main/java/dev/communityproxy/MainActivity.java`](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/MainActivity.java) (Client UI), [`android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java`](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java) (Mihomo manager), [`android/app/src/main/java/dev/communityproxy/vpn/CommunityVpnService.java`](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/CommunityVpnService.java) (VPN service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android client"]
  node_app["Client UI<br/>[MainActivity.java]"]
  node_api["API client<br/>[ApiClient.java]"]
  node_session["Session settings<br/>[SessionStore.java]"]
  node_configstore["Local config<br/>[ConfigStore.java]"]
end

subgraph group_vpn["VPN runtime"]
  node_vpnservice["VPN service"]
  node_mihomo["Mihomo manager<br/>[MihomoManager.java]"]
  node_tunnel["TUN forwarding"]
  node_jni["Hev JNI bridge<br/>[TProxyService.java]"]
  node_core["Mihomo core"]
  node_controller["Local controller<br/>[MihomoManager.java]"]
  node_hev["Hev native library<br/>[TProxyService.java]"]
end

subgraph group_control["Control plane"]
  node_backend["Control API<br/>[server.mjs]"]
  node_db[("SQLite state<br/>[server.mjs]")]
  node_avatars[("Avatar files<br/>[server.mjs]")]
end

subgraph group_admin["Administration"]
  node_adminui["Admin pages<br/>[admin.html]"]
  node_adminlogin["Admin login<br/>[admin-login.html]"]
end

node_member(("Community member"))
node_admin(("Administrator"))
node_proxy(("Proxy nodes"))

node_member -->|"uses"| node_app
node_app -->|"requests"| node_api
node_app -->|"reads/writes"| node_session
node_app -->|"saves config"| node_configstore
node_api -->|"HTTPS API"| node_backend
node_backend -->|"reads/writes"| node_db
node_backend -->|"stores avatars"| node_avatars
node_admin -->|"signs in"| node_adminlogin
node_admin -->|"manages"| node_adminui
node_adminlogin -->|"authenticates"| node_backend
node_adminui -->|"admin API"| node_backend
node_backend -->|"serves page"| node_adminlogin
node_backend -->|"serves page"| node_adminui
node_app -->|"starts/stops"| node_vpnservice
node_vpnservice -->|"starts/selects"| node_mihomo
node_vpnservice -->|"starts/stops"| node_tunnel
node_mihomo -->|"reads YAML"| node_configstore
node_mihomo -->|"launches"| node_core
node_mihomo -->|"controls"| node_controller
node_tunnel -->|"starts/stops"| node_jni
node_jni -->|"invokes"| node_hev
node_tunnel -->|"forwards to SOCKS"| node_controller
node_controller -->|"routes traffic"| node_proxy

click node_app "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/MainActivity.java"
click node_api "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/data/ApiClient.java"
click node_session "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/data/SessionStore.java"
click node_configstore "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/data/ConfigStore.java"
click node_backend "https://github.com/gwqlike/gwqproxy/blob/main/backend/src/server.mjs"
click node_db "https://github.com/gwqlike/gwqproxy/blob/main/backend/src/server.mjs"
click node_avatars "https://github.com/gwqlike/gwqproxy/blob/main/backend/src/server.mjs"
click node_adminui "https://github.com/gwqlike/gwqproxy/blob/main/backend/public/admin.html"
click node_adminlogin "https://github.com/gwqlike/gwqproxy/blob/main/backend/public/admin-login.html"
click node_vpnservice "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/CommunityVpnService.java"
click node_mihomo "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java"
click node_tunnel "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/Tun2SocksManager.java"
click node_jni "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/hev/sockstun/TProxyService.java"
click node_core "https://github.com/gwqlike/gwqproxy/tree/main/android/app/src/main/assets/mihomo"
click node_controller "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java"
click node_hev "https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/hev/sockstun/TProxyService.java"

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_app,node_api,node_session,node_configstore toneBlue
class node_vpnservice,node_mihomo,node_tunnel,node_jni,node_core,node_controller,node_hev toneAmber
class node_backend,node_db,node_avatars toneMint
class node_adminui,node_adminlogin toneRose
class node_member,node_admin,node_proxy toneIndigo
```

## Components

### Android client

- [Client UI](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/MainActivity.java): `android/app/src/main/java/dev/communityproxy/MainActivity.java`
- [API client](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/data/ApiClient.java): `android/app/src/main/java/dev/communityproxy/data/ApiClient.java`
- [Session settings](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/data/SessionStore.java): `android/app/src/main/java/dev/communityproxy/data/SessionStore.java`
- [Local config](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/data/ConfigStore.java): `android/app/src/main/java/dev/communityproxy/data/ConfigStore.java`

### VPN runtime

- [VPN service](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/CommunityVpnService.java): `android/app/src/main/java/dev/communityproxy/vpn/CommunityVpnService.java`
- [Mihomo manager](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java): `android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java`
- [TUN forwarding](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/Tun2SocksManager.java): `android/app/src/main/java/dev/communityproxy/vpn/Tun2SocksManager.java`
- [Hev JNI bridge](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/hev/sockstun/TProxyService.java): `android/app/src/main/java/hev/sockstun/TProxyService.java`
- [Mihomo core](https://github.com/gwqlike/gwqproxy/tree/main/android/app/src/main/assets/mihomo): `android/app/src/main/assets/mihomo`
- [Local controller](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java): `android/app/src/main/java/dev/communityproxy/vpn/MihomoManager.java`
- [Hev native library](https://github.com/gwqlike/gwqproxy/blob/main/android/app/src/main/java/hev/sockstun/TProxyService.java): `android/app/src/main/java/hev/sockstun/TProxyService.java`

### Control plane

- [Control API](https://github.com/gwqlike/gwqproxy/blob/main/backend/src/server.mjs): `backend/src/server.mjs`
- [SQLite state](https://github.com/gwqlike/gwqproxy/blob/main/backend/src/server.mjs): `backend/src/server.mjs`
- [Avatar files](https://github.com/gwqlike/gwqproxy/blob/main/backend/src/server.mjs): `backend/src/server.mjs`

### Administration

- [Admin pages](https://github.com/gwqlike/gwqproxy/blob/main/backend/public/admin.html): `backend/public/admin.html`
- [Admin login](https://github.com/gwqlike/gwqproxy/blob/main/backend/public/admin-login.html): `backend/public/admin-login.html`

### Other components

- **Community member**
- **Administrator**
- **Proxy nodes**

## Connections

- Community member → Client UI: uses
- Client UI → API client: requests
- Client UI → Session settings: reads/writes
- Client UI → Local config: saves config
- API client → Control API: HTTPS API
- Control API → SQLite state: reads/writes
- Control API → Avatar files: stores avatars
- Administrator → Admin login: signs in
- Administrator → Admin pages: manages
- Admin login → Control API: authenticates
- Admin pages → Control API: admin API
- Control API → Admin login: serves page
- Control API → Admin pages: serves page
- Client UI → VPN service: starts/stops
- VPN service → Mihomo manager: starts/selects
- VPN service → TUN forwarding: starts/stops
- Mihomo manager → Local config: reads YAML
- Mihomo manager → Mihomo core: launches
- Mihomo manager → Local controller: controls
- TUN forwarding → Hev JNI bridge: starts/stops
- Hev JNI bridge → Hev native library: invokes
- TUN forwarding → Local controller: forwards to SOCKS
- Local controller → Proxy nodes: routes traffic
