pterodactyl/panel
Pterodactyl is a free, open-source game server management panel built with Laravel. It isolates servers in Docker containers and provides a secure admin UI, user management, APIs, and scalable control for communities and hosting providers.
Architecture fit. Pterodactyl Panel is a Laravel/PHP application that manages game server instances; "eggs" are the configuration templates (docker image, startup command, environment variables, install script) that define a server type. For a team already standardized on Laravel/PHP, the runtime and extension model fit cleanly — the panel is a conventional Laravel app with an administrative surface, queue workers, and a database backend, so existing PHP operational tooling (Composer, migrations, queue/scheduler supervision) applies.
The picture now has two parallel release lines, and that is the material architectural change since the prior assessment:
v2.0.0-beta.2, 2026-10-14): a single-defect fix restoring egg export/import round-trip fidelity.v1.15.2, most recent item reviewed): a security release for the "php2shell" family (CVE-2026-109618, CVE-2026-109619). The shipped Docker image moves to PHP 8.3.36 and disables session.upload_progress in php-fpm; non-Docker installs are directed to PHP 8.2.35 or 8.3.36 with all php8.* packages upgraded together.The critical architectural read: the vulnerability is in the PHP runtime, not in panel code. Remediation lands partly in the image and partly in a php-fpm configuration directive. That means every PHP service in the estate inherits the exposure, and the "architecture fit" answer for the panel is now coupled to our broader PHP base-image and host-patching strategy.
Integration feasibility. Both releases are operationally simple; their implications are not symmetric.
v1.15.2 is a low-ceremony, high-urgency patch for anyone running 1.x in production: pull the new image, or run the documented apt upgrade path and restart php-fpm. There is no schema change implied and no migration step described.v2.0.0-beta.2 remains a round-trip integrity fix on the egg file format, distributed as a tagged Docker image (ghcr.io/pterodactyl/panel:v2.0.0-beta.2), with documented new-install and beta-to-beta paths plus a separate 1.x upgrade guide.The gap to close: the notes confirm the 1.x image is rebuilt on patched PHP, but say nothing about whether v2.0.0-beta.2's image carries 8.3.36 or the session.upload_progress mitigation. If we are piloting the beta, we must not assume the security fix rode along.
Technical risk. Three risks now dominate, in order:
php8.* package versions on a host are a known source of extension/ABI mismatch, and a half-applied upgrade can take the panel down harder than the CVE.session.upload_progress in php-fpm is a config-level defense-in-depth measure. It can alter or remove upload-progress behavior wherever the application or reverse proxy depends on it. Low probability of user-visible impact, non-zero, and cheap to verify.Carry forward from the prior assessment: artifacts exported on earlier betas are untrusted until re-exported and re-validated, since that defect was silent.
Key questions.
v2.0.0-beta.2's image been rebuilt on PHP 8.3.36 with session.upload_progress disabled, or is the beta line still carrying the vulnerable runtime?session.upload_progress? What is the observable regression if it is off?Stack fit. Fits a Laravel/PHP estate without introducing a second runtime. Operational dependencies are the usual ones: a relational database, a queue worker, scheduled tasks, and persistent storage for server data. The unusual element remains that the panel orchestrates Docker on managed nodes, so the blast radius of a panel misconfiguration extends to game-server workloads, not just the web tier.
This release adds a new integration surface at the boundary: base-image and host PHP version control. Whatever we do for the panel should be expressed once, as a standard, not as a one-off ticket.
Migration path. Three distinct paths, sequenced separately:
v1.15.1 → v1.15.2 (security): highest priority, lowest ceremony. Docker: pin the new image tag/digest and redeploy. Non-Docker: apt upgrade of all php8.* together, then reload php-fpm and the queue workers. Treat as a planned but expedited change with a restore point.beta.1 → beta.2): documented, low ceremony, appropriate for a staging pilot. Do not assume the security patch is included — verify the PHP version inside the running container.Compatibility. Three concrete checks:
php8.* packages at one version per host; verify with a version inventory sweep rather than per-package assumption.session.upload_progress dependency: confirm whether the admin UI, our reverse proxy, or any custom tooling reads upload-progress state. If yes, test explicitly; if no, record that finding so the directive is not silently re-enabled later.beta.2 instance and import into a scratch panel; this doubles as a format-compatibility check against existing 1.x eggs.Sequencing.
v1.15.2 first. Security remediation outranks the beta evaluation; it also removes the excuse to rush the 2.0 decision.v2.0.0-beta.2 image; if unpatched, block the beta pilot until it moves, or accept a documented, time-boxed exception on an isolated staging panel only.Maintenance. Two recurring streams instead of one: a security-patch stream on 1.x (irregular, urgent) and a beta-cadence upgrade stream on 2.0 (regular, no LTS guarantee). Budget capacity for both, and do not let the beta evaluation consume the attention the security stream requires. Image pinning plus written re-validation checklists convert each stream from ad-hoc patching into routine maintenance. Add PHP base-image currency to the platform's standing inventory — this release proves we cannot rely on discovering runtime CVEs through package release notes.
Support. Upstream documentation is versioned and splits v2 from 1.x, so internal runbooks must cite the v2 paths explicitly — mixed-version documentation is a predictable source of operator error. First-line support needs a new triage rule: any report of failed uploads, session weirdness, or 500s immediately following a PHP patch goes straight to platform engineering, not the helpdesk. Anything touching node/daemon connectivity or server file integrity escalates as before.
Scaling. Unaffected. The panel's scaling profile is driven by managed node and server count, queue throughput, and database size. Neither the egg export fix nor a PHP point-release changes that. One secondary note: disabling session.upload_progress removes a small amount of session-write overhead per upload — negligible, and not a reason to adopt or reject the change.
Failure modes.
beta.2): exports that appear successful but fail on import. Mitigation: mandatory round-trip validation before any egg is promoted into shared config.session.upload_progress mitigation. Low severity, high visibility if it hits an admin workflow. Mitigation: explicit test of the admin upload path post-patch.Ramp-up. Low for anyone with Laravel experience, moderate for the domain layer. Three audiences now:
apt path, package coherence, php-fpm reload, queue worker restart).A single half-day session covering the egg lifecycle plus the upgrade rehearsal still gets a small team productive; add a 30-minute tabletop on the PHP patch path. The 1.x upgrade guide remains the primary ramp-up artifact and should be walked through hands-on, not just read.
How can I help you explore Laravel packages today?