]> ### 2026.09.04 - Pin `settings-ui.txz` to the SHA-256 generated from the package in the release workflow, so Unraid verifies the root-installed download and Community Applications can retain the plugin (refs #79) - Rebuild the NVIDIA userspace driver volume from **Update Images** when its recorded version differs from the host driver; Install already performed this check, but the normal update path could keep stale libraries - Report container restart counts, exit state, NVIDIA driver-volume mismatches, zero-copy negotiation failures, and recent logs from Diagnostics, giving restart loops and black-screen reports enough evidence to act on (refs #78, #76, #66) - Document a separate Steam library mount for keeping appdata on cache while games live on another disk (refs #77) ### 2026.08.19a - Refresh Wolf's udev rules from **Update Images**, not only from Install. The rules track the Wolf image and Update Images is how most people pick up a new one, so a newer Wolf could end up running against rules fetched for an older one — which is how the gamepad input leak came back after re-pulling images (refs #57). The rules now live in `scripts/udev-rules.sh`, shared by both entry points ### 2026.08.19 - Fix Wolf's built-in "Test ball" aborting the moment it starts ("Wayland endpoint /tmp/sockets/ exists but is not a socket", games-on-whales/wolf#462). Apps that run without their own compositor have no Wayland socket, so Wolf's readiness check inspects `XDG_RUNTIME_DIR`, finds a directory, and kills the session. Deploy now sets `WOLF_SKIP_WAYLAND_SOCKET_WAIT=TRUE`, and **Update Images** patches an already-generated Compose file so existing installs are fixed without reconfiguring ### 2026.08.11 - Prevent fresh installs from creating an unwritable first app home: deploy now seeds both app-state roots with an inheritable ACL for the configured app UID/GID, so directories Wolf creates later as root remain writable immediately; ownership is normalized on the next Install or Update Images ### 2026.08.09a - Fix apps (Steam, Lutris) still failing to start after 2026.07.30: the app-state ownership migration only ran from **Install**, so anyone who clicked **Update Images** after the plugin update never got it. Both actions now re-own app state and align the UID/GID saved for already-paired clients - Re-own `profile_data` as well as `profile-data`, and stop trusting the `.run-ids` stamp on its own — the tree is spot-checked each run, so state that drifted back to another owner is re-migrated instead of being skipped - Add an **App run UID / GID** setting (default `99:100`, Unraid's `nobody:users`). Set it to `1000:1000` to keep app data owned by Wolf's own default user; the migration re-owns existing state to whichever pair is configured - Fix **Update Images** failing with "Wolf is not deployed" while the stack was running: it now treats a generated `docker-compose.yml` as the source of truth and repairs the stale `DEPLOYED` flag - Fix controllers never appearing inside apps when Wolf's `fake-udev` helper lost its executable bit (`Docker exec failed (126) … Permission denied`). Wolf refreshes the helper with `cp`, which keeps the mode of an existing file, so the plugin now restores it before starting Wolf — and warns when appdata sits on a `noexec` mount, where nothing can fix it - Add a **Diagnostics** button (and `scripts/diagnose.sh`) that reports run UID/GID, the UID saved for paired clients, app-state ownership, `fake-udev`, the installed udev rules, and the socket volume owner. Read-only, safe while streaming, and meant to be pasted into bug reports ### 2026.08.09 - Fix gamepad input leaking out of the streamed session (kicked back to Wolf UI, another app container launching, host desktop reacting): the plugin's hand-written udev rules matched device names Wolf no longer uses and never stripped the `uaccess` ACL. Deploy now installs Wolf's own `85-wolf.rules` (games-on-whales/wolf#455), fetched from upstream at deploy time with a bundled fallback when the host is offline - Install the rules as `/etc/udev/rules.d/85-wolf.rules`, the path Wolf's `scripts/wolf-input-diag.sh` checks, and remove the superseded `85-gow-virtual-inputs.rules` from both `/etc/udev/rules.d` and the flash drive ### 2026.07.19 - Add an "NVIDIA zero-copy pipeline" toggle to the setup form. Wolf's zero-copy NVIDIA pipeline fails to negotiate CUDA memory on some newer driver branches, so Moonlight connects and then disconnects with "no video received" a few seconds later (GStreamer `cudaconvertscale` "not-negotiated"). Unchecking the option sets `WOLF_USE_ZERO_COPY=FALSE` so Wolf uses its legacy pipeline; see the new FAQ entry ### 2026.06.14 - Fix Wolf config and Moonlight pairing being lost on every container restart: Wolf's `startup.sh` derives its config path from `HOST_APPS_STATE_FOLDER`, so with appdata mounted at `/etc/wolf` it wrote config/pairing to an unmounted (ephemeral) path and lost it on restart. Mount appdata at the same path inside the container as on the host (identity mount) so Wolf's config, pairing, and spawned app state all persist ### 2026.06.08 - Match Wolf's new embedded PulseAudio: Wolf now runs PulseAudio inside its own container instead of the separate WolfPulseAudio sidecar - Recreate the `wolf-socket` runtime volume on deploy, update, and uninstall so the embedded PulseAudio (running as root) gets a `/tmp/sockets` it owns, fixing the "XDG_RUNTIME_DIR is not owned by us" PulseAudio start failures seen after upgrading from the sidecar - Drop the now-unused `WOLF_PULSE_CONTAINER_TIMEOUT_MS` setting, since Wolf waits for the PulseAudio socket directly instead of sleeping for a fixed timeout ### 2026.05.30 - Set `HOST_APPS_STATE_FOLDER` to the selected appdata path so Wolf bind-mounts spawned app containers from the chosen appdata directory instead of host `/etc/wolf` - Fix the Wolf Den port not changing: publish the configured host port to the container's port `8080` instead of putting Wolf Den on host networking, which ignored the setting and left it on `8080` ### 2026.05.25 - Mount the selected appdata root at `/etc/wolf` so Wolf-created app containers write state under the chosen appdata path instead of host `/etc` - Copy any existing host `/etc/wolf` data into the selected appdata path without overwriting newer appdata files ### 2026.05.23 - Add Wolf network settings to the GUI: host, bridge, or a custom Docker network such as `br0` - Publish Wolf's default Moonlight ports when bridge mode is selected - Support assigning Wolf a static IPv4 address on a custom Docker network so Moonlight can use a different IP than the Unraid host - Pass the static Wolf IP through `WOLF_INTERNAL_IP` so Wolf advertises the selected address to Moonlight - Show the configured Wolf network and Moonlight host on the settings dashboard ### 2026.05.22 - Make plugin boot replay tolerant of Docker, network, and NVIDIA driver services still coming up during Unraid startup - Replace the immediate `/boot/config/go` compose start with a retrying autostart hook that waits for Docker and GPU device nodes - Generate NVIDIA compose device entries from existing `/dev/nvidia*` nodes so older cards do not fail on absent optional devices - Warn when Avahi and Wolf are both bound to UDP 5353, which can make Moonlight mDNS discovery unreliable ### 2026.05.21b - Make Wolf Den listen on the configured host port directly instead of publishing container port `8080` - Remove WolfPulseAudio when the plugin stops, reconfigures, or uninstalls the Wolf stack ### 2026.05.21a - Allow same-day hotfix release tags such as `2026.05.21a` - Keep the install/update PLG URL on release assets so script downloads resolve from an existing tag - Add a configurable Wolf Den host port and use it in Docker Compose, dashboard links, and deploy output - Make Reconfigure reopen the setup form even when an existing Wolf stack is present ### 2026.05.21 - Point the moving plugin URL at the latest GitHub release asset instead of `main` so Unraid only advertises versions that have a matching `settings-ui.txz` package ### 2026.05.20 - Fix multi-GPU labels so each render node shows its own `lspci` device name instead of reusing another GPU's name - Remove stale NVIDIA driver-volume helper containers and explicitly delete the temporary helper container after populating the volume - Mount Wolf Den's writable app data and compatibility-tools directories so database state persists and compatibility tools can be provisioned - Keep the settings page in dashboard mode when a compose file or Wolf containers already exist, exposing Start/Stop/Update actions even if the deploy flag was not persisted - Let Start/Stop fall back to the fixed container names when an existing stack has no discoverable compose file - Show direct Wolf Den and Moonlight pairing URLs in the settings page and deployment output - Clarify the NVIDIA `nvidia_drm.modeset` FAQ with the exact Modprobe.d Config File content ### 2026.05.08 - Settings page now nests under the User Utilities subsection of Settings (Menu="OtherSettings") instead of appearing as a peer of the top-level Settings categories - Restyle the settings page using Unraid's theme palette variables so text and cards render correctly under all four themes (white, azure, gray, black) — fixes invisible text on light themes ### 2026.04.26 - Detect missing nvidia_drm.modeset and warn in the settings UI (setup form + dashboard) with a link to the new FAQ entry; does not modify kernel module parameters automatically - Remove the redundant page-level CSRF check from the settings UI while still passing csrf_token in all POST forms, fixing valid form submissions being rejected ### 2026.04.25 - Require the Compose Manager plugin (checked at plg install time) since deploy/start/stop/update all call docker compose - Pin container_name to wolf/wolf-den in generated docker-compose.yml so the settings UI status badges report Running instead of Not deployed ### 2026.04.24 - Add CSRF tokens to all settings UI forms (Unraid webGui rejects POSTs without them) - Move plugin page from Utilities to Settings menu to match launch target ### 2026.04.14 - Fix white screen when clicking Install (exec blocking + JS redirect) - Fix GPU_NAME with spaces breaking bash config sourcing (single-quote values) - Fix Wolf v0 config missing uuid causing crash on startup - Add wget timeouts to prevent hanging on slow/unreachable GitHub releases ### 2026.04.10 - Complete rewrite for Wolf + Wolf Den - Deploys Wolf and Wolf Den via Docker Compose - GPU picker in the settings UI (multi-GPU support) - Configurable appdata path - Persistent udev rules and auto-start via /boot/config/go - Requires Unraid 6.12+ if [ ! -f /boot/config/plugins/compose.manager.plg ]; then echo "" echo "-----------------------------------------------------------" echo " &name; has not been installed!" echo " Install the 'Compose Manager' plugin from Community" echo " Applications first, then retry." echo "-----------------------------------------------------------" echo "" exit 1 fi rm -f $(ls &plugin;/packages/settings-ui-*.txz 2>/dev/null | grep -v '&version;') 2>/dev/null || true &gitReleaseURL;/settings-ui.txz &sha256; echo "╔══════════════════════════╗" echo "║ Installing GoW Plugin ║" echo "╚══════════════════════════╝" # Lay down the settings UI page and the helper scripts (both shipped in the # versioned package) before running them, so they match this exact version. /sbin/installpkg &plugin;/packages/settings-ui-&version;.txz chmod +x &script_dir;/*.sh if ! bash &script_dir;/preinstall.sh; then echo "Preconditions not met; aborting installation" rm -rf &plugin; exit 1 fi if ! bash &script_dir;/install.sh; then echo "Installation failed; cleaning up" rm -rf &plugin; exit 1 fi echo "" echo "Plugin installed. Open Settings > Games on Whales to complete setup." echo "╔════════════════════════════╗" echo "║ Uninstalling GoW Plugin ║" echo "╚════════════════════════════╝" bash &script_dir;/uninstall.sh || echo "Uninstaller encountered errors (continuing)" rm -rf &plugin; rm -rf &emhttp;