VortexPanel v3.4.3 — Panel Update Feature, Chart Display Updated, MySQL, MariaDB & MongoDB Download Issue Resolved
VortexPanel v3.4.3 — Panel Update Feature, Chart Display Updated, MySQL and MongoDB Download Issue Resolved
- MySQL
Fixed MariaDB-vs-MySQL conflict detection (was checking if the service was running, not if packages were installed — caused false conflicts)
Bumped stale mysql-apt-config version (was predating all 9.x releases)
Fixed GPG key handling — mysql-apt-config generates a per-repo Signed-By path that overrides the global trusted keyring; the refreshed key now gets written to the correct path instead of a generic one
Fixed track selection — a regex bug was matching text inside the keyring path as a fake "track name," causing the real track to get silently disabled
Added RHEL/Fedora family support (correct package filenames per EL6–EL10, Fedora 42/43)
Now installs as 9.x correctly, with an honest "9.x (Innovation — rolling)" label instead of falsely promising an exact version
- MariaDB
Bypassed the official mariadb_repo_setup script (was pulling in unwanted MaxScale repos) — writes the apt source file directly instead
Fixed uninstall leaving behind a stale repo file that caused subsequent MySQL installs to silently pull in conflicting packages
3.PostgreSQL, PHP, Redis
Fixed PostgreSQL installing an unwanted extra default version alongside the requested one (switched to versioned package name)
Added a fallback chain for PHP when the primary PPA doesn't support newer Ubuntu codenames
Added cleanup-on-failure and fallback logic for Redis/Docker installs
4.MongoDB
Confirmed via real server logs: MongoDB has a hard, upstream incompatibility with kernel 6.19+ — not a VortexPanel bug, nothing to fix on our end until MongoDB itself patches it
5.Other reliability fixes
Install jobs were reporting false success even when the underlying install actually failed (exit code was being ignored)
Fixed a stale-cache bug where the Websites page's PHP version list never refreshed after installing a new PHP version
Rebuilt the Security settings modals (2FA, password, IP allowlist, audit log) as proper floating popups — they'd been rendering in the wrong place on screen
6.WP Toolkit, Navigation Bugs, Panel Update System, Dashboard Charts
Found and fixed the root cause of your original report: the backend was intentionally claiming Nginx/MySQL were installed even when they weren't ("assume available, let install fail gracefully") — replaced with honest detection at every layer (backend, install validation, and two separate frontend dropdowns that had their own hardcoded fallback lists)
7.Three broken page-refresh listeners
WP Toolkit, Databases, and Node.js Projects pages all had the same copy-paste bug: a mismatched brace meant their "refresh when you navigate here" listener never actually registered in normal use — fixed all three
Panel Update system — this turned out to already be a well-built, complete feature; the actual gaps were:
The visible modal lived in a disconnected part of the page (outside the app's own reactive scope), so clicking the button did something, but nothing could ever show it — fixed with a proper event-based bridge
The sidebar version text was a hardcoded literal string, never wired to anything real
The backend had a second, separately-hardcoded version fallback that would've silently drifted out of sync every release — now reads from the real repo file instead
Self-documented the release process (bumping VERSION + creating a matching GitHub Release) since your panel's changelog display depends on both
8.Dashboard charts — the long one:
Root cause of "blank chart": Chart.js was never successfully loading from the external CDN at all — self-hosted it instead of depending on cdnjs.cloudflare.com
Found and fixed two functions with no error handling at all, which could permanently strand the whole dashboard in its loading skeleton if either ever failed
The deeper bug (chart only visible on hover, then a full recursion crash): Chart.js's internal instrumentation was conflicting with Alpine's reactivity system on the same data. First attempt (Alpine.raw()) wasn't sufficient — the real fix moved the chart history and the Chart.js instances themselves into a closure outside Alpine's reactive object entirely, so neither can ever become a Proxy in the first place
Along the way, fixed a handful of real console errors surfaced during this debugging: a regression in the password-change modal, a missing data fetch on the Security page's site list, a missing form object on the Backups page, a field-name mismatch on Hotlink Protection, and the AI Assistant widget's visibility check
Fixed the actual thing that made all this debugging possible to trust: app.js had no cache-busting, so browsers could silently keep serving old code after a deploy — now tied to the version string