# koho/frpmgr architecture

> Architecture diagram of the GitHub repository koho/frpmgr, 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/koho/frpmgr
- Repository: https://github.com/koho/frpmgr

## Overview

FRP Manager is a Windows GUI for defining and operating multiple FRP client configurations. The main workflow is to edit or import a configuration, launch it as a background Windows service, and monitor proxy status; the service can reload configuration and expose status over IPC. The README also documents auto-start and expiring self-destructing configurations. The service runtime and IPC relationships are grounded in sampled source; some UI wiring is inferred only from the documented capabilities and module names.

Main entry points: [`services/service.go`](https://github.com/koho/frpmgr/blob/master/services/service.go) (Windows service), [`pkg/config/client.go`](https://github.com/koho/frpmgr/blob/master/pkg/config/client.go) (Client configuration), [`ui/ui.go`](https://github.com/koho/frpmgr/blob/master/ui/ui.go) (Main GUI), [`ui/confpage.go`](https://github.com/koho/frpmgr/blob/master/ui/confpage.go) (Configuration editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gui["Configuration GUI"]
  node_gui["Main GUI<br/>[ui.go]"]
  node_config_ui["Configuration editor<br/>[confpage.go]"]
  node_client_ui["Client editor<br/>[editclient.go]"]
  node_proxy_ui["Proxy editor<br/>[editproxy.go]"]
  node_import_ui["Config import<br/>[urlimport.go]"]
end

subgraph group_config["Configuration"]
  node_config_model["Client configuration<br/>[client.go]"]
  node_conversion["Format conversion<br/>[conversion.go]"]
  node_app_config["App preferences<br/>[app.go]"]
  node_config_file["Config files"]
end

subgraph group_runtime["Service runtime"]
  node_install["Service controls<br/>[install.go]"]
  node_service["Windows service<br/>[service.go]"]
  node_client_service["FRP client service<br/>[client.go]"]
end

subgraph group_status["Status and integrations"]
  node_ipc_server["Status IPC server<br/>[server.go]"]
  node_ipc_client["Status IPC client<br/>[client.go]"]
  node_tracker["Proxy status UI<br/>[proxytracker.go]"]
  node_log_ui["Log viewer<br/>[logpage.go]"]
end

node_user(("User"))
node_entry["Application entry<br/>[main.go]"]
node_frp_server(("FRP server"))
node_github(("GitHub updates"))

node_user -->|"uses"| node_gui
node_entry -->|"starts GUI"| node_gui
node_user -->|"edits"| node_config_ui
node_config_ui -->|"edits client"| node_client_ui
node_config_ui -->|"edits proxies"| node_proxy_ui
node_user -->|"imports config"| node_import_ui
node_client_ui -->|"updates"| node_config_model
node_proxy_ui -->|"updates"| node_config_model
node_import_ui -->|"converts formats"| node_conversion
node_conversion -->|"produces config"| node_config_model
node_config_model -->|"persists"| node_config_file
node_gui -->|"launches config"| node_install
node_install -->|"controls service"| node_service
node_entry -->|"runs service mode"| node_service
node_service -->|"loads and reloads"| node_config_model
node_service -->|"starts client"| node_client_service
node_client_service -->|"connects to"| node_frp_server
node_service -->|"starts IPC"| node_ipc_server
node_ipc_server -->|"queries status"| node_client_service
node_tracker -->|"requests status"| node_ipc_client
node_ipc_client -->|"queries over pipe"| node_ipc_server
node_user -->|"views logs"| node_log_ui
node_gui -->|"reads preferences"| node_app_config
node_app_config -.->|"checks updates"| node_github

click node_entry "https://github.com/koho/frpmgr/blob/master/cmd/frpmgr/main.go"
click node_gui "https://github.com/koho/frpmgr/blob/master/ui/ui.go"
click node_config_ui "https://github.com/koho/frpmgr/blob/master/ui/confpage.go"
click node_client_ui "https://github.com/koho/frpmgr/blob/master/ui/editclient.go"
click node_proxy_ui "https://github.com/koho/frpmgr/blob/master/ui/editproxy.go"
click node_import_ui "https://github.com/koho/frpmgr/blob/master/ui/urlimport.go"
click node_config_model "https://github.com/koho/frpmgr/blob/master/pkg/config/client.go"
click node_conversion "https://github.com/koho/frpmgr/blob/master/pkg/config/conversion.go"
click node_app_config "https://github.com/koho/frpmgr/blob/master/pkg/config/app.go"
click node_install "https://github.com/koho/frpmgr/blob/master/services/install.go"
click node_service "https://github.com/koho/frpmgr/blob/master/services/service.go"
click node_client_service "https://github.com/koho/frpmgr/blob/master/services/client.go"
click node_ipc_server "https://github.com/koho/frpmgr/blob/master/pkg/ipc/server.go"
click node_ipc_client "https://github.com/koho/frpmgr/blob/master/pkg/ipc/client.go"
click node_tracker "https://github.com/koho/frpmgr/blob/master/ui/proxytracker.go"
click node_log_ui "https://github.com/koho/frpmgr/blob/master/ui/logpage.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_gui,node_config_ui,node_client_ui,node_proxy_ui,node_import_ui,node_user toneBlue
class node_config_model,node_conversion,node_app_config,node_config_file toneAmber
class node_install,node_service,node_client_service,node_frp_server toneMint
class node_ipc_server,node_ipc_client,node_tracker,node_log_ui toneRose
class node_entry toneTeal
class node_github toneIndigo
```

## Components

### Configuration GUI

- [Main GUI](https://github.com/koho/frpmgr/blob/master/ui/ui.go): `ui/ui.go`
- [Configuration editor](https://github.com/koho/frpmgr/blob/master/ui/confpage.go): `ui/confpage.go`
- [Client editor](https://github.com/koho/frpmgr/blob/master/ui/editclient.go): `ui/editclient.go`
- [Proxy editor](https://github.com/koho/frpmgr/blob/master/ui/editproxy.go): `ui/editproxy.go`
- [Config import](https://github.com/koho/frpmgr/blob/master/ui/urlimport.go): `ui/urlimport.go`

### Configuration

- [Client configuration](https://github.com/koho/frpmgr/blob/master/pkg/config/client.go): `pkg/config/client.go`
- [Format conversion](https://github.com/koho/frpmgr/blob/master/pkg/config/conversion.go): `pkg/config/conversion.go`
- [App preferences](https://github.com/koho/frpmgr/blob/master/pkg/config/app.go): `pkg/config/app.go`
- **Config files**

### Service runtime

- [Service controls](https://github.com/koho/frpmgr/blob/master/services/install.go): `services/install.go`
- [Windows service](https://github.com/koho/frpmgr/blob/master/services/service.go): `services/service.go`
- [FRP client service](https://github.com/koho/frpmgr/blob/master/services/client.go): `services/client.go`

### Status and integrations

- [Status IPC server](https://github.com/koho/frpmgr/blob/master/pkg/ipc/server.go): `pkg/ipc/server.go`
- [Status IPC client](https://github.com/koho/frpmgr/blob/master/pkg/ipc/client.go): `pkg/ipc/client.go`
- [Proxy status UI](https://github.com/koho/frpmgr/blob/master/ui/proxytracker.go): `ui/proxytracker.go`
- [Log viewer](https://github.com/koho/frpmgr/blob/master/ui/logpage.go): `ui/logpage.go`

### Other components

- **User**
- [Application entry](https://github.com/koho/frpmgr/blob/master/cmd/frpmgr/main.go): `cmd/frpmgr/main.go`
- **FRP server**
- **GitHub updates**

## Connections

- User → Main GUI: uses
- Application entry → Main GUI: starts GUI
- User → Configuration editor: edits
- Configuration editor → Client editor: edits client
- Configuration editor → Proxy editor: edits proxies
- User → Config import: imports config
- Client editor → Client configuration: updates
- Proxy editor → Client configuration: updates
- Config import → Format conversion: converts formats
- Format conversion → Client configuration: produces config
- Client configuration → Config files: persists
- Main GUI → Service controls: launches config
- Service controls → Windows service: controls service
- Application entry → Windows service: runs service mode
- Windows service → Client configuration: loads and reloads
- Windows service → FRP client service: starts client
- FRP client service → FRP server: connects to
- Windows service → Status IPC server: starts IPC
- Status IPC server → FRP client service: queries status
- Proxy status UI → Status IPC client: requests status
- Status IPC client → Status IPC server: queries over pipe
- User → Log viewer: views logs
- Main GUI → App preferences: reads preferences
- App preferences → GitHub updates: checks updates
