# nonnorm/dietpi-dashboard architecture

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

## Overview

DietPi-Dashboard is a web interface for monitoring and managing a DietPi host. A user visits the frontend, authenticates, selects a dashboard feature, and the frontend requests data or actions from a connected backend agent; the agent reads system state or performs the requested operation and returns results for rendering. The major user-facing areas include system metrics, processes, software, services, terminal, and file management. Source excerpts confirm the agent request dispatch, HTTP routes, and encrypted socket framing; some frontend/backend connection details and feature implementations are represented only by their enclosing source paths.

Main entry points: [`crates/frontend/src/pages/template.rs`](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/template.rs) (Page request helpers), [`crates/frontend/src/pages`](https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/pages) (Feature pages), [`crates/backend/src/client.rs`](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/client.rs) (Agent request dispatcher), [`crates/frontend/src/http`](https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/http) (HTTP server and router)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web frontend"]
  node_frontend_main["Frontend startup<br/>[main.rs]"]
  node_http["HTTP server and router"]
  node_auth[("Login and sessions<br/>[auth.rs]")]
  node_pages["Feature pages"]
  node_system_page["System monitoring"]
  node_process_page["Process management<br/>[process.rs]"]
  node_software_page["Software management<br/>[software.rs]"]
  node_service_page["Service status<br/>[service.rs]"]
  node_terminal_page["Web terminal<br/>[terminal.rs]"]
  node_browser_page["File browser<br/>[browser.rs]"]
  node_template["Page request helpers<br/>[template.rs]"]
end

subgraph group_link["Backend link"]
  node_backend_server["Agent listener<br/>[mod.rs]"]
  node_backend_conn["Agent connection<br/>[conn.rs]"]
  node_registry[("Connected agents<br/>[mod.rs]")]
  node_cache[("Response cache<br/>[cache.rs]")]
end

subgraph group_agent["Host agent"]
  node_agent_main["Agent startup and reconnect<br/>[main.rs]"]
  node_agent_client["Agent request dispatcher<br/>[client.rs]"]
  node_getters["Host data queries<br/>[getters.rs]"]
  node_actions["Host management actions<br/>[actions.rs]"]
  node_terminal["Host terminal process<br/>[terminal.rs]"]
  node_host_state[("Host system state<br/>[client.rs]")]
end

subgraph group_shared["Shared foundations"]
  node_socket["Encrypted protocol socket<br/>[lib.rs]"]
  node_messages["Request and response types"]
  node_config["Configuration"]
end

node_user(("Dashboard user"))
node_dietpi_host(("DietPi host"))

node_user -->|"sends HTTP requests"| node_http
node_http -->|"checks sessions"| node_auth
node_http -->|"routes requests"| node_pages
node_pages -->|"renders"| node_system_page
node_pages -->|"renders"| node_process_page
node_pages -->|"renders"| node_software_page
node_pages -->|"renders"| node_service_page
node_pages -->|"renders"| node_terminal_page
node_pages -->|"renders"| node_browser_page
node_system_page -->|"requests data"| node_template
node_process_page -->|"requests data"| node_template
node_software_page -->|"requests data"| node_template
node_service_page -->|"requests data"| node_template
node_browser_page -->|"requests data"| node_template
node_terminal_page -->|"exchanges terminal data"| node_template
node_frontend_main -->|"starts"| node_http
node_frontend_main -->|"starts"| node_backend_server
node_backend_server -->|"spawns for connections"| node_backend_conn
node_backend_server -->|"shares"| node_registry
node_template -->|"selects agent"| node_registry
node_template -->|"sends requests"| node_backend_conn
node_backend_conn -->|"uses"| node_cache
node_backend_conn -->|"exchanges frames"| node_socket
node_agent_main -->|"connects and runs"| node_agent_client
node_agent_client -->|"exchanges frames"| node_socket
node_socket -->|"encodes and decodes"| node_messages
node_agent_client -->|"dispatches queries"| node_getters
node_agent_client -->|"dispatches actions"| node_actions
node_agent_client -->|"forwards terminal messages"| node_terminal
node_getters -->|"reads"| node_host_state
node_host_state -->|"reflects system state"| node_dietpi_host
node_actions -->|"manages"| node_dietpi_host
node_terminal -->|"runs host terminal"| node_dietpi_host
node_agent_main -->|"loads configuration"| node_config
node_frontend_main -->|"loads configuration"| node_config

