Files
homarr/docs/unraid-ui-project/WEBGUI-COMPLETE-INVENTORY.md
Kaloyan Danchev e881ec6cb5
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
Add Unraid UI project documentation and research
- 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>
2026-02-06 07:44:52 +02:00

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 |