# yankuro12/kuropanel architecture

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

## Overview

KuroPanel is a web control panel for managing infrastructure and game servers. An authenticated operator uses the Next.js UI to create tasks, manage files and servers, and inspect nodes and monitoring; the Go API persists state and queues work, while connected agents report status and execute commands or game-container operations. The graph includes the documented backup, user, and plugin capabilities. Backend route wiring and task persistence are evidenced in source; some feature-specific dispatch details are not sampled, so those links are omitted.

Main entry points: [`backend/cmd/server/main.go`](https://github.com/yankuro12/kuropanel/blob/main/backend/cmd/server/main.go) (HTTP server), [`agent/internal/websocket/client.go`](https://github.com/yankuro12/kuropanel/blob/main/agent/internal/websocket/client.go) (Node agent), [`frontend/lib/api.js`](https://github.com/yankuro12/kuropanel/blob/main/frontend/lib/api.js) (API client), [`backend/internal/tasks/tasks.go`](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/tasks/tasks.go) (Task management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Control panel"]
  node_frontend["Panel pages<br/>[page.js]"]
  node_login["Login and users<br/>[page.js]"]
  node_gamesui["Game servers<br/>[page.js]"]
  node_filesui["File manager<br/>[FileManager.js]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["Panel API"]
  node_server["HTTP server<br/>[main.go]"]
  node_auth["Authentication<br/>[auth.go]"]
  node_middleware["Auth middleware<br/>[auth.go]"]
  node_nodes["Node management<br/>[nodes.go]"]
  node_tasks["Task management<br/>[tasks.go]"]
  node_files["File operations<br/>[files.go]"]
  node_games["Game management<br/>[games.go]"]
  node_backup["Backup and restore<br/>[backup.go]"]
  node_admin["Administration<br/>[admin.go]"]
  node_ws_backend["Agent WebSocket<br/>[websocket.go]"]
end

subgraph group_state["State and queue"]
  node_postgres[("PostgreSQL<br/>[db.go]")]
  node_redis["Redis queue<br/>[redis.go]"]
end

subgraph group_agents["Node agents"]
  node_agent["Node agent<br/>[client.go]"]
  node_monitor["Node monitoring<br/>[monitor.go]"]
  node_executor["Command execution<br/>[executor.go]"]
  node_fileops["Agent file operations<br/>[fileops.go]"]
  node_docker["Container control<br/>[docker.go]"]
end

subgraph group_extensions["Extensions"]
  node_plugin_routes["Plugin routes<br/>[routes.go]"]
  node_plugin_manager["Plugin manager<br/>[manager.js]"]
  node_plugin_example["Discord notifier<br/>[main.js]"]
end

node_operator(("Operator"))
node_discord(("Discord webhook"))

node_operator -->|"uses"| node_frontend
node_frontend -->|"requests"| node_api_client
node_login -->|"authenticates via"| node_api_client
node_gamesui -->|"requests"| node_api_client
node_filesui -->|"requests"| node_api_client
node_api_client -->|"calls API"| node_server
node_server -->|"registers routes"| node_auth
node_server -->|"registers routes"| node_nodes
node_server -->|"registers routes"| node_tasks
node_server -->|"registers routes"| node_files
node_server -->|"registers routes"| node_games
node_server -->|"registers routes"| node_backup
node_server -->|"registers routes"| node_admin
node_server -->|"registers routes"| node_plugin_routes
node_server -->|"loads plugins"| node_plugin_manager
node_server -->|"sets up"| node_ws_backend
node_auth -->|"reads and writes"| node_postgres
node_tasks -->|"protects routes"| node_middleware
node_tasks -->|"reads and writes tasks"| node_postgres
node_tasks -->|"queues task IDs"| node_redis
node_nodes -->|"persists nodes"| node_postgres
node_files -->|"protects routes"| node_middleware
node_ws_backend -->|"exchanges messages"| node_agent
node_agent -->|"reads stats"| node_monitor
node_agent -->|"executes commands"| node_executor
node_agent -->|"operates files"| node_fileops
node_agent -->|"controls containers"| node_docker
node_plugin_routes -->|"manages plugins"| node_plugin_manager
node_plugin_manager -->|"loads plugin"| node_plugin_example
node_plugin_example -.->|"posts notifications"| node_discord

click node_frontend "https://github.com/yankuro12/kuropanel/blob/main/frontend/app/page.js"
click node_login "https://github.com/yankuro12/kuropanel/blob/main/frontend/app/login/page.js"
click node_gamesui "https://github.com/yankuro12/kuropanel/blob/main/frontend/app/games/page.js"
click node_filesui "https://github.com/yankuro12/kuropanel/blob/main/frontend/components/FileManager.js"
click node_api_client "https://github.com/yankuro12/kuropanel/blob/main/frontend/lib/api.js"
click node_server "https://github.com/yankuro12/kuropanel/blob/main/backend/cmd/server/main.go"
click node_auth "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/auth/auth.go"
click node_middleware "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/middleware/auth.go"
click node_nodes "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/nodes/nodes.go"
click node_tasks "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/tasks/tasks.go"
click node_files "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/files/files.go"
click node_games "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/games/games.go"
click node_backup "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/backup/backup.go"
click node_admin "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/admin/admin.go"
click node_postgres "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/database/db.go"
click node_redis "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/database/redis.go"
click node_ws_backend "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/websocket/websocket.go"
click node_agent "https://github.com/yankuro12/kuropanel/blob/main/agent/internal/websocket/client.go"
click node_monitor "https://github.com/yankuro12/kuropanel/blob/main/agent/internal/monitor/monitor.go"
click node_executor "https://github.com/yankuro12/kuropanel/blob/main/agent/internal/executor/executor.go"
click node_fileops "https://github.com/yankuro12/kuropanel/blob/main/agent/internal/fileops/fileops.go"
click node_docker "https://github.com/yankuro12/kuropanel/blob/main/agent/internal/docker/docker.go"
click node_plugin_routes "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/plugins/routes.go"
click node_plugin_manager "https://github.com/yankuro12/kuropanel/blob/main/backend/internal/plugins/manager.js"
click node_plugin_example "https://github.com/yankuro12/kuropanel/blob/main/plugins/DiscordNotifier%20-%20contoh%20/main.js"

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_frontend,node_login,node_gamesui,node_filesui,node_api_client toneBlue
class node_server,node_auth,node_middleware,node_nodes,node_tasks,node_files,node_games,node_backup,node_admin,node_ws_backend toneAmber
class node_postgres,node_redis,node_discord toneMint
class node_agent,node_monitor,node_executor,node_fileops,node_docker toneRose
class node_plugin_routes,node_plugin_manager,node_plugin_example,node_operator toneIndigo
```

## Components

### Control panel

- [Panel pages](https://github.com/yankuro12/kuropanel/blob/main/frontend/app/page.js): `frontend/app/page.js`
- [Login and users](https://github.com/yankuro12/kuropanel/blob/main/frontend/app/login/page.js): `frontend/app/login/page.js`
- [Game servers](https://github.com/yankuro12/kuropanel/blob/main/frontend/app/games/page.js): `frontend/app/games/page.js`
- [File manager](https://github.com/yankuro12/kuropanel/blob/main/frontend/components/FileManager.js): `frontend/components/FileManager.js`
- [API client](https://github.com/yankuro12/kuropanel/blob/main/frontend/lib/api.js): `frontend/lib/api.js`

### Panel API

- [HTTP server](https://github.com/yankuro12/kuropanel/blob/main/backend/cmd/server/main.go): `backend/cmd/server/main.go`
- [Authentication](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/auth/auth.go): `backend/internal/auth/auth.go`
- [Auth middleware](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/middleware/auth.go): `backend/internal/middleware/auth.go`
- [Node management](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/nodes/nodes.go): `backend/internal/nodes/nodes.go`
- [Task management](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/tasks/tasks.go): `backend/internal/tasks/tasks.go`
- [File operations](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/files/files.go): `backend/internal/files/files.go`
- [Game management](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/games/games.go): `backend/internal/games/games.go`
- [Backup and restore](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/backup/backup.go): `backend/internal/backup/backup.go`
- [Administration](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/admin/admin.go): `backend/internal/admin/admin.go`
- [Agent WebSocket](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/websocket/websocket.go): `backend/internal/websocket/websocket.go`

### State and queue

- [PostgreSQL](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/database/db.go): `backend/internal/database/db.go`
- [Redis queue](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/database/redis.go): `backend/internal/database/redis.go`

### Node agents

- [Node agent](https://github.com/yankuro12/kuropanel/blob/main/agent/internal/websocket/client.go): `agent/internal/websocket/client.go`
- [Node monitoring](https://github.com/yankuro12/kuropanel/blob/main/agent/internal/monitor/monitor.go): `agent/internal/monitor/monitor.go`
- [Command execution](https://github.com/yankuro12/kuropanel/blob/main/agent/internal/executor/executor.go): `agent/internal/executor/executor.go`
- [Agent file operations](https://github.com/yankuro12/kuropanel/blob/main/agent/internal/fileops/fileops.go): `agent/internal/fileops/fileops.go`
- [Container control](https://github.com/yankuro12/kuropanel/blob/main/agent/internal/docker/docker.go): `agent/internal/docker/docker.go`

### Extensions

- [Plugin routes](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/plugins/routes.go): `backend/internal/plugins/routes.go`
- [Plugin manager](https://github.com/yankuro12/kuropanel/blob/main/backend/internal/plugins/manager.js): `backend/internal/plugins/manager.js`
- [Discord notifier](https://github.com/yankuro12/kuropanel/blob/main/plugins/DiscordNotifier%20-%20contoh%20/main.js): `plugins/DiscordNotifier - contoh /main.js`

### Other components

- **Operator**
- **Discord webhook**

## Connections

- Operator → Panel pages: uses
- Panel pages → API client: requests
- Login and users → API client: authenticates via
- Game servers → API client: requests
- File manager → API client: requests
- API client → HTTP server: calls API
- HTTP server → Authentication: registers routes
- HTTP server → Node management: registers routes
- HTTP server → Task management: registers routes
- HTTP server → File operations: registers routes
- HTTP server → Game management: registers routes
- HTTP server → Backup and restore: registers routes
- HTTP server → Administration: registers routes
- HTTP server → Plugin routes: registers routes
- HTTP server → Plugin manager: loads plugins
- HTTP server → Agent WebSocket: sets up
- Authentication → PostgreSQL: reads and writes
- Task management → Auth middleware: protects routes
- Task management → PostgreSQL: reads and writes tasks
- Task management → Redis queue: queues task IDs
- Node management → PostgreSQL: persists nodes
- File operations → Auth middleware: protects routes
- Agent WebSocket → Node agent: exchanges messages
- Node agent → Node monitoring: reads stats
- Node agent → Command execution: executes commands
- Node agent → Agent file operations: operates files
- Node agent → Container control: controls containers
- Plugin routes → Plugin manager: manages plugins
- Plugin manager → Discord notifier: loads plugin
- Discord notifier → Discord webhook: posts notifications
