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

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

  1. Architecture Overview
  2. Page System (.page files)
  3. Navigation Structure
  4. Header Bar
  5. Footer Bar
  6. Dashboard
  7. Main (Array Devices)
  8. Shares
  9. Users
  10. Settings
  11. Plugins
  12. Docker
  13. VMs
  14. Tools
  15. About
  16. Apps
  17. Favorites
  18. Device Detail Pages
  19. File Browser
  20. Notification System
  21. Real-Time Monitoring (Nchan)
  22. Modal Dialogs & Wizards
  23. Themes
  24. Authentication & Login
  25. Data Sources
  26. JavaScript Libraries
  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)

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

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)

$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 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