# 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) --- ``` ### 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** - `` 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** - `` 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:** `` - 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 - `` 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 |