- 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>
48 KiB
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
- Architecture Overview
- Page System (.page files)
- Navigation Structure
- Header Bar
- Footer Bar
- Dashboard
- Main (Array Devices)
- Shares
- Users
- Settings
- Plugins
- Docker
- VMs
- Tools
- About
- Apps
- Favorites
- Device Detail Pages
- File Browser
- Notification System
- Real-Time Monitoring (Nchan)
- Modal Dialogs & Wizards
- Themes
- Authentication & Login
- Data Sources
- JavaScript Libraries
- 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
emhttpdaemon monitors hardware and writes state to/var/local/emhttp/*.ini- PHP pages read INI files:
parse_ini_file('state/disks.ini', true) - Nchan scripts poll state files and push updates via WebSocket
- JavaScript receives updates and modifies DOM in real-time
- Form submissions POST to
update.htm/update.phpwhich 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
.pagefiles 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):
- Dashboard (Menu="Tasks:1", Code=e943)
- Main (Menu="Tasks:1", Code=e908) - Array devices
- Shares (Menu="Tasks:2", Code=e92a) - User/disk shares
- Users (Menu="Tasks:3", Code=e945) - Conditional on display setting
- Settings (Menu="Tasks:4", Code=e924)
- Plugins (Menu="Tasks:50", Code=e944)
- Docker (Menu="Tasks:60") - Conditional on Docker enabled
- VMs (Menu="Tasks:70") - Conditional on VMs enabled
- Apps (Menu="Tasks:80", Code=e942) - Community Applications
- Favorites (Menu="Tasks:2", Code=f08a) - Conditional on favorites existing
- Tools (Menu="Tasks:90", Code=e909)
- 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:
apcaccesscommand
6.10 WireGuard VPN Tile (conditional)
- Tunnel status (active/inactive)
- Peer connections
- Handshake times
- Transfer statistics
- Data source:
wg showcommand
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 viaShareList.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 -auxoutput 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:
smartctlviaSmartInfo.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
- Browser - Toast notifications in WebGUI
- Email - Via SMTP settings
- 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
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
- Add Pool - Pool name input + filesystem type selection
- Add Bootable Pool - Like Add Pool with boot support
- Add ZFS Subpool - Subpool type selection (special/logs/dedup/cache/spares)
- ISO Selection - File tree browser for VM CD-ROM
- VM Disk Resize - New capacity input
- Docker Container Log - Real-time log viewer in iframe
- Plugin Install Progress - Command output window
- Flash Backup Progress - Spinner with status
- Diagnostics Collection - Progress with Nchan updates
- Parity Check Confirmation - Warning with options
- New Config Confirmation - Safety confirmation
- Share Cleanup - Confirmation + results
- Docker Container Size - Popup with disk usage per container
- SMART Report Save - Background zip + auto-download
- Array Start/Stop Confirmation - Encryption key input if needed
- 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.cssstyles/themes/gray.cssstyles/themes/black.cssstyles/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)
$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
: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 controlrc.libvirt- Libvirt/KVM controlrc.nginx- Web server controlrc.php-fpm- PHP-FPM controlrc.samba- Samba/SMB controlrc.nfsd- NFS server controlrc.sshd- SSH daemon controlrc.apcupsd- APC UPS daemonrc.wireguard- WireGuard VPNrc.smartd- SMART monitoring daemonrc.crond- Cron schedulerrc.rsyslogd- System loggingrc.ntpd- NTP time syncrc.avahidaemon- mDNS/Avahirc.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 |