# winyannainghtut/ghostlink architecture

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

- Interactive diagram: https://gitdiagram.com/winyannainghtut/ghostlink
- Repository: https://github.com/winyannainghtut/ghostlink

## Overview

Ghostlink is a self-hosted VPN with a desktop client, CLI, optional MCP bridge, and a Linux server-management plane. The main user flow imports or selects a connection profile, sends actions through the local VPN service, and runs a protocol session; server owners separately manage clients, keys, policies, monitoring, and mesh nodes through the server API and dashboard. README statements and shown excerpts support the principal links; unsampled backend internals are represented by their enclosing source directories, with uncertain wiring omitted.

Main entry points: [`services/vpn-daemon/src/main.rs`](https://github.com/winyannainghtut/ghostlink/blob/main/services/vpn-daemon/src/main.rs) (Local service), [`core/vpn-engine/src/worker_session.rs`](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/worker_session.rs) (VPN engine), [`ui/dashboard/src/App.tsx`](https://github.com/winyannainghtut/ghostlink/blob/main/ui/dashboard/src/App.tsx) (Admin dashboard), [`core/outline-worker/internal/server`](https://github.com/winyannainghtut/ghostlink/tree/main/core/outline-worker/internal/server) (VPN server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client applications"]
  node_desktop["Desktop app<br/>[App.tsx]"]
  node_cli["CLI<br/>[main.rs]"]
  node_mcp["MCP bridge<br/>[main.rs]"]
  node_tauri["Desktop shell<br/>[main.rs]"]
end

subgraph group_runtime["Local VPN runtime"]
  node_daemon["Local service<br/>[main.rs]"]
  node_ipc["Service IPC<br/>[ipc.rs]"]
  node_remote["Remote server client<br/>[remote.rs]"]
  node_engine["VPN engine<br/>[worker_session.rs]"]
  node_profiles["Profiles and keys<br/>[profile.rs]"]
  node_outline["Outline transport<br/>[outline.rs]"]
  node_wireguard["WireGuard transport<br/>[wireguard.rs]"]
  node_vless["VLESS transport<br/>[vless.rs]"]
  node_amnezia["AmneziaWG transport<br/>[amnezia.rs]"]
  node_openvpn["OpenVPN support"]
end

subgraph group_server["VPN server"]
  node_server["VPN server"]
  node_serveradmin["Server administration<br/>[server_admin.rs]"]
  node_meshagent["Mesh agent"]
  node_monitor["Monitoring<br/>[monitor.go]"]
end

subgraph group_admin["Server management"]
  node_adminui["Admin dashboard<br/>[App.tsx]"]
  node_clients["Client management<br/>[Clients.tsx]"]
  node_clientdetails["Client keys and limits<br/>[ClientSheet.tsx]"]
  node_rules["Traffic rules<br/>[RulesEditor.tsx]"]
  node_speed["Speed limits<br/>[SpeedLimit.tsx]"]
  node_meshview["Mesh dashboard<br/>[Mesh.tsx]"]
end

node_user(("VPN user"))

node_user -->|"uses"| node_desktop
node_user -->|"uses"| node_cli
node_user -.->|"may use"| node_mcp
node_desktop -->|"invokes IPC"| node_tauri
node_tauri -.->|"forwards requests"| node_daemon
node_desktop -->|"requests and polls"| node_daemon
node_cli -->|"controls"| node_daemon
node_mcp -.->|"controls"| node_daemon
node_daemon -->|"dispatches requests"| node_ipc
node_daemon -->|"uses remote API"| node_remote
node_daemon -.->|"starts sessions"| node_engine
node_engine -->|"loads profile"| node_profiles
node_engine -->|"runs session"| node_outline
node_engine -->|"runs session"| node_wireguard
node_engine -.->|"runs session"| node_vless
node_engine -.->|"runs session"| node_amnezia
node_user -.->|"may connect"| node_openvpn
node_user -->|"connects to"| node_server
node_serveradmin -.->|"manages"| node_server
node_meshagent -->|"joins mesh"| node_server
node_user -->|"manages server"| node_adminui
node_adminui -->|"shows clients"| node_clients
node_clients -->|"opens details"| node_clientdetails
node_clientdetails -->|"uses editor"| node_rules
node_clientdetails -->|"uses limits"| node_speed
node_adminui -.->|"offers mesh view"| node_meshview
node_adminui -->|"requests server API"| node_server
node_adminui -.->|"displays live data"| node_monitor

click node_desktop "https://github.com/winyannainghtut/ghostlink/blob/main/ui/desktop/src/App.tsx"
click node_cli "https://github.com/winyannainghtut/ghostlink/blob/main/cli/ghostlink/src/main.rs"
click node_mcp "https://github.com/winyannainghtut/ghostlink/blob/main/integrations/mcp-server/src/main.rs"
click node_tauri "https://github.com/winyannainghtut/ghostlink/blob/main/apps/desktop/src-tauri/src/main.rs"
click node_daemon "https://github.com/winyannainghtut/ghostlink/blob/main/services/vpn-daemon/src/main.rs"
click node_ipc "https://github.com/winyannainghtut/ghostlink/blob/main/services/vpn-daemon/src/ipc.rs"
click node_remote "https://github.com/winyannainghtut/ghostlink/blob/main/services/vpn-daemon/src/remote.rs"
click node_engine "https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/worker_session.rs"
click node_profiles "https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/profile.rs"
click node_outline "https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/outline.rs"
click node_wireguard "https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/wireguard.rs"
click node_vless "https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/vless.rs"
click node_amnezia "https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/amnezia.rs"
click node_openvpn "https://github.com/winyannainghtut/ghostlink/tree/main/server/openvpn"
click node_server "https://github.com/winyannainghtut/ghostlink/tree/main/core/outline-worker/internal/server"
click node_serveradmin "https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/server_admin.rs"
click node_meshagent "https://github.com/winyannainghtut/ghostlink/tree/main/core/outline-worker/internal/meshagent"
click node_adminui "https://github.com/winyannainghtut/ghostlink/blob/main/ui/dashboard/src/App.tsx"
click node_clients "https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/views/Clients.tsx"
click node_clientdetails "https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/views/ClientSheet.tsx"
click node_rules "https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/RulesEditor.tsx"
click node_speed "https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/SpeedLimit.tsx"
click node_meshview "https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/views/Mesh.tsx"
click node_monitor "https://github.com/winyannainghtut/ghostlink/blob/main/core/outline-worker/internal/server/monitor.go"

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_desktop,node_cli,node_mcp,node_tauri,node_user toneBlue
class node_daemon,node_ipc,node_remote,node_engine,node_profiles,node_outline,node_wireguard,node_vless,node_amnezia,node_openvpn toneAmber
class node_server,node_serveradmin,node_meshagent,node_monitor toneMint
class node_adminui,node_clients,node_clientdetails,node_rules,node_speed,node_meshview toneRose
```

## Components

### Client applications

- [Desktop app](https://github.com/winyannainghtut/ghostlink/blob/main/ui/desktop/src/App.tsx): `ui/desktop/src/App.tsx`
- [CLI](https://github.com/winyannainghtut/ghostlink/blob/main/cli/ghostlink/src/main.rs): `cli/ghostlink/src/main.rs`
- [MCP bridge](https://github.com/winyannainghtut/ghostlink/blob/main/integrations/mcp-server/src/main.rs): `integrations/mcp-server/src/main.rs`
- [Desktop shell](https://github.com/winyannainghtut/ghostlink/blob/main/apps/desktop/src-tauri/src/main.rs): `apps/desktop/src-tauri/src/main.rs`

### Local VPN runtime

- [Local service](https://github.com/winyannainghtut/ghostlink/blob/main/services/vpn-daemon/src/main.rs): `services/vpn-daemon/src/main.rs`
- [Service IPC](https://github.com/winyannainghtut/ghostlink/blob/main/services/vpn-daemon/src/ipc.rs): `services/vpn-daemon/src/ipc.rs`
- [Remote server client](https://github.com/winyannainghtut/ghostlink/blob/main/services/vpn-daemon/src/remote.rs): `services/vpn-daemon/src/remote.rs`
- [VPN engine](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/worker_session.rs): `core/vpn-engine/src/worker_session.rs`
- [Profiles and keys](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/profile.rs): `core/vpn-engine/src/profile.rs`
- [Outline transport](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/outline.rs): `core/vpn-engine/src/outline.rs`
- [WireGuard transport](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/wireguard.rs): `core/vpn-engine/src/wireguard.rs`
- [VLESS transport](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/vless.rs): `core/vpn-engine/src/vless.rs`
- [AmneziaWG transport](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/amnezia.rs): `core/vpn-engine/src/amnezia.rs`
- [OpenVPN support](https://github.com/winyannainghtut/ghostlink/tree/main/server/openvpn): `server/openvpn`

### VPN server

- [VPN server](https://github.com/winyannainghtut/ghostlink/tree/main/core/outline-worker/internal/server): `core/outline-worker/internal/server`
- [Server administration](https://github.com/winyannainghtut/ghostlink/blob/main/core/vpn-engine/src/server_admin.rs): `core/vpn-engine/src/server_admin.rs`
- [Mesh agent](https://github.com/winyannainghtut/ghostlink/tree/main/core/outline-worker/internal/meshagent): `core/outline-worker/internal/meshagent`
- [Monitoring](https://github.com/winyannainghtut/ghostlink/blob/main/core/outline-worker/internal/server/monitor.go): `core/outline-worker/internal/server/monitor.go`

### Server management

- [Admin dashboard](https://github.com/winyannainghtut/ghostlink/blob/main/ui/dashboard/src/App.tsx): `ui/dashboard/src/App.tsx`
- [Client management](https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/views/Clients.tsx): `ui/admin/views/Clients.tsx`
- [Client keys and limits](https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/views/ClientSheet.tsx): `ui/admin/views/ClientSheet.tsx`
- [Traffic rules](https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/RulesEditor.tsx): `ui/admin/RulesEditor.tsx`
- [Speed limits](https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/SpeedLimit.tsx): `ui/admin/SpeedLimit.tsx`
- [Mesh dashboard](https://github.com/winyannainghtut/ghostlink/blob/main/ui/admin/views/Mesh.tsx): `ui/admin/views/Mesh.tsx`

### Other components

- **VPN user**

## Connections

- VPN user → Desktop app: uses
- VPN user → CLI: uses
- VPN user → MCP bridge: may use
- Desktop app → Desktop shell: invokes IPC
- Desktop shell → Local service: forwards requests
- Desktop app → Local service: requests and polls
- CLI → Local service: controls
- MCP bridge → Local service: controls
- Local service → Service IPC: dispatches requests (evidence: `services/vpn-daemon/src/main.rs`)
- Local service → Remote server client: uses remote API (evidence: `services/vpn-daemon/src/main.rs`)
- Local service → VPN engine: starts sessions
- VPN engine → Profiles and keys: loads profile (evidence: `core/vpn-engine/src/worker_session.rs`)
- VPN engine → Outline transport: runs session (evidence: `core/vpn-engine/src/worker_session.rs`)
- VPN engine → WireGuard transport: runs session (evidence: `core/vpn-engine/src/worker_session.rs`)
- VPN engine → VLESS transport: runs session
- VPN engine → AmneziaWG transport: runs session
- VPN user → OpenVPN support: may connect
- VPN user → VPN server: connects to
- Server administration → VPN server: manages
- Mesh agent → VPN server: joins mesh
- VPN user → Admin dashboard: manages server
- Admin dashboard → Client management: shows clients (evidence: `ui/dashboard/src/App.tsx`)
- Client management → Client keys and limits: opens details (evidence: `ui/admin/views/Clients.tsx`)
- Client keys and limits → Traffic rules: uses editor (evidence: `ui/admin/views/ClientSheet.tsx`)
- Client keys and limits → Speed limits: uses limits (evidence: `ui/admin/views/ClientSheet.tsx`)
- Admin dashboard → Mesh dashboard: offers mesh view
- Admin dashboard → VPN server: requests server API
- Admin dashboard → Monitoring: displays live data
