Back up the panel before starting (or at least the files you're about to touch). Every step below runs from the root of your Pterodactyl Panel install (typically /).
1. Copy the new files
Everything inside panel/ goes exactly where it sits inside that folder, relative path and all:
app/Http/ Controllers/ Admin/ Nodes/ NodeTrashController. php app/Http/ Controllers/ Api/ Client/ Servers/ TrashController. php app/Http/ Controllers/ Api/ Remote/ TrashSettingsController. php app/Http/ Requests/ Admin/ Node/ NodeTrashFormRequest. php app/Http/ Requests/ Api/ Client/ Servers/ Trash/ GetTrashRequest. php app/Http/ Requests/ Api/ Client/ Servers/ Trash/ PurgeTrashRequest. php app/Http/ Requests/ Api/ Client/ Servers/ Trash/ RestoreTrashRequest. php app/Models/ NodeTrashSetting. php app/Services/ Trash/ WingsTrashClient. php database/migrations/ 2026_ 10_ 01_ 000001_ create_ node_ trash_ settings_ table. php resources/scripts/ api/ server/ trash/ purgeTrashItems. ts resources/scripts/ api/ server/ trash/ restoreTrashItems. ts resources/scripts/ api/ swr/ getServerTrash. ts resources/scripts/ components/ server/ trash/ TrashContainer. tsx resources/scripts/ components/ server/ trash/ TrashRow. tsx resources/views/ admin/ nodes/ view/ trash. blade. php
2. Apply the fragments to existing files
Every file inside panel/ maps to a file that already exists in your panel. The filename spells out the path (_ marks the final folder), and each block starts with a DESTINO: comment (the real file) and UBICACIÓN: (exactly where it goes), with "before" and "after" code so it's a straightforward replacement:
app_→Models_ _ Permission. php app/Models/ Permission. php resources_→scripts_ components_ server_ files_ _ FileManagerContainer. tsx resources/scripts/ components/ server/ files/ FileManagerContainer. tsx resources_→scripts_ components_ server_ files_ _ FileObjectRow. tsx resources/scripts/ components/ server/ files/ FileObjectRow. tsx resources_→views_ admin_ nodes_ view_ _ TABS. blade. php resources/views/ admin/ nodes/ view/ TABS. blade. php routes_→_ admin. php routes/admin. php routes_→_ api- client. php routes/api- client. php routes_→_ api- remote. php routes/api- remote. php
None of these fragments replace a whole file - they're small, targeted blocks to insert or swap inside a file that's already there.
3. Run the migration
php artisan migrate
This creates the node_ table, where each node's config (enabled/disabled and retention days) lives.
4. Rebuild the frontend
yarn install
yarn build:production
If the build fails with a memory error (JavaScript heap out of memory) on a low-RAM box, run it with a higher heap limit, leaning on available swap:
NODE_OPTIONS=--max-old-space-size=1600 yarn build:production
5. Clear caches
php artisan config:clear
php artisan route:clear
If PHP-FPM has opcache enabled, restart it so the new code actually loads:
systemctl restart php8.2-fpm
That's the panel side done. Move on to the Wings installation before testing anything - the panel alone doesn't move any files, Wings does.
Previous: Requirements · Next: Wings Installation