click node_frontend_main "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/main.rs"
click node_http "https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/http"
click node_auth "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/http/auth.rs"
click node_pages "https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/pages"
click node_system_page "https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/pages/system"
click node_process_page "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/process.rs"
click node_software_page "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/software.rs"
click node_service_page "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/service.rs"
click node_terminal_page "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/terminal.rs"
click node_browser_page "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/browser.rs"
click node_template "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/template.rs"
click node_backend_server "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/mod.rs"
click node_backend_conn "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/conn.rs"
click node_registry "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/mod.rs"
click node_cache "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/cache.rs"
click node_socket "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/proto/src/lib.rs"
click node_messages "https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/proto/src"
click node_config "https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/config/src"
click node_agent_main "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/main.rs"
click node_agent_client "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/client.rs"
click node_getters "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/getters.rs"
click node_actions "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/actions.rs"
click node_terminal "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/terminal.rs"
click node_host_state "https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/client.rs"

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_main,node_http,node_auth,node_pages,node_system_page,node_process_page,node_software_page,node_service_page,node_terminal_page,node_browser_page,node_template,node_user toneBlue
class node_backend_server,node_backend_conn,node_registry,node_cache toneAmber
class node_agent_main,node_agent_client,node_getters,node_actions,node_terminal,node_host_state toneMint
class node_socket,node_messages,node_config toneRose
class node_dietpi_host toneIndigo
```

## Components

### Web frontend

- [Frontend startup](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/main.rs): `crates/frontend/src/main.rs`
- [HTTP server and router](https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/http): `crates/frontend/src/http`
- [Login and sessions](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/http/auth.rs): `crates/frontend/src/http/auth.rs`
- [Feature pages](https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/pages): `crates/frontend/src/pages`
- [System monitoring](https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/frontend/src/pages/system): `crates/frontend/src/pages/system`
- [Process management](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/process.rs): `crates/frontend/src/pages/process.rs`
- [Software management](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/software.rs): `crates/frontend/src/pages/software.rs`
- [Service status](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/service.rs): `crates/frontend/src/pages/service.rs`
- [Web terminal](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/terminal.rs): `crates/frontend/src/pages/terminal.rs`
- [File browser](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/browser.rs): `crates/frontend/src/pages/browser.rs`
- [Page request helpers](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/pages/template.rs): `crates/frontend/src/pages/template.rs`

### Backend link

- [Agent listener](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/mod.rs): `crates/frontend/src/backend/mod.rs`
- [Agent connection](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/conn.rs): `crates/frontend/src/backend/conn.rs`
- [Connected agents](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/mod.rs): `crates/frontend/src/backend/mod.rs`
- [Response cache](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/frontend/src/backend/cache.rs): `crates/frontend/src/backend/cache.rs`

### Host agent

- [Agent startup and reconnect](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/main.rs): `crates/backend/src/main.rs`
- [Agent request dispatcher](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/client.rs): `crates/backend/src/client.rs`
- [Host data queries](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/getters.rs): `crates/backend/src/getters.rs`
- [Host management actions](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/actions.rs): `crates/backend/src/actions.rs`
- [Host terminal process](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/terminal.rs): `crates/backend/src/terminal.rs`
- [Host system state](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/backend/src/client.rs): `crates/backend/src/client.rs`

### Shared foundations

- [Encrypted protocol socket](https://github.com/nonnorm/dietpi-dashboard/blob/main/crates/proto/src/lib.rs): `crates/proto/src/lib.rs`
- [Request and response types](https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/proto/src): `crates/proto/src`
- [Configuration](https://github.com/nonnorm/dietpi-dashboard/tree/main/crates/config/src): `crates/config/src`

### Other components

- **Dashboard user**
- **DietPi host**

## Connections

- Dashboard user → HTTP server and router: sends HTTP requests
- HTTP server and router → Login and sessions: checks sessions
- HTTP server and router → Feature pages: routes requests
- Feature pages → System monitoring: renders
- Feature pages → Process management: renders
- Feature pages → Software management: renders
- Feature pages → Service status: renders
- Feature pages → Web terminal: renders
- Feature pages → File browser: renders
- System monitoring → Page request helpers: requests data
- Process management → Page request helpers: requests data
- Software management → Page request helpers: requests data
- Service status → Page request helpers: requests data
- File browser → Page request helpers: requests data
- Web terminal → Page request helpers: exchanges terminal data
- Frontend startup → HTTP server and router: starts
- Frontend startup → Agent listener: starts
- Agent listener → Agent connection: spawns for connections
- Agent listener → Connected agents: shares
- Page request helpers → Connected agents: selects agent
- Page request helpers → Agent connection: sends requests
- Agent connection → Response cache: uses
- Agent connection → Encrypted protocol socket: exchanges frames
- Agent startup and reconnect → Agent request dispatcher: connects and runs
- Agent request dispatcher → Encrypted protocol socket: exchanges frames
- Encrypted protocol socket → Request and response types: encodes and decodes
- Agent request dispatcher → Host data queries: dispatches queries
- Agent request dispatcher → Host management actions: dispatches actions
- Agent request dispatcher → Host terminal process: forwards terminal messages
- Host data queries → Host system state: reads
- Host system state → DietPi host: reflects system state
- Host management actions → DietPi host: manages
- Host terminal process → DietPi host: runs host terminal
- Agent startup and reconnect → Configuration: loads configuration
- Frontend startup → Configuration: loads configuration
