Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
- Complete Unraid WebGUI inventory (~100 pages documented) - Unraid GraphQL API research and documentation - Homarr architecture documentation - Orchis GTK theme design tokens (TypeScript) - Project README with implementation plan Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1506 lines
48 KiB
Markdown
1506 lines
48 KiB
Markdown
# Unraid WebGUI - Complete Page & Feature Inventory
|
|
|
|
**Source Repository:** https://github.com/unraid/webgui
|
|
**Technology Stack:** PHP (server-side), jQuery (client-side), Nchan (WebSocket real-time updates), nginx (web server)
|
|
**Document Root:** `/usr/local/emhttp`
|
|
**State Files:** `/var/local/emhttp/` (INI files generated by emhttp daemon)
|
|
**Configuration:** `/boot/config/` (persistent flash storage)
|
|
|
|
---
|
|
|
|
## TABLE OF CONTENTS
|
|
|
|
1. [Architecture Overview](#1-architecture-overview)
|
|
2. [Page System (.page files)](#2-page-system)
|
|
3. [Navigation Structure](#3-navigation-structure)
|
|
4. [Header Bar](#4-header-bar)
|
|
5. [Footer Bar](#5-footer-bar)
|
|
6. [Dashboard](#6-dashboard)
|
|
7. [Main (Array Devices)](#7-main-array-devices)
|
|
8. [Shares](#8-shares)
|
|
9. [Users](#9-users)
|
|
10. [Settings](#10-settings)
|
|
11. [Plugins](#11-plugins)
|
|
12. [Docker](#12-docker)
|
|
13. [VMs](#13-vms)
|
|
14. [Tools](#14-tools)
|
|
15. [About](#15-about)
|
|
16. [Apps](#16-apps)
|
|
17. [Favorites](#17-favorites)
|
|
18. [Device Detail Pages](#18-device-detail-pages)
|
|
19. [File Browser](#19-file-browser)
|
|
20. [Notification System](#20-notification-system)
|
|
21. [Real-Time Monitoring (Nchan)](#21-real-time-monitoring)
|
|
22. [Modal Dialogs & Wizards](#22-modal-dialogs--wizards)
|
|
23. [Themes](#23-themes)
|
|
24. [Authentication & Login](#24-authentication--login)
|
|
25. [Data Sources](#25-data-sources)
|
|
26. [JavaScript Libraries](#26-javascript-libraries)
|
|
27. [CSS Architecture](#27-css-architecture)
|
|
|
|
---
|
|
|
|
## 1. Architecture Overview
|
|
|
|
### Repository Structure
|
|
```
|
|
emhttp/
|
|
auth-request.php # Authentication request handler
|
|
login.php # Login page
|
|
update.htm # Form POST target (iframe progress frame)
|
|
update.php # Form POST handler (runs commands)
|
|
logging.htm # Logging iframe
|
|
manifest.json # PWA manifest
|
|
robots.txt # Search engine directives
|
|
plugins/
|
|
dynamix/ # Core WebGUI plugin (main UI)
|
|
dynamix.docker.manager/ # Docker container management
|
|
dynamix.vm.manager/ # Virtual machine management
|
|
dynamix.plugin.manager/ # Plugin management
|
|
dynamix.gui.search/ # GUI search functionality
|
|
dynamix.apcupsd/ # APC UPS daemon integration
|
|
languages/
|
|
en_US/ # English translations
|
|
webGui -> plugins/dynamix # Symlink: /webGui -> /plugins/dynamix
|
|
state -> /var/local/emhttp # Symlink to state files
|
|
boot -> /boot # Symlink to boot device
|
|
mnt -> /mnt # Symlink to mount points
|
|
log -> /var/log # Symlink to logs
|
|
```
|
|
|
|
### Page File Format (.page)
|
|
Each `.page` file is a self-contained page definition with a metadata header and PHP/HTML body:
|
|
```
|
|
Menu="Tasks:1" # Menu placement (parent:order)
|
|
Type="xmenu" # Page type (xmenu=top-level, menu=sub-menu)
|
|
Title="Page Title" # Display title
|
|
Icon="icon-name" # Icon class
|
|
Tag="fa-icon" # FontAwesome icon
|
|
Code="eXXX" # Unicode icon code (for Unraid font)
|
|
Tabs="true" # Enable tabbed sub-pages
|
|
Cond="PHP expression" # Conditional display
|
|
Nchan="script1,script2" # Real-time update scripts to activate
|
|
Lock="true" # Enable drag-sort lock button
|
|
Load="30" # Auto-refresh interval (seconds)
|
|
---
|
|
<?PHP
|
|
// Page content (PHP + HTML + JavaScript)
|
|
?>
|
|
```
|
|
|
|
### Data Flow
|
|
1. `emhttp` daemon monitors hardware and writes state to `/var/local/emhttp/*.ini`
|
|
2. PHP pages read INI files: `parse_ini_file('state/disks.ini', true)`
|
|
3. Nchan scripts poll state files and push updates via WebSocket
|
|
4. JavaScript receives updates and modifies DOM in real-time
|
|
5. Form submissions POST to `update.htm` / `update.php` which run shell commands
|
|
|
|
### Key State Files (in `/var/local/emhttp/`)
|
|
| File | Content |
|
|
|------|---------|
|
|
| `var.ini` | System variables (array state, license, server name, etc.) |
|
|
| `disks.ini` | All disk information (serial, temp, size, status, errors) |
|
|
| `shares.ini` | Share definitions and status |
|
|
| `users.ini` | User accounts |
|
|
| `sec.ini` | SMB security settings per share |
|
|
| `sec_nfs.ini` | NFS security settings per share |
|
|
| `network.ini` | Network interface configuration |
|
|
| `nginx.ini` | Nginx/SSL status |
|
|
| `devs.ini` | Unassigned/open devices |
|
|
| `diskload.ini` | Real-time disk I/O rates |
|
|
| `cpuload.ini` | CPU load data |
|
|
| `wireless.ini` | WiFi status |
|
|
|
|
---
|
|
|
|
## 2. Page System
|
|
|
|
### Page Builder (`include/PageBuilder.php`)
|
|
- Scans all `.page` files across all plugin directories
|
|
- Parses metadata headers
|
|
- Builds navigation menu structure based on `Menu=` directives
|
|
- Handles conditional page display via `Cond=` directives
|
|
- Supports tabbed and tabless page layouts
|
|
|
|
### Menu Hierarchy
|
|
- **Tasks** - Top navigation tabs (Dashboard, Main, Shares, Users, Settings, Plugins, Docker, VMs, Tools, About)
|
|
- **OtherSettings** - Settings sub-pages
|
|
- **NetworkSettings** - Network settings sub-pages
|
|
- **NetworkServices** - Network services sub-pages
|
|
- **UserPreferences** - User preference sub-pages
|
|
- **UNRAID-OS** - Tools > Unraid OS sub-pages
|
|
- **WebGui** - Tools > WebGui sub-pages
|
|
- **Buttons** - Header bar buttons (right side)
|
|
|
|
---
|
|
|
|
## 3. Navigation Structure
|
|
|
|
### Top Navigation / Sidebar (Navigation/Main.php)
|
|
The navigation renders differently based on theme:
|
|
- **Top Nav themes** (azure, gray): Horizontal tab bar at top
|
|
- **Sidebar themes** (black, white): Vertical sidebar on left
|
|
|
|
**Main Navigation Items (in order):**
|
|
1. **Dashboard** (Menu="Tasks:1", Code=e943)
|
|
2. **Main** (Menu="Tasks:1", Code=e908) - Array devices
|
|
3. **Shares** (Menu="Tasks:2", Code=e92a) - User/disk shares
|
|
4. **Users** (Menu="Tasks:3", Code=e945) - Conditional on display setting
|
|
5. **Settings** (Menu="Tasks:4", Code=e924)
|
|
6. **Plugins** (Menu="Tasks:50", Code=e944)
|
|
7. **Docker** (Menu="Tasks:60") - Conditional on Docker enabled
|
|
8. **VMs** (Menu="Tasks:70") - Conditional on VMs enabled
|
|
9. **Apps** (Menu="Tasks:80", Code=e942) - Community Applications
|
|
10. **Favorites** (Menu="Tasks:2", Code=f08a) - Conditional on favorites existing
|
|
11. **Tools** (Menu="Tasks:90", Code=e909)
|
|
12. **About** (Menu="Tools:90")
|
|
|
|
### Header Bar Buttons (right side)
|
|
- **Lock/Unlock** - Toggle drag-sort for Docker/VM containers
|
|
- **Array Usage Bar** - Visual bar showing array utilization %
|
|
- **Search** (gui_search) - Global page search
|
|
- **Terminal** - Open web terminal (ttyd)
|
|
- **Log** - Open syslog viewer
|
|
- **Help** - Toggle inline help text
|
|
- **Notifications** - Bell icon with alert counter
|
|
- **Feedback** - Bug report / feature request
|
|
- **Language** - Language selector
|
|
- **Logout** - User logout
|
|
- **Info** - System info popup
|
|
|
|
---
|
|
|
|
## 4. Header Bar
|
|
|
|
**File:** `include/DefaultPageLayout/Header.php`
|
|
|
|
Components:
|
|
- **Banner Image** - Customizable PNG banner (`/boot/config/plugins/dynamix/banner.png`)
|
|
- **OS Version** - `<unraid-header-os-version>` web component
|
|
- **Array Usage** - Progress bar (sidebar themes show it in header)
|
|
- **My Servers** - Unraid Connect cloud integration (`myservers2.php`)
|
|
|
|
---
|
|
|
|
## 5. Footer Bar
|
|
|
|
**File:** `include/DefaultPageLayout/Footer.php`
|
|
|
|
Components:
|
|
- **Array Status Indicator** - Color-coded status (Started=green, Stopped=red, Starting/Stopping=orange)
|
|
- Shows progress text during parity operations
|
|
- **User Notice Area** - Red text notifications
|
|
- **Theme Switcher** - `<unraid-theme-switcher>` web component (azure/gray/black/white)
|
|
- **Copyright** - "Unraid webGui (c) YYYY, Lime Technology, Inc."
|
|
- **Manual Link** - Link to online documentation
|
|
- **WiFi Icon** - If wlan0 exists, shows WiFi status indicator
|
|
|
|
---
|
|
|
|
## 6. Dashboard
|
|
|
|
**Files:** `Dashboard.page` (menu container), `DashStats.page` (content)
|
|
**Nchan Scripts:** `update_1`, `update_2`, `update_3`, `ups_status`, `vm_dashusage`, `wg_poller`
|
|
|
|
### Layout
|
|
The Dashboard is a drag-and-drop tile layout with 3 columns. Tiles can be rearranged and hidden. Configuration saved in cookie `dashboard_settings.json`.
|
|
|
|
### Tiles/Sections
|
|
|
|
#### 6.1 System Information Tile
|
|
- **Server Name & Description**
|
|
- **OS Version** with update notification
|
|
- **Uptime**
|
|
- **CPU Model** (model name, cores, threads, frequency)
|
|
- **Motherboard** (manufacturer, product)
|
|
- **License Type** (Basic/Plus/Pro/Lifetime)
|
|
- **Flash GUID**
|
|
|
|
#### 6.2 CPU Tile
|
|
- **Real-time CPU usage graph** (ApexCharts donut)
|
|
- **Per-core utilization** bars
|
|
- **CPU temperature** (from `sensors`)
|
|
- **HT/Turbo status**
|
|
- Data source: `/proc/stat`, `sensors -uA`
|
|
|
|
#### 6.3 RAM Tile
|
|
- **Memory usage donut chart**
|
|
- **Total/Used/Free** with percentage
|
|
- **Per-service breakdown** (System, Docker, VMs, etc.)
|
|
- Data source: `/proc/meminfo`
|
|
|
|
#### 6.4 Array Tile
|
|
- **Array status** (Started/Stopped/Maintenance)
|
|
- **Parity status** (valid/invalid/building)
|
|
- **Parity check progress** (if running)
|
|
- **Next scheduled parity check**
|
|
- **Disk utilization** per disk with colored bars
|
|
- **Temperature** per disk
|
|
- **Start/Stop Array** button
|
|
- Data source: `state/var.ini`, `state/disks.ini`
|
|
|
|
#### 6.5 Pool Tiles (one per pool)
|
|
- **Pool name & filesystem type** (btrfs/xfs/zfs)
|
|
- **Utilization bar** with used/free
|
|
- **Per-device status**
|
|
- **Temperature** per device
|
|
|
|
#### 6.6 Network Tile
|
|
- **Interface list** (eth0, bond0, br0, wlan0, etc.)
|
|
- **IP addresses** (IPv4/IPv6)
|
|
- **Link speed**
|
|
- **Real-time throughput** (rx/tx bytes/sec)
|
|
- Data source: `/sys/class/net/`, `ip addr`
|
|
|
|
#### 6.7 Docker Tile
|
|
- **Running/Stopped count**
|
|
- **Container list** with status indicators
|
|
- **Quick start/stop** actions
|
|
- **CPU/Memory** per container
|
|
- Data source: Docker API via `DockerClient.php`
|
|
|
|
#### 6.8 VMs Tile
|
|
- **Running/Stopped count**
|
|
- **VM list** with status
|
|
- **Quick start/stop/pause** actions
|
|
- Data source: libvirt API via `libvirt.php`
|
|
|
|
#### 6.9 UPS Tile (conditional)
|
|
- **UPS Model**
|
|
- **Status** (Online/On Battery)
|
|
- **Battery Charge %**
|
|
- **Runtime Left**
|
|
- **Load %**
|
|
- **Output Voltage**
|
|
- Data source: `apcaccess` command
|
|
|
|
#### 6.10 WireGuard VPN Tile (conditional)
|
|
- **Tunnel status** (active/inactive)
|
|
- **Peer connections**
|
|
- **Handshake times**
|
|
- **Transfer statistics**
|
|
- Data source: `wg show` command
|
|
|
|
#### 6.11 Shares Tile
|
|
- **Share list** with SMB/NFS export status
|
|
- **Size/Free** per share
|
|
- Data source: `state/shares.ini`
|
|
|
|
#### 6.12 Custom Tiles
|
|
- Plugins can inject custom dashboard tiles via the tile API
|
|
|
|
### Real-Time Updates
|
|
- **update_1**: RAM usage, system temps, fan speeds, flash/log/docker filesystem usage, share sizes
|
|
- **update_2**: Parity status, disk temps, disk I/O, array status, next parity check schedule
|
|
- **update_3**: CPU usage per core, CPU temperature
|
|
- **ups_status**: UPS power/battery status
|
|
- **vm_dashusage**: VM CPU/memory usage
|
|
- **wg_poller**: WireGuard tunnel status
|
|
|
|
---
|
|
|
|
## 7. Main (Array Devices)
|
|
|
|
**File:** `Main.page` (container)
|
|
**Sub-tabs:**
|
|
|
|
### 7.1 Array Devices Tab
|
|
**File:** `ArrayDevices.page`
|
|
- **Table columns:** Device, Identification, Power/Temp, Reads, Writes, Errors, FS, Size, Used, Free
|
|
- **Per-disk rows:** Parity, Parity2, Disk1-DiskN
|
|
- **Status indicators:** Color orbs (green=normal, yellow=warning, red=error, grey=standby)
|
|
- **Click disk name** -> Device detail page
|
|
- **Totals row** at bottom (aggregate size/used/free)
|
|
- **Deprecated filesystem warnings** (reiserfs, etc.)
|
|
- **Data source:** `state/disks.ini`, `diskload.ini`
|
|
- **Nchan:** `device_list`, `disk_load`, `parity_list`
|
|
|
|
### 7.2 Pool Devices Tab
|
|
**File:** `CacheDevices.page`
|
|
- **Same table structure** as array devices
|
|
- **Per-pool sections** with headers
|
|
- **Add Pool** button (dialog: pool name, filesystem type)
|
|
- **Add Bootable Pool** button
|
|
- **Add ZFS Subpool** button (special, logs, dedup, cache, spares)
|
|
- **Pool validation** (reserved names check, duplicate check)
|
|
- **Actions:** Format, Delete Pool, Balance, Scrub
|
|
|
|
### 7.3 Boot Device Tab
|
|
**File:** `BootDevice.page`
|
|
- **Flash device info** (same columns as array devices)
|
|
- **Vendor, Product, GUID**
|
|
|
|
### 7.4 Unassigned Devices Tab
|
|
**File:** `OpenDevices.page`
|
|
- **Lists all detected but unassigned storage devices**
|
|
- **Same table columns** as array devices
|
|
- **Conditional:** Only shows if unassigned devices exist
|
|
|
|
### 7.5 Array Operation Tab
|
|
**File:** `ArrayOperation.page`
|
|
- **Start/Stop Array** buttons
|
|
- **Array status indicator** (orb color)
|
|
- **Maintenance Mode** checkbox
|
|
- **Encryption controls:**
|
|
- Passphrase input with show/hide toggle
|
|
- Keyfile upload
|
|
- Encryption status (Missing key, Wrong key)
|
|
- Reformat permission checkbox
|
|
- **Parity operations:**
|
|
- Start/Stop/Pause parity check
|
|
- Check/correct toggle
|
|
- Progress display with ETA
|
|
- Error count
|
|
- **Disk spin up/down** controls per disk and group
|
|
- **Clear statistics** button
|
|
- **Real-time I/O toggle** (reads/writes vs. throughput display)
|
|
- **Nchan:** `device_list`, `disk_load`, `parity_list`
|
|
|
|
---
|
|
|
|
## 8. Shares
|
|
|
|
**File:** `Shares.page` (container), conditional on array started
|
|
**Sub-tabs:**
|
|
|
|
### 8.1 User Shares
|
|
**File:** `ShareList.page`
|
|
- **Table columns:** Name, Comment, SMB, NFS, Storage, Size, Free
|
|
- **Each share links** to ShareEdit page
|
|
- **SMB/NFS status** shows security level (Public/Secure/Private)
|
|
- **Compute All** button - calculates sizes for all shares
|
|
- **Add Share** button -> ShareEdit form
|
|
- **Clean Up** button - removes orphaned share configs
|
|
- **Data source:** `state/shares.ini`, computed via `ShareList.php`
|
|
|
|
### 8.2 Disk Shares
|
|
**File:** `DiskList.page`
|
|
- **Table columns:** Name, Comment, SMB, NFS, Type, Size, Free
|
|
- **Per-disk share listing**
|
|
- **Compute All** button
|
|
- **Conditional:** Only if disk shares enabled
|
|
|
|
### 8.3 Share Edit Page
|
|
**File:** `ShareEdit.page` (accessed via `Share?name=sharename`)
|
|
- **Share name** (immutable after creation)
|
|
- **Comment/description**
|
|
- **Allocation method:** High-water, Fill-up, Most-free
|
|
- **Minimum free space** (floor)
|
|
- **Split level** control
|
|
- **Included/Excluded disks** (multi-select dropdowns)
|
|
- **Primary storage:** Pool selection + use mode (Cache Yes/No/Only/Prefer)
|
|
- **Secondary storage:** Pool or Array selection
|
|
- **Copy-on-write** setting (Auto/Yes/No)
|
|
|
|
### 8.4 Per-Share Security Settings
|
|
**SMB Security** (`SecuritySMB.page`):
|
|
- **Export:** Yes/No/Yes (Hidden)
|
|
- **Security:** Public/Secure/Private
|
|
- **Per-user access:** Read/Write, Read-only, No access
|
|
- **Clone settings** from another share
|
|
|
|
**NFS Security** (`SecurityNFS.page`):
|
|
- **Export:** Yes/No
|
|
- **Security:** Public/Secure/Private
|
|
- **Host access list** (IP/subnet rules, multi-line textarea)
|
|
- **Clone settings** from another share
|
|
|
|
---
|
|
|
|
## 9. Users
|
|
|
|
**File:** `Users.page` (container), `UserList.page` (listing)
|
|
|
|
### 9.1 User List
|
|
- **Two sections:** Management Access (root), Shares Access (regular users)
|
|
- **Per-user display:** Avatar image, username, description
|
|
- **Click user** -> UserEdit page
|
|
- **Add User** button -> UserAdd page
|
|
- **Data source:** `state/users.ini`, `/boot/config/plugins/dynamix/users/`
|
|
|
|
### 9.2 Add User
|
|
**File:** `UserAdd.page`
|
|
- **Username** (lowercase, alphanumeric, underscores, dashes)
|
|
- **Description**
|
|
- **Custom image** (PNG drag-and-drop upload)
|
|
- **Password** with strength meter (zxcvbn.js)
|
|
- **Retype password** confirmation
|
|
|
|
### 9.3 Edit User
|
|
**File:** `UserEdit.page`
|
|
- **Same fields** as Add User
|
|
- **Change password**
|
|
- **SSH Authorized Keys** textarea (for root user)
|
|
- Key format validation (RSA, DSA, ECDSA, Ed25519, SK keys)
|
|
- `from=` option validation (IP/hostname)
|
|
- **Delete user** capability
|
|
|
|
---
|
|
|
|
## 10. Settings
|
|
|
|
**File:** `Settings.page` (panel layout with icons)
|
|
**Layout:** Grid of icon panels linking to sub-pages
|
|
**Favorites support:** Heart icon to add settings pages to Favorites
|
|
|
|
### 10.1 System Settings (Menu="OtherSettings")
|
|
|
|
#### Identification
|
|
**File:** `Identification.page`
|
|
- Server name (NetBIOS compatible, max 15 chars)
|
|
- Description
|
|
- Model
|
|
- Requires array stopped to change
|
|
|
|
#### Date and Time
|
|
**File:** `DateTime.page`
|
|
- Current date/time display
|
|
- Date format (7 formats)
|
|
- Time format (12h/24h)
|
|
- Time zone selection (from timezones.key)
|
|
- NTP server configuration (4 servers)
|
|
- PTP hardware clock selection per interface
|
|
- Use NTP/manual toggle
|
|
|
|
#### Disk Settings
|
|
**File:** `DiskSettings.page`
|
|
- **Disk temperature warning/critical thresholds** (HDD and SSD separate)
|
|
- **Default filesystem** (xfs, btrfs, zfs, xfs encrypted, etc.)
|
|
- **Default allocation** (high-water, fill-up, most-free)
|
|
- **Spindown delay** (Never, 15min - 9hrs, 1-24hrs)
|
|
- **Spinup groups** (parallel spinup)
|
|
- **SMART monitoring:** Enable/disable, polling interval
|
|
- Event notification checkboxes per SMART attribute
|
|
- Custom attribute IDs
|
|
- Per-attribute thresholds
|
|
- **Encryption controls:**
|
|
- Current key status
|
|
- Change passphrase / keyfile
|
|
- Download keyfile
|
|
|
|
#### Global Share Settings
|
|
**File:** `ShareSettings.page`
|
|
- **Enable user shares** (Yes/No)
|
|
- **Enable disk shares** (Yes/No/Auto)
|
|
- **Permitted disk shares** filter
|
|
- **Included/Excluded disks** (global)
|
|
- **Max open files** limit (from `/proc/sys/fs/file-max`)
|
|
|
|
#### Network Settings
|
|
**File:** `NetworkSettings.page` (tabbed container)
|
|
- **Interface eth0** (`Eth0.page`)
|
|
- Enable bonding (modes: balance-rr, active-backup, balance-xor, broadcast, 802.3ad, balance-tlb, balance-alb)
|
|
- Enable bridging
|
|
- Interface members selection
|
|
- IPv4/IPv6 configuration (DHCP/Static)
|
|
- IP address, Netmask, Gateway
|
|
- Metric (gateway priority)
|
|
- DNS servers
|
|
- Jumbo frames (MTU 9000)
|
|
- VLANs (add VLAN interfaces)
|
|
- **Additional Interfaces** (`EthX.page`) - Dynamic per interface
|
|
- **Wireless wlan0** (`Wireless.page`)
|
|
- Enable WiFi
|
|
- Regulatory region
|
|
- SSID, Security (WPA2/WPA3)
|
|
- WiFi password
|
|
- IP configuration
|
|
- **Routing Table** (`RoutingTable.page`)
|
|
- Current routes display (auto-refreshing)
|
|
- Add static route (network, gateway, metric)
|
|
- Delete route
|
|
- **Interface Extra** (`NetworkExtra.page`)
|
|
- Include/Exclude specific interfaces
|
|
- **Interface Rules** (`NetworkRules.page`)
|
|
- MAC address to ethN mapping
|
|
- Persistent interface naming
|
|
|
|
#### Management Access
|
|
**File:** `ManagementAccess.page` (tabbed)
|
|
- **Start page** selection
|
|
- **Port** (HTTP/HTTPS)
|
|
- **SSL certificate** management
|
|
- Self-signed certificate
|
|
- Let's Encrypt certificate (with auto-renewal)
|
|
- User-provided certificate
|
|
- Wildcard certificate support
|
|
- **Strict transport security** (HSTS)
|
|
- **Bind management** to specific interface
|
|
- **Telnet/SSH** enable/disable
|
|
- **Spin down/Spin up delay** for management operations
|
|
|
|
#### Docker Settings
|
|
**File:** `DockerSettings.page` (in `dynamix.docker.manager`)
|
|
- **Enable Docker** (Yes/No)
|
|
- **Docker storage driver** (overlay2, btrfs, zfs)
|
|
- **Docker directory** path
|
|
- **Docker image** file location
|
|
- **Docker image size**
|
|
- **Docker custom networks** (bridge/macvlan/ipvlan)
|
|
- Subnet, Gateway, IP range
|
|
- IPv4/IPv6 configuration
|
|
- Parent interface selection
|
|
- **Docker log rotation**
|
|
- **Docker preservation mode**
|
|
- **Containers readmore** toggle
|
|
|
|
#### VM Manager Settings
|
|
**File:** `VMSettings.page` (in `dynamix.vm.manager`)
|
|
- **Enable VMs** (Yes/No)
|
|
- **PCIe ACS override** (upstream/downstream/multifunction)
|
|
- **VFIO allow unsafe interrupts**
|
|
- **Libvirt storage** path
|
|
- **Default ISO/VirtIO** paths
|
|
- **Hugepages** configuration
|
|
- **Machine type** (i440fx/q35)
|
|
- **Hyper-V** enlightenments
|
|
- **OVMF UEFI** firmware path
|
|
- **VM usage statistics** enable
|
|
- **Network source** (virbr0/bridge/macvtap)
|
|
- **VM shutdown timeout**
|
|
|
|
#### UPS Settings
|
|
**File:** `UPSsettings.page` (in `dynamix.apcupsd`)
|
|
- **Enable APC UPS daemon**
|
|
- **UPS cable** (USB/Simple/Smart/Ether/Custom)
|
|
- **UPS type** (USB/PCNET/SNMP)
|
|
- **Device** path
|
|
- **Battery level** for shutdown (%)
|
|
- **Minutes** for shutdown
|
|
- **Timeout** for shutdown
|
|
- **Kill on power back** delay
|
|
- **UPS Details** sub-tab: Full key-value status table (auto-refreshing every 3s)
|
|
|
|
#### CPU Pinning
|
|
**File:** `CPUset.page` (tabbed container)
|
|
- **CPU Pinning VM** (`CPUvms.page`) - Per-VM CPU core assignment matrix
|
|
- **CPU Pinning Docker** (`CPUpin.page`) - Per-container CPU core assignment matrix
|
|
- **CPU Isolation** (`CPUisol.page`) - Isolate cores from system scheduler
|
|
- **Visual table** with checkboxes per CPU core per service
|
|
- **Intel hybrid core types** (P-core/E-core) display
|
|
|
|
#### Power Mode
|
|
**File:** `PowerMode.page`
|
|
- **CPU governor selection:**
|
|
- Best power efficiency (powersave)
|
|
- Balanced performance (schedutil/ondemand)
|
|
- Best performance (performance)
|
|
- Shows unavailable modes
|
|
- Detects hypervisor environment
|
|
|
|
### 10.2 Network Services (Menu="NetworkServices")
|
|
|
|
#### SMB
|
|
**File:** `SMB.page` (tabbed container)
|
|
- **SMB Settings** (`SMBsettings.page`)
|
|
- Enable SMB (No/Yes Workgroup/Yes Active Directory)
|
|
- Hide dot files
|
|
- SMB Multi Channel
|
|
- Enhanced macOS interoperability
|
|
- NetBIOS
|
|
- Minimum/Maximum SMB protocol
|
|
- Fruit (macOS) support
|
|
- **Workgroup Settings** (`SMBWorkGroup.page`)
|
|
- Workgroup name
|
|
- Local master browser
|
|
- **SMB Extras** (`SMBExtras.page`)
|
|
- Extra smb.conf configuration (textarea)
|
|
- **Active Directory** (`SMBActiveDirectory.page`, conditional)
|
|
- AD domain name (FQDN)
|
|
- Short domain name
|
|
- Admin username/password
|
|
- Join/Leave domain
|
|
|
|
#### NFS
|
|
**File:** `NFS.page`
|
|
- Enable NFS (Yes/No)
|
|
- NFS version (3/4)
|
|
- NFS threads count
|
|
- FUSE remember setting
|
|
|
|
#### FTP Server
|
|
**File:** `FTP.page`
|
|
- Enable/Disable FTP server
|
|
- FTP user list
|
|
|
|
#### Syslog Server
|
|
**File:** `SyslogSettings.page`
|
|
- Enable syslog server (receive remote logs)
|
|
- Server folder path
|
|
- Log rotation settings
|
|
- Remote syslog forwarding
|
|
|
|
#### VPN Manager
|
|
**File:** `VPNmanager.page` (tabbed container)
|
|
- **WireGuard Tunnels** (`WG0.page`, `WGX.page`)
|
|
- Tunnel type (Remote access to LAN, Remote access to server, LAN-to-LAN, Remote tunneled)
|
|
- Local tunnel address, endpoint, DNS
|
|
- Peer configurations (name, public key, allowed IPs, persistent keepalive)
|
|
- Generate keys, QR codes
|
|
- Start/Stop tunnel
|
|
- Status: handshake time, transfer rx/tx
|
|
- Nchan: `wg_poller`
|
|
|
|
#### Tailscale
|
|
**File:** `Tailscale.page`
|
|
- Install Tailscale plugin button
|
|
- (Full functionality added by plugin after install)
|
|
|
|
#### Outgoing Proxy Manager
|
|
**File:** `OutgoingProxy.page`
|
|
- Up to 3 proxy configurations
|
|
- Proxy URL, username, password
|
|
- Active proxy selection
|
|
- No-proxy exclusion list
|
|
|
|
### 10.3 User Preferences (Menu="UserPreferences")
|
|
|
|
#### Display Settings
|
|
**File:** `DisplaySettings.page`
|
|
- **Language** selection
|
|
- **Number format** (1,000.00 vs 1.000,00)
|
|
- **Temperature unit** (Celsius/Fahrenheit)
|
|
- **Scale** (bytes display format)
|
|
- **Dashboard columns** layout
|
|
- **Show banner** (Yes/No)
|
|
- **Custom banner image** (PNG drag-and-drop upload)
|
|
- **Banner text color** / **background color**
|
|
- **Header custom text**
|
|
- **Font size** (slider/select)
|
|
- **Page viewer** refresh rate
|
|
- **Show array usage** in header
|
|
- **Show disk utilization** text/colors
|
|
- **Warning/Critical** usage thresholds
|
|
- **Tab mode** (all tabs / tabbed)
|
|
- **Favorites** feature enable
|
|
|
|
#### Notification Settings
|
|
**File:** `Notifications.page` (tabbed)
|
|
- **System notifications** enable/disable
|
|
- **Per-category notification routing:**
|
|
- Categories: Array, Disk, Share, Docker, Network, Unraid, Plugin, Language, Report
|
|
- Channels: Browser, Email, Agents
|
|
- Levels: Normal, Warning, Alert
|
|
- **Browser notification** settings
|
|
- **Display position** (top-right, top-left, bottom-right, bottom-left)
|
|
|
|
#### SMTP Settings
|
|
**File:** `SmtpSettings.page`
|
|
- Sending email address
|
|
- SMTP server, port
|
|
- Authentication (none, login, plain)
|
|
- Username, password
|
|
- SSL/TLS settings (None, SSL, STARTTLS)
|
|
- Send test email button
|
|
|
|
#### Notification Agents
|
|
**File:** `NotificationAgents.page`
|
|
- **Built-in agents** (each with XML config):
|
|
- Discord, Slack, Telegram, Pushover, Pushbullet
|
|
- Gotify, ntfy.sh, Prowl, Join, Boxcar
|
|
- Bark, PushBits, Pushplus, ServerChan
|
|
- Per-agent: Enable/disable, API keys/webhooks, test button
|
|
|
|
#### Scheduler
|
|
**File:** `Scheduler.page` (tabbed container)
|
|
- **Parity Check** (`ParityCheck.page`)
|
|
- Schedule (Disabled/Daily/Weekly/Monthly/Yearly/Custom)
|
|
- Day, day of month, time selection
|
|
- Custom: multi-day, week selection
|
|
- Write corrections (Yes/No)
|
|
- Cumulative (resume) option
|
|
- Frequency (every N scheduled runs)
|
|
- Pause/Resume during hours
|
|
- **Mover Settings** (`MoverSettings.page`)
|
|
- Mover schedule (Disabled/Hourly/Daily/Weekly/Monthly)
|
|
- Move Now button
|
|
- Mover logging
|
|
- Mover tuning action
|
|
- **TRIM Settings** (`TrimSettings.page`)
|
|
- SSD TRIM schedule
|
|
- TRIM Now button
|
|
- Per-pool/device include list
|
|
|
|
#### Console Settings
|
|
**File:** `Console.page`
|
|
- Keyboard layout selection (40+ layouts)
|
|
- Console font
|
|
- Terminal shell
|
|
|
|
---
|
|
|
|
## 11. Plugins
|
|
|
|
**File:** `Plugins.page` (tabbed container, in `dynamix.plugin.manager`)
|
|
**Sub-tabs:**
|
|
|
|
### 11.1 Installed Plugins
|
|
- **Plugin table:** Name, Author, Version, Status, Update available
|
|
- **Per-plugin actions:**
|
|
- Update (if available)
|
|
- Remove (checkbox for bulk)
|
|
- Show changelog
|
|
- **Update All** button
|
|
- **Remove Selected** button (bulk)
|
|
- **Check for Updates** button
|
|
- **Data source:** `/var/log/plugins/*.plg`, `/tmp/plugins/*.plg`
|
|
|
|
### 11.2 Install Plugin
|
|
**File:** `PluginInstall.page`
|
|
- **URL input** for remote .plg file
|
|
- **Force Install** checkbox (allows same/older version)
|
|
- **Local file browser** (browse `/boot/` for .plg files)
|
|
- Opens plugin installation window
|
|
|
|
### 11.3 Plugin Errors
|
|
**File:** `PluginsError.page`
|
|
- Shows plugins with errors/warnings
|
|
|
|
### 11.4 Stale Plugins
|
|
**File:** `PluginsStale.page`
|
|
- Shows plugins not compatible with current OS version
|
|
|
|
---
|
|
|
|
## 12. Docker
|
|
|
|
**File:** `Docker.page` (container, in `dynamix.docker.manager`)
|
|
**Conditional:** Docker must be enabled and running
|
|
|
|
### 12.1 Docker Containers
|
|
**File:** `DockerContainers.page`
|
|
- **Container table columns:**
|
|
- Application (icon + name, draggable order)
|
|
- Version (with update indicator)
|
|
- Network (bridge/host/macvlan/ipvlan/custom)
|
|
- Container IP
|
|
- Container Port(s)
|
|
- LAN IP:Port mappings
|
|
- Volume Mappings (App to Host)
|
|
- CPU & Memory load (advanced view)
|
|
- Autostart toggle (switch button)
|
|
- Uptime
|
|
- **Per-container context menu** (right-click):
|
|
- Start / Stop / Restart / Pause / Resume
|
|
- Logs (opens log viewer)
|
|
- Edit (opens template editor)
|
|
- Remove (with image option)
|
|
- WebUI link
|
|
- Console (shell into container)
|
|
- Update (if available)
|
|
- Force update
|
|
- Rebuild (advanced)
|
|
- **Global buttons:**
|
|
- Add Container
|
|
- Start All / Stop All
|
|
- Pause All / Resume All
|
|
- Check for Updates
|
|
- Update All (if updates available)
|
|
- Container Size (popup showing disk usage)
|
|
- **Drag-and-drop reorder** (when unlocked)
|
|
- **Basic/Advanced view toggle**
|
|
- **Auto-start wait time** (seconds between container starts)
|
|
- **Real-time Nchan:** `docker_load` (CPU/Memory per container)
|
|
- **Data source:** Docker API (`DockerClient.php`), container templates
|
|
|
|
### 12.2 Add/Edit Container
|
|
**File:** `AddContainer.page`, `UpdateContainer.page`
|
|
- **Template system** (XML templates from Community Applications)
|
|
- **Basic mode / Advanced mode** toggle
|
|
- **Fields:**
|
|
- Container name
|
|
- Repository (Docker Hub image)
|
|
- Registry URL
|
|
- Icon URL
|
|
- Network type
|
|
- IP address (if macvlan/ipvlan)
|
|
- Privileged mode
|
|
- CPU pinning
|
|
- Console shell
|
|
- WebUI URL template
|
|
- Port mappings (container:host, TCP/UDP)
|
|
- Volume mappings (container:host, RW/RO)
|
|
- Environment variables
|
|
- Labels
|
|
- Extra parameters
|
|
- Post arguments
|
|
- **Apply button** (pulls image if needed, creates/updates container)
|
|
|
|
### 12.3 Docker Settings
|
|
**File:** `DockerSettings.page`
|
|
(See Settings section 10.1 above)
|
|
|
|
---
|
|
|
|
## 13. VMs
|
|
|
|
**File:** `VMs.page` (container, in `dynamix.vm.manager`)
|
|
**Conditional:** libvirtd must be running
|
|
|
|
### 13.1 Virtual Machines
|
|
**File:** `VMMachines.page`
|
|
- **VM table per machine:**
|
|
- Icon + Name + Description
|
|
- Status indicator (running/stopped/paused)
|
|
- CPU pinning display
|
|
- Memory allocation
|
|
- vDisks list with sizes + resize capability
|
|
- Graphics (VNC/SPICE) type
|
|
- CD-ROM media selection (ISO swap dialog)
|
|
- Autostart toggle
|
|
- Snapshots management
|
|
- **Per-VM context menu:**
|
|
- Start / Stop (graceful) / Force Stop
|
|
- Pause / Resume
|
|
- Restart
|
|
- Hibernate / Resume from hibernate
|
|
- VNC/SPICE remote viewer
|
|
- noVNC in browser
|
|
- Logs
|
|
- Edit VM
|
|
- Clone VM
|
|
- Remove VM (with vdisk option)
|
|
- Snapshot: Create / Revert / Delete
|
|
- XML: Edit raw XML
|
|
- **VM Operations:**
|
|
- Add VM
|
|
- Start/Stop libvirt service
|
|
- **Drag-and-drop reorder** (when unlocked)
|
|
|
|
### 13.2 VM Templates
|
|
**File:** `VMTemplates.page`
|
|
- **Pre-configured OS templates:**
|
|
- Windows 11, Windows 10, Windows Server 2022/2019
|
|
- Ubuntu, Debian, Fedora, CentOS, Arch Linux, OpenSUSE
|
|
- FreeBSD, TrueNAS, etc.
|
|
- **User-saved templates** (custom JSON)
|
|
- **Import/Upload template** buttons
|
|
- **Each template pre-fills** the AddVM form
|
|
|
|
### 13.3 Add/Edit VM
|
|
**File:** `AddVM.page`, `UpdateVM.page`
|
|
- **VM configuration form:**
|
|
- Name
|
|
- Description
|
|
- CPU mode (Host Passthrough / Emulated)
|
|
- Logical CPUs (core/thread selection with visual grid)
|
|
- Initial Memory / Max Memory
|
|
- Machine type (i440fx / Q35)
|
|
- BIOS (OVMF / SeaBIOS)
|
|
- Hyper-V enlightenments
|
|
- USB controllers
|
|
- OS Install ISO
|
|
- VirtIO Drivers ISO
|
|
- vDisk Location, Size, Type, Bus (VirtIO/SATA/SCSI/IDE)
|
|
- Graphics Card (VNC/GPU passthrough)
|
|
- Sound Card
|
|
- Network Bridge/Source, MAC address, Model
|
|
- PCIe device passthrough (from System Devices)
|
|
- USB device passthrough
|
|
- **File tree picker** for ISO/vDisk paths
|
|
- **VNC viewer:** noVNC (HTML5) and native VNC client links
|
|
- **SPICE viewer:** spice.html
|
|
|
|
### 13.4 VM Usage Statistics
|
|
**File:** `VMUsageStats.page`
|
|
- **Real-time table:** Name, Guest CPU%, Host CPU%, Memory (inuse/current/max), Disk IO, Network IO
|
|
- **Nchan:** `vm_usage`
|
|
- **Conditional:** Only if USAGE=Y in domain.cfg
|
|
|
|
### 13.5 VM Settings
|
|
**File:** `VMSettings.page`
|
|
(See Settings section 10.1 above)
|
|
|
|
---
|
|
|
|
## 14. Tools
|
|
|
|
**File:** `Tools.page` (panel layout with icons)
|
|
**Layout:** Grid of icon panels, supports favorites
|
|
|
|
### 14.1 Unraid OS Sub-menu (Menu="UNRAID-OS")
|
|
|
|
#### System Log
|
|
**File:** `Syslog.page`
|
|
- **Live syslog viewer** in pre-formatted text area
|
|
- **Download syslog** as zip
|
|
- **Previous boot log** selector
|
|
- **Remote syslog server logs** (if configured)
|
|
- **Auto-scroll** to bottom
|
|
- **Max 5000 lines** display
|
|
|
|
#### Log Viewer (new)
|
|
**File:** `LogViewer.page`
|
|
- **Web component:** `<unraid-log-viewer>`
|
|
- Modern log viewer implementation
|
|
|
|
#### Diagnostics
|
|
**File:** `Diagnostics.page`
|
|
- **Download diagnostics** zip bundle
|
|
- **Anonymize** option (remove sensitive data)
|
|
- **Progress display** via Nchan during collection
|
|
- Collects: syslog, SMART reports, configs, docker info, etc.
|
|
|
|
#### New Config
|
|
**File:** `NewConfig.page`
|
|
- **Reset array configuration** (all disks appear as "New")
|
|
- **Preserve assignments:** All / Array slots / Pool slots (multi-select)
|
|
- **Confirmation checkbox** required
|
|
- **Warning:** Cannot be used to rebuild failed drives
|
|
|
|
#### New Permissions
|
|
**File:** `NewPerms.page`
|
|
- **Reset file/directory ownership** to nobody/users (99/100)
|
|
- **Target selection:** By Disks or By Shares (multi-select)
|
|
- **Sets permissions:**
|
|
- Directories: drwxrwxrwx
|
|
- RW files: -rw-rw-rw-
|
|
- RO files: -r--r--r--
|
|
- Opens background process window
|
|
|
|
#### System Devices
|
|
**File:** `SysDevs.page`
|
|
- **PCI device listing** with filter toggles:
|
|
- Show All / Filtered
|
|
- Show GPUs/Audio
|
|
- Show Networks
|
|
- Show Storage
|
|
- Show USB
|
|
- Show all other devices
|
|
- Show SR-IOV
|
|
- **Per-device:** Vendor, Device, IOMMU group, Driver in use
|
|
- **VFIO bind/unbind** for GPU passthrough
|
|
- **SR-IOV virtual function** management
|
|
- **Apply button** for VFIO changes
|
|
|
|
#### System Drivers
|
|
**File:** `SysDrivers.page`
|
|
- **Driver listing** with filter:
|
|
- Search box
|
|
- Filter: All / In Use
|
|
- **Table columns:** Module, Description, Status (System/Inuse/Custom/Disabled)
|
|
- **Per-driver:** Enable/Disable, Custom modprobe options
|
|
- **Rebuild database** button
|
|
- **Sortable/filterable** table (tablesorter.js)
|
|
|
|
#### Hardware Profile
|
|
**File:** `HardwareProfile.page`
|
|
- **Upload hardware profile** to Lime Technology
|
|
- **Show/Hide details** (XML hardware data)
|
|
- **Last submitted** date display
|
|
|
|
#### Processes
|
|
**File:** `Processes.page`
|
|
- **`ps -aux` output** in pre-formatted text
|
|
|
|
#### Open Terminal
|
|
**File:** `Terminal.page`
|
|
- **Opens ttyd** web terminal in popup
|
|
- Auto-redirects back to previous page
|
|
|
|
### 14.2 WebGui Sub-menu (Menu="WebGui")
|
|
|
|
#### Vars (Debug)
|
|
**File:** `Vars.page`
|
|
- **Dumps all PHP variables:** `$_SERVER`, `$devs`, `$disks`, `$sec`, `$sec_nfs`, `$shares`, `$users`, `$var`
|
|
- **Environment variables** (proxy settings)
|
|
- Raw `print_r()` output in pre-formatted text
|
|
|
|
#### PHP Settings
|
|
**File:** `PHPsettings.page`
|
|
- **Error reporting level** (Default / All Categories / Errors Only)
|
|
- **Display errors on screen** toggle
|
|
- **PHP Info** button (phpinfo() popup)
|
|
- **View Log** / **Clear Log** buttons
|
|
- **Log size** display
|
|
|
|
### 14.3 Other Tools
|
|
|
|
#### About
|
|
**File:** `About.page`
|
|
- **Credits and version information**
|
|
- **Unraid OS changelog**
|
|
|
|
#### Registration / Install Key
|
|
**File:** `InstallKey.page`
|
|
- **Registration key URL** input
|
|
- **Install Key** button
|
|
- **Key file upload**
|
|
|
|
---
|
|
|
|
## 15. About
|
|
|
|
**File:** `About.page`
|
|
- Accessible from Tools menu
|
|
- Credits page with version information
|
|
|
|
---
|
|
|
|
## 16. Apps (Community Applications)
|
|
|
|
**File:** `Apps.page`
|
|
- **Default:** Shows install button for Community Applications plugin
|
|
- **After CA installed:** Full app store with categories:
|
|
- Containers (Docker templates)
|
|
- Plugins
|
|
- Language packs
|
|
- Search, Filter, Sort capabilities
|
|
- One-click install
|
|
|
|
---
|
|
|
|
## 17. Favorites
|
|
|
|
**File:** `Favorites.page`, `MyFavorites.page`
|
|
- **Favorites panel** appears when favorites exist
|
|
- **Add to favorites:** Heart icon on Settings/Tools panels
|
|
- **Remove from favorites** via MyFavorites management
|
|
- **Stored in:** `/boot/config/favorites.cfg`
|
|
|
|
---
|
|
|
|
## 18. Device Detail Pages
|
|
|
|
**Accessed via:** `/Main/Device?name=diskN` or `/Main/New?name=sdX`
|
|
**File:** `Device.page` (tabbed container)
|
|
|
|
### 18.1 Device Settings Tab
|
|
**File:** `DeviceInfo.page`
|
|
- **Disk assignment** (slot selection for array)
|
|
- **File system type** (xfs/btrfs/zfs)
|
|
- **SMART settings** per disk:
|
|
- SMART monitoring schedule (Disabled/Hourly/Daily/Weekly/Monthly)
|
|
- Custom SMART attributes
|
|
- SMART notification thresholds
|
|
- **Partition layout**
|
|
- **Format** button (with confirmation)
|
|
- **Pool operations:** Balance, Scrub, Check
|
|
- **Spin Up/Down** controls
|
|
- **Clear statistics**
|
|
- **Previous/Next disk** navigation arrows
|
|
|
|
### 18.2 SMART Attributes Tab
|
|
**File:** `DeviceAttributes.page`
|
|
- **Full SMART attribute table:**
|
|
- #, Attribute Name, Flag, Value, Worst, Threshold, Type, Updated, Failed, Raw Value
|
|
- **Data source:** `smartctl` via `SmartInfo.php`
|
|
|
|
### 18.3 SMART Identity Tab
|
|
**File:** `DeviceIdentify.page`
|
|
- **Device identification** table (model, serial, firmware, capacity, etc.)
|
|
- **Custom notes** per disk (stored in DiskLog)
|
|
|
|
### 18.4 SMART Capabilities Tab
|
|
**File:** `DeviceCapabilities.page`
|
|
- **SMART capability flags** and features
|
|
|
|
### 18.5 Self-Test Tab
|
|
**File:** `Selftest.page`
|
|
- **Download SMART report** button
|
|
- **Self-test history** (show/hide)
|
|
- **Error log** (show/hide)
|
|
- **Short self-test** Start button
|
|
- **Extended self-test** Start button
|
|
- **Last test result** display (real-time)
|
|
|
|
### 18.6 SMB Security Tab
|
|
**File:** `SecuritySMB.page`
|
|
(See Shares section)
|
|
|
|
### 18.7 NFS Security Tab
|
|
**File:** `SecurityNFS.page`
|
|
(See Shares section)
|
|
|
|
### 18.8 Flash Device Detail
|
|
**File:** `Flash.page` (tabbed)
|
|
- **Flash Device Settings** (`FlashInfo.page`)
|
|
- Flash Vendor, Product, GUID
|
|
- Registration Key Manager link
|
|
- Flash Backup download button
|
|
- **SMART/Identity** tabs
|
|
- **Syslinux Configuration** (`BootParameters.page`)
|
|
- Menu View / Raw View toggle
|
|
- Boot parameters GUI:
|
|
- VM Passthrough (PCIe ACS override, VFIO unsafe interrupts)
|
|
- GPU settings (efifb:off, video params)
|
|
- Power Management (C-states, ACPI)
|
|
- Boot Menu settings
|
|
- Raw syslinux.cfg editor
|
|
- Automatic backup on save
|
|
- **GRUB Configuration** (`Grub.page`, if GRUB boot)
|
|
- GRUB config editor textarea
|
|
- Default config restore button
|
|
- **Boot Mode** (`BootMode.page`)
|
|
- Current boot mode (UEFI/Legacy)
|
|
- UEFI boot mode toggle
|
|
|
|
---
|
|
|
|
## 19. File Browser
|
|
|
|
**File:** `Browse.page`
|
|
- **Accessed via:** `/Main/Browse?dir=/mnt/user/sharename`
|
|
- **Full file manager** with:
|
|
- **File tree** navigation (jQuery FileTree)
|
|
- **Breadcrumb** path navigation
|
|
- **File listing table:** Name, Size, Date Modified, Owner/Perms
|
|
- **Actions:**
|
|
- Upload files (drag-and-drop)
|
|
- Create new folder
|
|
- Create new file
|
|
- Rename
|
|
- Delete (with confirmation)
|
|
- Move/Copy (dialog with destination picker)
|
|
- Download
|
|
- Edit (inline text editor for configured file types)
|
|
- Change permissions/ownership
|
|
- **Context menu** (right-click)
|
|
- **Multiple selection** (checkboxes)
|
|
- **Real-time transfer stats** (upload/download speed)
|
|
- **Nchan:** `file_manager` (real-time file system monitoring)
|
|
- **Restricted to:** `/mnt/` and `/boot/` paths only
|
|
|
|
---
|
|
|
|
## 20. Notification System
|
|
|
|
### Architecture
|
|
- **Backend:** `scripts/notify` - Shell script for creating/reading notifications
|
|
- **Storage:** Notification files in `/tmp/notifications/`
|
|
- **Transport:** Nchan WebSocket (`nchan/notify_poller`)
|
|
- **Frontend:** Toast notifications + notification archive
|
|
|
|
### Notification Types
|
|
- **Normal** (blue) - Informational
|
|
- **Warning** (yellow) - Warning conditions
|
|
- **Alert** (red) - Critical alerts
|
|
|
|
### Notification Sources
|
|
- Array events (disk errors, parity issues)
|
|
- Docker container updates
|
|
- Plugin updates
|
|
- OS updates
|
|
- SMART disk warnings
|
|
- Temperature alerts
|
|
- UPS power events
|
|
- Custom plugin notifications
|
|
- Scheduled task completions
|
|
|
|
### Notification Channels
|
|
1. **Browser** - Toast notifications in WebGUI
|
|
2. **Email** - Via SMTP settings
|
|
3. **Agents** - 14 supported services (Discord, Slack, Telegram, etc.)
|
|
|
|
### Notification UI
|
|
- **Bell icon** in header with unread count badge
|
|
- **Click opens** notification panel/popup
|
|
- **Mark as read / Dismiss all**
|
|
- **Archive** access
|
|
- **Toast popup** for real-time alerts (configurable position)
|
|
|
|
---
|
|
|
|
## 21. Real-Time Monitoring (Nchan/WebSocket)
|
|
|
|
### Nchan Scripts (PHP long-running processes)
|
|
Located in `plugins/dynamix/nchan/`:
|
|
|
|
| Script | Publishes To | Data | Update Interval |
|
|
|--------|-------------|------|-----------------|
|
|
| `update_1` | `/sub/update1` | RAM, system temps, fans, flash/log/docker df, shares | Varies |
|
|
| `update_2` | `/sub/update2` | Parity status, disk temps/IO, array status, scheduling | Varies |
|
|
| `update_3` | `/sub/update3` | CPU per-core usage, CPU temperature | ~2s |
|
|
| `device_list` | `/sub/device_list` | Disk device table rows (HTML) | On change |
|
|
| `disk_load` | `/sub/diskload` | Disk I/O rates (reads/writes bytes/sec) | 2s (bash) |
|
|
| `parity_list` | `/sub/parity_list` | Parity check progress, ETA | During check |
|
|
| `notify_poller` | `/sub/notify` | Notification messages | 3s poll |
|
|
| `session_check` | `/sub/session` | Session timeout check | Periodic |
|
|
| `ups_status` | `/sub/ups_status` | UPS battery/power status | Periodic |
|
|
| `vm_dashusage` | `/sub/vm_dashusage` | VM CPU/memory stats | Periodic |
|
|
| `wg_poller` | `/sub/wg_poller` | WireGuard tunnel status | Periodic |
|
|
| `wlan0` | `/sub/wlan0` | WiFi signal/connection status | Periodic |
|
|
| `file_manager` | `/sub/file_manager` | File system changes | On change |
|
|
|
|
Located in `plugins/dynamix.docker.manager/nchan/`:
|
|
|
|
| Script | Publishes To | Data |
|
|
|--------|-------------|------|
|
|
| `docker_load` | `/sub/dockerload` | Container CPU/memory/IO |
|
|
|
|
Located in `plugins/dynamix.vm.manager/nchan/`:
|
|
|
|
| Script | Publishes To | Data |
|
|
|--------|-------------|------|
|
|
| `vm_usage` | `/sub/vm_usage` | VM CPU/memory/disk/network stats |
|
|
|
|
### Client-Side WebSocket
|
|
```javascript
|
|
var nchan = new NchanSubscriber('/sub/update1', {subscriber:'websocket'});
|
|
nchan.on('message', function(data) {
|
|
// Parse JSON data and update DOM elements
|
|
});
|
|
nchan.start();
|
|
```
|
|
|
|
---
|
|
|
|
## 22. Modal Dialogs & Wizards
|
|
|
|
### Dialog Framework
|
|
- **SweetAlert** (`jquery.sweetalert.css`) - Confirmation dialogs, alerts, warnings
|
|
- **jQuery UI Dialog** - Complex forms (file tree, pool creation, ISO selection)
|
|
|
|
### Key Dialogs
|
|
|
|
1. **Add Pool** - Pool name input + filesystem type selection
|
|
2. **Add Bootable Pool** - Like Add Pool with boot support
|
|
3. **Add ZFS Subpool** - Subpool type selection (special/logs/dedup/cache/spares)
|
|
4. **ISO Selection** - File tree browser for VM CD-ROM
|
|
5. **VM Disk Resize** - New capacity input
|
|
6. **Docker Container Log** - Real-time log viewer in iframe
|
|
7. **Plugin Install Progress** - Command output window
|
|
8. **Flash Backup Progress** - Spinner with status
|
|
9. **Diagnostics Collection** - Progress with Nchan updates
|
|
10. **Parity Check Confirmation** - Warning with options
|
|
11. **New Config Confirmation** - Safety confirmation
|
|
12. **Share Cleanup** - Confirmation + results
|
|
13. **Docker Container Size** - Popup with disk usage per container
|
|
14. **SMART Report Save** - Background zip + auto-download
|
|
15. **Array Start/Stop Confirmation** - Encryption key input if needed
|
|
16. **Plugin Alert Messages** - Pre-update alerts/changelogs
|
|
|
|
### Progress Frame
|
|
- **`update.htm`** - Hidden iframe for form POST targets
|
|
- Shows command execution progress
|
|
- Auto-refreshes parent page on completion
|
|
|
|
---
|
|
|
|
## 23. Themes
|
|
|
|
**Available Themes:**
|
|
| Theme | Type | Description |
|
|
|-------|------|-------------|
|
|
| `azure` | Top Nav | Light theme (default), blue accents |
|
|
| `gray` | Top Nav | Dark theme, gray accents |
|
|
| `black` | Sidebar | Dark theme, sidebar navigation |
|
|
| `white` | Sidebar | Light theme, sidebar navigation |
|
|
|
|
### Theme Files
|
|
- `styles/themes/azure.css`
|
|
- `styles/themes/gray.css`
|
|
- `styles/themes/black.css`
|
|
- `styles/themes/white.css`
|
|
|
|
### Theme Switcher
|
|
- `<unraid-theme-switcher>` web component in footer
|
|
- Instant theme change without page reload
|
|
- Persisted in display settings
|
|
|
|
### Theme Helper Class (`ThemeHelper.php`)
|
|
```php
|
|
$themeHelper = new ThemeHelper($display['theme'], $display['width']);
|
|
$themeHelper->isTopNavTheme(); // azure, gray
|
|
$themeHelper->isSidebarTheme(); // black, white
|
|
$themeHelper->isLightTheme(); // azure, white
|
|
$themeHelper->getThemeName();
|
|
$themeHelper->getThemeHtmlClass();
|
|
```
|
|
|
|
### Customization
|
|
- Custom banner image (PNG upload)
|
|
- Banner text color (hex)
|
|
- Banner background color (hex)
|
|
- Font size (percentage)
|
|
|
|
---
|
|
|
|
## 24. Authentication & Login
|
|
|
|
### Login Page
|
|
**File:** `login.php`
|
|
- Username/password form
|
|
- "Remember me" option
|
|
- SSL certificate info
|
|
- Redirect to requested page after login
|
|
|
|
### Authentication
|
|
**File:** `auth-request.php`
|
|
- nginx auth_request sub-request handler
|
|
- Session-based authentication
|
|
- CSRF token validation (`$var['csrf_token']`)
|
|
- Session timeout with Nchan check
|
|
|
|
### Password Management
|
|
**File:** `include/.set-password.php`
|
|
- Password hashing
|
|
- Base64 encoding for transmission
|
|
- zxcvbn.js strength meter (if installed)
|
|
- Max 128 characters
|
|
|
|
---
|
|
|
|
## 25. Data Sources
|
|
|
|
### State INI Files (`/var/local/emhttp/`)
|
|
Generated by `emhttp` daemon, read by PHP pages:
|
|
|
|
| File | Key Variables |
|
|
|------|---------------|
|
|
| `var.ini` | `fsState`, `mdState`, `mdColor`, `mdNumDisks`, `mdResyncPos`, `mdResyncSize`, `mdResyncCorr`, `csrf_token`, `NAME`, `COMMENT`, `regTy`, `regFILE`, `flashGUID`, `flashProduct`, `flashVendor`, `timeZone`, `luksKeyfile`, `safeMode`, `SYS_ARRAY_SLOTS` |
|
|
| `disks.ini` | Per-disk sections: `name`, `device`, `id`, `type` (Parity/Data/Cache/Flash), `status`, `color`, `temp`, `numReads`, `numWrites`, `numErrors`, `fsType`, `fsSize`, `fsUsed`, `fsFree`, `fsStatus`, `transport`, `spindownDelay`, `smLevel`, `smEvents` |
|
|
| `shares.ini` | Per-share: `name`, `comment`, `allocator`, `floor`, `splitLevel`, `include`, `exclude`, `useCache`, `cachePool`, `cachePool2`, `cow`, `export`, `security` |
|
|
| `devs.ini` | Unassigned devices (same fields as disks) |
|
|
| `sec.ini` | SMB security per share (per-user access levels) |
|
|
| `sec_nfs.ini` | NFS security per share (host lists) |
|
|
| `network.ini` | Interface configs (bonding, bridging, VLANs) |
|
|
| `nginx.ini` | `NGINX_LANIP`, `NGINX_LANIP6`, `NGINX_WANIP`, `NGINX_BIND` |
|
|
| `diskload.ini` | `sdX=read_bytes write_bytes read_ops write_ops` per disk |
|
|
| `cpuload.ini` | CPU utilization data |
|
|
| `wireless.ini` | WiFi status |
|
|
|
|
### System Files
|
|
| Source | Data |
|
|
|--------|------|
|
|
| `/proc/meminfo` | RAM Total/Available |
|
|
| `/proc/stat` | CPU usage per core |
|
|
| `/proc/diskstats` | Disk I/O counters |
|
|
| `/sys/class/net/` | Network interfaces |
|
|
| `/sys/devices/system/cpu/` | CPU frequency/governor |
|
|
| `sensors -uA` | Temperatures, fan speeds |
|
|
| `smartctl` | SMART disk attributes |
|
|
| `apcaccess` | UPS status |
|
|
| `wg show` | WireGuard tunnel status |
|
|
| `docker ps` / Docker API | Container status |
|
|
| `virsh` / libvirt API | VM status |
|
|
|
|
### Configuration Files (`/boot/config/`)
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `plugins/dynamix/dynamix.cfg` | Display/UI settings |
|
|
| `shares/*.cfg` | Per-share configuration |
|
|
| `network-extra.cfg` | Extra network interfaces |
|
|
| `network-rules.cfg` | Interface MAC rules |
|
|
| `smb-extra.conf` | Extra Samba config |
|
|
| `rsyslog.cfg` | Syslog server settings |
|
|
| `wireless.cfg` | WiFi configuration |
|
|
| `domain.cfg` | VM Manager settings |
|
|
| `docker.cfg` | Docker settings |
|
|
| `ssh/root/authorized_keys` | SSH public keys |
|
|
| `favorites.cfg` | Dashboard favorites |
|
|
| `dashboard_settings.json` | Dashboard tile layout |
|
|
| `editor.cfg` | File browser editor extensions |
|
|
|
|
---
|
|
|
|
## 26. JavaScript Libraries
|
|
|
|
| Library | File | Purpose |
|
|
|---------|------|---------|
|
|
| dynamix.js | `javascript/dynamix.js` | Core WebGUI JavaScript (timers, navigation, helpers) |
|
|
| jQuery | (bundled) | DOM manipulation, AJAX |
|
|
| jQuery UI | (bundled) | Dialogs, sortable, tabs, dropdowns |
|
|
| jQuery TableSorter | `jquery.tablesorter.widgets.js` | Table sorting, filtering, sticky headers |
|
|
| jQuery SweetAlert | (CSS only) | Beautiful alert dialogs |
|
|
| jQuery FileTree | `jquery.filetree.js` | File/directory browser |
|
|
| jQuery FileDrop | `jquery.filedrop.js` | Drag-and-drop file upload |
|
|
| jQuery SwitchButton | `jquery.switchbutton.js` | Toggle switches |
|
|
| jQuery Base64 | `jquery.base64.js` | Base64 encoding |
|
|
| ApexCharts | `jquery.apexcharts.js` | Dashboard charts (donut, area) |
|
|
| SmoothieCharts | `smoothie.js` | Real-time streaming charts |
|
|
| ACE Editor | `javascript/ace/` | Code editor (for config files) |
|
|
| NchanSubscriber | (inline) | WebSocket pub/sub client |
|
|
| EZView | `EZView.js` | Image viewer |
|
|
| zxcvbn | (optional) | Password strength estimation |
|
|
|
|
---
|
|
|
|
## 27. CSS Architecture
|
|
|
|
### Base Styles
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `default-fonts.css` | Font face definitions (Clear Sans, Bitstream) |
|
|
| `default-cases.css` | Icon font definitions (font-cases.woff, font-unraid.woff) |
|
|
| `font-awesome.css` | FontAwesome 4.x icons |
|
|
| `default-color-palette.css` | CSS custom properties (colors) |
|
|
| `default-base.css` | Base layout, typography |
|
|
| `default-dynamix.css` | Component styles (tables, forms, panels) |
|
|
| `context.standalone.css` | Context menu styles |
|
|
| `jquery.sweetalert.css` | SweetAlert dialog styles |
|
|
| `jquery.ui.css` | jQuery UI component styles |
|
|
| `jquery.filetree.css` | File tree browser styles |
|
|
| `jquery.switchbutton.css` | Toggle switch styles |
|
|
|
|
### Icon Fonts
|
|
| Font | File | Purpose |
|
|
|------|------|---------|
|
|
| font-cases | `font-cases.woff` | Device/disk icons |
|
|
| font-unraid | `font-unraid.woff` | Navigation icons (Unraid custom) |
|
|
| docker-icon | `docker-icon.woff` | Docker whale icon |
|
|
| FontAwesome | `font-awesome.woff` | General icons (FA 4.x) |
|
|
|
|
### CSS Custom Properties
|
|
```css
|
|
:root {
|
|
--customer-header-background-image: url(banner.png);
|
|
--customer-header-text-color: #hex;
|
|
--customer-header-background-color: #hex;
|
|
--custom-font-size: 100%;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Event System
|
|
|
|
### Server Events (`plugins/dynamix/event/`)
|
|
Events triggered by system state changes:
|
|
|
|
| Event Directory | Trigger |
|
|
|----------------|---------|
|
|
| `disks_mounted/` | After array disks are mounted |
|
|
| `docker_started/` | After Docker daemon starts |
|
|
| `driver_loaded/` | After a driver is loaded |
|
|
| `unmounting_disks/` | Before array disks are unmounted |
|
|
|
|
### Service Management (`/etc/rc.d/`)
|
|
Key service scripts:
|
|
- `rc.docker` - Docker daemon control
|
|
- `rc.libvirt` - Libvirt/KVM control
|
|
- `rc.nginx` - Web server control
|
|
- `rc.php-fpm` - PHP-FPM control
|
|
- `rc.samba` - Samba/SMB control
|
|
- `rc.nfsd` - NFS server control
|
|
- `rc.sshd` - SSH daemon control
|
|
- `rc.apcupsd` - APC UPS daemon
|
|
- `rc.wireguard` - WireGuard VPN
|
|
- `rc.smartd` - SMART monitoring daemon
|
|
- `rc.crond` - Cron scheduler
|
|
- `rc.rsyslogd` - System logging
|
|
- `rc.ntpd` - NTP time sync
|
|
- `rc.avahidaemon` - mDNS/Avahi
|
|
- `rc.wireless` - WiFi management
|
|
|
|
---
|
|
|
|
## Summary Statistics
|
|
|
|
| Category | Count |
|
|
|----------|-------|
|
|
| **Total .page files (dynamix)** | ~85 |
|
|
| **Total .page files (docker.manager)** | 5 |
|
|
| **Total .page files (vm.manager)** | 7 |
|
|
| **Total .page files (plugin.manager)** | 5 |
|
|
| **Total .page files (apcupsd)** | 2 |
|
|
| **Total .page files (gui.search)** | 1 |
|
|
| **Total PHP include files** | ~80+ |
|
|
| **Total Nchan scripts** | ~15 |
|
|
| **Total JavaScript files** | ~12+ |
|
|
| **Total CSS files** | ~15+ |
|
|
| **Total notification agents** | 14 |
|
|
| **Available themes** | 4 |
|
|
| **State INI files** | ~12 |
|
|
| **RC service scripts** | ~40 |
|