For a new game panel on one VPS, pick Pelican; keep the Pterodactyl panel if you rely on themes, add-ons or a billing module built for it. That is our verdict after installing both on Debian 13 in October 2026. Both are free, open-source web panels that run each game server in its own Docker container, and Pelican began in 2024 as a fork of Pterodactyl. In our lab, Pelican 1.0.0-rc.1 with SQLite used 271 MiB of RAM for panel, Wings and Docker together, against 370 MiB for Pterodactyl 1.15.1 with MariaDB and Redis. Pelican's official scripts then moved our Pterodactyl panel and node over in under 30 seconds, and the game server on it never restarted. Pterodactyl is not abandoned: 1.15.1 is the stable line, and 2.0 entered open beta on 14 October 2026. For a server to run either panel, see our Minecraft and game server hosting plans.
Key facts, checked on 17 October 2026:
- Pelican panel and Wings 1.0.0-rc.1 were published on 10 October 2026, the first release candidates after a long beta that ended with panel 1.0.0-beta38 on 16 August (Pelican releases). The panel is licensed AGPL-3.0, Wings MIT.
- Pterodactyl panel 1.15.1 (14 August 2026) and Wings 1.13.4 (14 October 2026) are the stable releases, under the MIT licence. Panel 2.0.0-beta.1 and beta.2 followed on 14 October, with the advice to keep production panels on 1.x for now (Pterodactyl releases).
- Pelican needs PHP 8.4 or 8.5 and runs on SQLite, MySQL 8.4+, MariaDB 10.11+ or PostgreSQL 17+ (Pelican docs). Pterodactyl 1.x needs PHP 8.2 or 8.3, MySQL or MariaDB, and Redis (Pterodactyl docs).
- The official migration needs Pterodactyl 1.11.4 or newer. Users, servers, nodes, eggs, schedules and API keys move in place; nests and locations become tags (migration guide).
- The Wings docs of both projects name KVM as the virtualization that works, and warn that OpenVZ and LXC usually do not (Pterodactyl, Pelican).
Pterodactyl panel vs Pelican: what is the same and what differs
Both projects use the same words. The panel is the website where you and your players log in. Wings is the program that starts and stops game servers on a machine and reports back to the panel. A machine running Wings is a node: the panel and Wings can share one server, as in our lab, or one panel can drive several nodes. An egg is the recipe for one game: what to download, which Docker image to use and how to start it. An allocation is an IP address and port that a game server listens on.
Each game server runs in its own Docker container, an isolated box with its own files, and gets the memory, CPU and disk limits you set when you create it. Games come as eggs. Pterodactyl 1.15.1 installed 14 for us: 5 for Minecraft, 6 Source Engine games such as Garry's Mod and Team Fortress 2, Rust, and 2 voice servers. Pelican installed none, but its built-in egg index listed 330 eggs in 10 groups, among them 134 SteamCMD games such as Valheim and 55 for Minecraft.
| Question | Pelican | Pterodactyl |
|---|---|---|
| Version we installed | 1.0.0-rc.1 panel and Wings (release candidate) | 1.15.1 panel, Wings 1.13.4 (stable) |
| Next step | Final 1.0.0 | 2.0, in open beta since 14 October 2026 |
| Licence | AGPL-3.0 panel, MIT Wings | MIT |
| PHP on Debian 13 | Debian's own PHP 8.4 | PHP 8.3 from the third-party Sury repository |
| Database and cache | SQLite by default, no Redis needed | MariaDB or MySQL plus Redis |
| Idle RAM: panel, Wings and Docker | 271 MiB | 370 MiB |
| Eggs after install | None in our install; 330 importable from the built-in egg index | 14 eggs (Minecraft, Source Engine, Rust, voice) |
| Panel files on disk | 276 MB | 135 MB |
| Wings binary | 40.6 MB | 28.3 MB |
Pelican's comparison page lists what it adds over Pterodactyl 1.x: admin roles, passkeys, webhooks, a web installer, OAuth sign-in, light and dark mode and a first-party plugin system. Pterodactyl 2.0 answers with extensions, themes, a single admin area and an egg catalogue with one-click import, according to its beta notes. The licence only matters if you change the panel's code and let others use it over the network. AGPL-3.0 then asks you to share your changed source; MIT does not.
Quick verdict
- Choose Pelican for a new install. It runs on Debian 13's own PHP 8.4 with SQLite, needs no MariaDB or Redis, used about 100 MiB less RAM in our test, and adds roles, passkeys, webhooks and a first-party plugin system.
- Stay on Pterodactyl 1.15.1 if you run themes, add-ons or a billing module made for it, or if you want a stable release rather than a release candidate. Its pages also rendered faster in our test.
How much RAM, CPU and disk each panel needs
We tested on our Amsterdam test server, in Debian 13 containers limited to 2 vCPU and 3 GiB of RAM, with nesting on so that Docker 29.9.1 could run inside. On a KVM VPS the exact numbers can differ a little. We measured three setups with no game running: a fresh Pelican, a fresh Pterodactyl, and that Pterodactyl after migrating to Pelican. RAM here means working memory, the memory each process holds for itself, checked against free -m.
| Part of the stack | Pelican, fresh (SQLite) | Pterodactyl 1.15.1 | Pelican after migration |
|---|---|---|---|
| Panel web (PHP-FPM, nginx) | 94.6 MiB | 48.3 MiB | 97.4 MiB |
| Panel queue worker | 82.0 MiB | 45.4 MiB | 75.6 MiB |
| MariaDB and Redis | not needed | 136.3 MiB | 144.8 MiB |
| Wings | 10.7 MiB | 9.8 MiB | 12.8 MiB |
| Docker daemons | 55.1 MiB | 101.5 MiB | 98.0 MiB |
| Rest of Debian | 28.4 MiB | 28.6 MiB | 28.8 MiB |
Total (free -m used) | 270.7 MiB (297 MB) | 369.8 MiB (389 MB) | 457.4 MiB (485 MB) |
| Idle CPU, share of one core | 3 to 5% | 1.8% | 4.7% |
| Login page, 5 users at once | 35 per second, p95 0.20 s | 120 per second, p95 0.06 s | 31 per second, p95 0.22 s |
Pelican's PHP processes hold about twice the memory of Pterodactyl's, most likely because its Filament interface builds more of each page on the server. A fresh Pelican still comes out lighter. SQLite is a database kept in one file and read by PHP itself, so the 129 to 139 MiB that MariaDB took simply disappears. A migrated Pelican keeps MariaDB and Redis and ends up the heaviest of the three. The Docker row ranged from 55 to 102 MiB across the three setups, with the same Docker version in each, so compare the panel rows instead.
Idle CPU is mostly the scheduler that cron starts every minute: one run took 1.75 seconds for Pelican and 0.45 seconds for Pterodactyl. In the login test, p95 means 95 of 100 requests were answered within that time. Pelican's pages render slower, which you notice while clicking around the panel, not in the game. Note that Pterodactyl ran on PHP 8.3 and Pelican on PHP 8.4 here.
On disk, each Java image an egg pulls weighs 0.8 to 0.9 GB, and our whole Pelican lab with five images and two game servers took 4.5 GB. Plans with room for the panel plus your games are on our game server hosting page.
What one game server adds, and three traps we hit
Each running server gets its own container, a helper process of about 7 MiB, and then the game's own memory. Our test game, Mindustry, used 140 to 146 MiB. For Minecraft, the Minecraft Wiki calls 1 GB of RAM acceptable for 5 to 10 players and recommends 3 GB for 10 to 15 on a vanilla Java server run from the Linux console.
- Both panels' Paper eggs fetched Paper for Minecraft 26.3. On the Java 21 image it stopped with "Minecraft 26.1 and newer requires running the server with Java 25 or above". Pick the Java 25 image, which both Paper eggs list first; PaperMC's Java page says the same.
- On Java 25, Paper then waited for the Minecraft EULA. The server owner reads Mojang's EULA and sets
eula=trueineula.txtthrough the file manager. We did not accept it on anyone's behalf, so our running test game is Mindustry, an open-source Java game. - Community eggs can lag behind. The Mindustry egg still used a Java 11 image and failed with
UnsupportedClassVersionError; switching the server to the Java 21 image fixed it.
Eggs do not travel back as easily. Pterodactyl's eggs came across in the migration, but an egg from Pelican's repository failed to import into Pterodactyl 1.15.1 with Unknown column 'sort' until we deleted that field. For per-game requirements and ports, see our guide on how to host a game server on a VPS.
How to install Pelican panel on Debian 13
Every block below runs as root on a fresh Debian 13 server. First check that the server is a real virtual machine, because Wings needs Docker:
# as root
systemd-detect-virt
A KVM VPS prints kvm. KVM gives you a full virtual machine with its own kernel. Our lab container printed lxc and only worked because we had enabled nesting.
Next, the firewall. Port 8080 is the Wings API, which browsers also use for the live console, and 2022 is Wings' SFTP port for file uploads:
# as root
apt update
apt install -y ufw
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8080/tcp
ufw allow 2022/tcp
ufw --force enable
Expect Firewall is active and enabled on system startup. If SSH uses another port, allow that one first. Then the packages, all from Debian:
# as root
apt install -y curl ca-certificates tar unzip sqlite3 cron nginx php8.4 php8.4-{fpm,cli,gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3}
php -v
The output should start with PHP 8.4 (we got 8.4.26). Download the panel and its libraries:
# as root
mkdir -p /var/www/pelican
cd /var/www/pelican
curl -L https://github.com/pelican/panel/releases/latest/download/panel.tar.gz | tar -xz
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader
php artisan p:environment:setup --url=https://panel.example.com -n
chmod -R 755 storage/* bootstrap/cache/
chown -R www-data:www-data /var/www/pelican
Composer took 11 seconds. Use your own domain in place of panel.example.com. The setup writes APP_KEY into .env. Keep a copy off the server, because without it encrypted data such as API keys cannot be read. Then the queue worker and the scheduler:
# as root, in /var/www/pelican
php artisan p:environment:queue-service -n
(crontab -l -u www-data 2>/dev/null; echo "* * * * * php /var/www/pelican/artisan schedule:run >> /dev/null 2>&1") | crontab -u www-data -
systemctl is-active pelican-queue
That prints active. Copy the nginx configuration from Pelican's webserver page into /etc/nginx/sites-available/pelican.conf, change php8.5-fpm.sock to php8.4-fpm.sock, and enable it:
# as root
rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/pelican.conf /etc/nginx/sites-enabled/pelican.conf
nginx -t && systemctl restart nginx
The documented next step is the web installer at https://your-panel/installer, which walks you through the database and the first admin account. We used the matching command line tools (p:environment:database, migrate --seed --force, p:user:make); if you do the same as root, run the chown line above again afterwards, so the SQLite file belongs to www-data. Our install then had no eggs, so import the ones you need in the admin area. Now Docker and Wings:
# as root
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker
mkdir -p /etc/pelican /var/run/wings
curl -L -o /usr/local/bin/wings "https://github.com/pelican/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
chmod u+x /usr/local/bin/wings
wings version
That prints wings v1.0.0-rc.1. Create a node in the admin area and copy its configuration into /etc/pelican/config.yml; php artisan p:node:configuration 1 --format=yaml prints the same file for node 1. Save the service file from the Wings install page:
# /etc/systemd/system/wings.service, written as root
[Unit]
Description=Wings Daemon
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
User=root
WorkingDirectory=/etc/pelican
LimitNOFILE=4096
PIDFile=/var/run/wings/daemon.pid
ExecStart=/usr/local/bin/wings
Restart=on-failure
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target
# as root
systemctl daemon-reload
systemctl enable --now wings
journalctl -u wings -n 20 --no-pager
The log ends with sftp server listening for connections. Add an allocation (your IP and a game port) to the node and create your first server. Our guide on running Docker on a VPS explains how containers and their networks behave.
Installing the Pterodactyl panel instead
Pterodactyl 1.15.1 follows the same shape, with three differences on Debian 13: PHP 8.3 comes from the third-party Sury repository, MariaDB and Redis must be running, and you write the pteroq queue worker service yourself. Wings comes from Pterodactyl's own releases and reads /etc/pterodactyl. Follow the official Pterodactyl panel guide step by step.
How to migrate from Pterodactyl to Pelican without stopping game servers
We built Pterodactyl 1.15.1 by its Debian guide (PHP 8.3 from Sury, MariaDB 11.8.6, Redis 8.0.2), added Wings 1.13.4 and two game servers, started Mindustry, and followed Pelican's migration guide on the same machine. Take backups first, because the database upgrade cannot be undone:
# as root
mysqldump -h 127.0.0.1 -P 3306 -u pterodactyl -p --single-transaction --no-tablespaces panel > ~/pterodactyl-backup.sql
tar -czf ~/pterodactyl-files.tar.gz -C /var/www pterodactyl -C /etc pterodactyl
curl -fsSLo migrate-panel.sh https://pelican.dev/migrate-panel.sh
bash migrate-panel.sh --check
The check changes nothing. Ours failed twice: FAIL PHP 8.3 doesn't meet Pelican's requirements (missing intl, pdo_sqlite and sqlite3, and a library needing PHP 8.4) and FAIL Missing PHP extensions. Install: php8.3-intl. MariaDB 11.8.6, the database rights and the pteroq worker all passed. PHP 8.4 can sit next to 8.3:
# as root
apt install -y php8.4 php8.4-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip,intl,sqlite3}
bash migrate-panel.sh --check
bash migrate-panel.sh
Now the check said All checks passed. The real run asks for the Pterodactyl folder and the web server user (Enter keeps the defaults), then wants yes. In 17.4 seconds it put Pterodactyl in maintenance mode, disabled pteroq and its cron line, installed Pelican in /var/www/pelican with your .env, upgraded the database and started a pelican-queue service. Point nginx at the new folder and PHP:
# as root
sed -e 's#/var/www/pterodactyl/public#/var/www/pelican/public#' -e 's#php8.3-fpm.sock#php8.4-fpm.sock#' /etc/nginx/sites-available/pterodactyl.conf > /etc/nginx/sites-available/pelican.conf
rm /etc/nginx/sites-enabled/pterodactyl.conf
ln -s /etc/nginx/sites-available/pelican.conf /etc/nginx/sites-enabled/pelican.conf
nginx -t && systemctl reload nginx
Then on every node:
# as root, on each Wings node
curl -fsSLo migrate-wings.sh https://pelican.dev/migrate-wings.sh
bash migrate-wings.sh
That took 11.3 seconds, most of it spent waiting for Wings to start. Wings 1.0.0-rc.1 logged detected server is running, re-attaching to process and kept the old /var/lib/pterodactyl folders. Mindustry showed 166 seconds of uptime after both migrations, so it never stopped. What we checked afterwards:
- Both servers and the admin account with its old password worked, and the admin got Pelican's Root Admin role.
- Eggs carried their old nest name as a tag (
["Minecraft"]), and the node its location code (["ams"]). - The old
ptla_andptlc_API keys still answered with HTTP 200. - A restart through Pelican brought the game back:
Opened a server on port 6567.
Themes and code changes do not come across, and Pelican removed the nests and locations API endpoints, so check any billing module that calls them. Afterwards, systemctl disable --now php8.3-fpm retires the old PHP. Pelican's guide does not mention Pterodactyl 2.0, whose own upgrade guide needs 1.12.0 or newer. Whichever way you go, rehearse on a copy of the panel first.
How to secure a Pterodactyl or Pelican panel
HTTPS for the panel and for Wings
Put the panel on a domain with a TLS certificate. Pelican's webserver page has the nginx version with Let's Encrypt, and our guide to a reverse proxy with a free TLS certificate shows the Caddy way. Wings needs a certificate too, as Pelican's docs say. The console address the panel handed out was ws:// plus the node on port 8080, so browsers talk to Wings directly, and they refuse an unencrypted ws:// connection from an HTTPS page.
Two-factor login, and what it misses
Both panels read APP_2FA_REQUIRED: 0 for not required, 1 for admins only, 2 for everyone. In Pelican it sits under Admin, Settings, "2FA Requirement". Set at least admins only. In our Pelican test with it on 1, an admin without 2FA could still use an API key, because the check guards the web interface only. Restrict API keys to allowed IPs and delete the ones you no longer use.
The firewall does not cover game ports
Docker publishes container ports outside ufw's rules. We left game port 6567 out of ufw and tested from outside the server: it was still open, while a normal program on port 9000 was blocked. To close a game port, remove the allocation or stop the server. Lock down SSH with our guide on how to secure a Debian 13 VPS.
Best VPS for Pterodactyl or Pelican: which plan and which city
A panel pays off when several people or servers are involved; for one world for your friends, a plain systemd service is lighter. Our VPS plans have shared vCPUs and our VDS plans have dedicated vCPUs, which keep tick times steadier under load; our guide to VPS vs VDS explains the difference.
| Your situation | Panel | Plan | Why |
|---|---|---|---|
| Learning a panel, one tiny server | Pelican on SQLite | VPS Micro (2 vCPU, 2 GB RAM, 40 GB NVMe, 1 Gb/s) | The stack needs about 0.3 GB, leaving room for one small game |
| 1 or 2 small servers: Minecraft for friends, Terraria, Mindustry | Pelican on SQLite | VPS Mini (4 vCPU, 4 GB RAM, 80 GB NVMe, 1 Gb/s) | About 3.5 GB free for games, and disk for several Java images |
| Several servers, Paper with plugins, a modpack | Pelican, or Pterodactyl 1.15.1 for its add-ons | VDS Small (4 vCPU, 8 GB RAM, 240 GB NVMe, 10 Gb/s) | Dedicated vCPUs, room for 3 or 4 mid-sized servers |
| A community with many servers, or Rust next to Minecraft | Either | VDS Medium (8 vCPU, 16 GB RAM, 480 GB NVMe, 10 Gb/s) | Rust alone asks for 12 GB of free memory, per Facepunch |
| Existing Pterodactyl with themes or add-ons | Stay on 1.15.1, test 2.0 or Pelican on a copy | Same size as today | Code changes do not survive either move |
Then pick the city nearest your players. The figures below are our own ping.pe measurements of 6 October 2026, from the probe city to our server.
| Most of your players are in | City | Measured latency |
|---|---|---|
| Germany, the UK, France or the Benelux | Amsterdam | Frankfurt 6.6 ms, London 6.7 ms, Paris 9.3 ms |
| Kosovo, North Macedonia and the wider Balkans | Prishtina | Vienna 18.6 ms, Athens 30.9 ms; Skopje about 3 ms on our own network |
| Ireland | Dublin | Our closest city for Irish players |
Every plan runs on KVM with NVMe storage, unmetered traffic and its own IPv4 and IPv6 address, and you can upgrade later from the client area with a short reboot. Availability by city is on the plans page, and the game-focused sizes are on our Minecraft and game server hosting page.
Frequently asked questions
What is the Pterodactyl panel?
The Pterodactyl panel is a free, open-source web panel for running game servers, released under the MIT licence. You manage servers in a browser, and a program called Wings starts each game server in its own Docker container on one or more nodes. The stable version on 17 October 2026 was 1.15.1, with 2.0 in open beta; Pelican is a fork of it from 2024.
Is Pelican better than Pterodactyl?
For a new install in October 2026, yes: Pelican adds roles, passkeys, webhooks, first-party plugins and SQLite support, and in our test used 271 MiB for panel, Wings and Docker against 370 MiB for Pterodactyl 1.15.1. Pterodactyl stays the safer pick if you rely on its themes, add-ons or WHMCS module, since Pelican is still a release candidate.
Is the Pterodactyl panel still maintained in 2026?
Yes. Pterodactyl panel 1.15.1 was released on 14 August 2026 and Wings 1.13.4 on 14 October 2026. Version 2.0 entered open beta on 14 October 2026 with extensions, themes and a new admin area, and its notes advise keeping production panels on 1.x for now.
How much RAM does the Pterodactyl panel need?
In our test, Pterodactyl 1.15.1 with MariaDB, Redis, Wings and Docker used 370 MiB with no game running, and the whole Debian 13 system 389 MB. MariaDB alone took 129 MiB. Game servers come on top: the Minecraft Wiki calls 1 GB acceptable for 5 to 10 players on vanilla Java.
Can I migrate from Pterodactyl to Pelican without losing servers?
Yes, with Pelican's official scripts. You need Pterodactyl 1.11.4 or newer, PHP 8.4 with the intl and SQLite extensions, and MySQL 8.4+ or MariaDB 10.11+. In our test the panel script took 17 seconds and the Wings script 11 seconds, the running game server was not restarted, and all 14 stock eggs carried over, tagged with their old nest names. Back up the database first, because the upgrade cannot be undone.
What is the best VPS for Pterodactyl or Pelican?
A KVM VPS, because Wings needs Docker and both projects' Wings docs say OpenVZ and LXC usually do not work. Run systemd-detect-virt; it should print kvm. Plan at least 4 GB of RAM for one or two small game servers, such as VPS Mini (4 vCPU, 4 GB RAM, 80 GB NVMe, 1 Gb/s), and 8 GB with dedicated vCPUs for several, such as VDS Small (4 vCPU, 8 GB RAM, 240 GB NVMe, 10 Gb/s).
Put your panel on a server that runs Docker properly
Both panels need a real virtual machine, memory for the stack plus the games, and a location near your players. RS Computers runs KVM VPS and VDS servers in Amsterdam, Dublin and Prishtina, so Docker and Wings run on every plan without nesting tricks. Compare sizes on our Minecraft and game server hosting page, or see how we set up a FiveM server on a VDS with txAdmin if roleplay is next. If you would rather not install or migrate the panel yourself, setup work is quoted per job: ask us on Telegram which plan fits the servers you want to run.