2.0 previewThe Extensions SDK

The game server panel
you host yourself.

Free and open source. Every game server in its own Docker container.Free and open source. Every server runs in its own Docker container, with a live console, files, backups and schedules for you, your friends or your customers.

Address

node1.us-east:25565

Uptime

Offline

CPU Load

Offline

Memory

Offline

Disk

0 Bytes/ 10 GiB

Network (Inbound)

Offline

Network (Outbound)

Offline

Pterodactyl is a free, open-source control panel for game servers. Friends run one server on it. Hosting companies run thousands.

Minecraft :25565

  • Minecraft :25565

  • Rust :28015

  • Valheim :2456

  • Counter-Strike 2 :27015

  • Palworld :8211

  • ARK: Survival Evolved :7777

  • FiveM :30120

  • Terraria :7777

  • Garry's Mod
  • Project Zomboid
  • Factorio
  • Satisfactory
  • Team Fortress 2
  • Arma 3
  • 7 Days to Die
  • Unturned
  • Don't Starve Together
  • Discord bots
  • TeamSpeak
  • Mumble

Noisy neighbours,
contained.

Every server runs in its own Docker container, held to the CPU, memory and IO limits you set.

Wings gives every server its own Docker container, then holds it to the limits you set: a CPU quota, a hard memory ceiling, an IO weight and a cap of 512 processes.

A server that hits its quota is throttled at that line. Everything else on the node keeps its share, and keeps running even when the panel itself is down.

  • cpu_quota
  • memory + swap
  • blkio_weight
  • pids_limit 512
  • pterodactyl_nw
  • mc-survival idle

    8% of 200%

  • rust-eu-1 idle

    8% of 400%

  • valheim-co idle

    8% of 100%

Locked down
at every hop.

Two-factor sign-in, scoped API keys, and a signed ten-minute token on every console request.

Accounts sit behind bcrypt and TOTP two-factor, with ten single-use recovery codes. API keys are scoped, encrypted at rest and can be pinned to IP addresses.

Every console and file request to Wings carries a token signed for one server and one user, valid for ten minutes and checked permission by permission. The container at the end runs as an unprivileged user on a read-only root filesystem.

  • bcrypt
  • TOTP 2FA
  • HS256 JWT
  • no-new-privileges
  • read-only rootfs

console say Hello

alex · subuser

  1. Panel GET /api/client/servers/1a7ce997/websocket

    • session and CSRF token
    • two-factor verified
    • websocket.connect

    token signed, expires in 10 min

  2. Wings wss://node1.example.com:8080

    • HS256 signature
    • server_uuid matches
    • control.console

    command accepted

  3. Container aurora-smp

    • unprivileged user
    • read-only root filesystem
    • no-new-privileges

    stdin: say Hello

server_uuid
"1a7ce997-4b5c-…"
user_uuid
"c51d3e2a-…"
permissions
["websocket.connect", "control.console", "file.read"]
exp
iat + 600

Extend it
without forking it.

Add pages, tabs and API routes to the panel without changing its code.

Extensions add pages, tabs, table columns and API routes to the panel without changing its code. A React frontend, a Laravel backend, or both, packed into one .pteroext file.

Their routes run behind the panel's own sign-in, two-factor and rate limits. One that throws is skipped and reported, and the panel keeps running.

  • Panel 2.0 preview
  • @pterodactyl/sdk
  • p:extension:dev --watch
import { definePterodactylExtension } from '@pterodactyl/sdk';import './styles.css';import { setConfig } from './config';import NotePreview from './NotePreview';export default definePterodactylExtension({    setup({ config, slots, screens }) {        setConfig(config);        screens.register('notes', () => import('./screens/NotesScreen'));        slots.register('server.console.before', NotePreview);    },});

$ php artisan p:extension:install server-notes.pteroext --enable

+--------------+--------------+---------+-----+---------+
| ID           | Name         | Version | UI  | State   |
+--------------+--------------+---------+-----+---------+
| server-notes | Server Notes | 1.0.0   | yes | enabled |
+--------------+--------------+---------+-----+---------+

One panel.
Every game.

An Egg packs a game's Docker image, startup command and config into one portable recipe.

An Egg is a portable recipe for a game: the Docker image it runs in, its startup command, the config files to rewrite and the variables players can change.

Install one from the community library or write your own. Minecraft, Rust, Valheim and a Discord bot all get the same console, files, backups and schedules.

  • PTDL_v2
  • docker_images
  • startup
  • variables
aurora-smprunning
cpu 14%mem 1.2 GBplayers 14 / 20

Open source
since 2015.

MIT licensed and built in public by 191 contributors, with no paid tiers.

MIT licensed and built in public by 191 contributors. There are no paid tiers or feature gates; the panel you install is the whole panel.

  • MIT
  • 9.3k stars
  • 2.7k forks
  • PHP · React · Go

Install it
on your own server.

A Linux server, a domain and a database. The panel runs where your users sign in; Wings runs on every machine that hosts games.

  1. 01

    Install the panel

    A Laravel app behind NGINX, Apache or Caddy, with MariaDB and Redis. Or run the Docker image.

  2. 02

    Add a node

    Install Wings on any Linux machine with Docker. The panel hands you its configure command.

  3. 03

    Create a server

    Pick an Egg, set memory, CPU and disk limits, and add subusers with only the permissions they need.

# Ubuntu 24.04: PHP 8.3, MariaDB, Redis, NGINX
apt -y install php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip,intl} mariadb-server redis-server tar unzip curl nginx
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

mkdir -p /var/www/pterodactyl
cd /var/www/pterodactyl
curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
tar -xzvf panel.tar.gz

cp .env.example .env
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader
php artisan key:generate --force

php artisan p:environment:setup
php artisan p:environment:database
php artisan migrate --seed --force
php artisan p:user:make

Start hosting with Pterodactyl.

MIT licensed and free to run on your own hardware. The install guide goes from a fresh Linux server to your first game server.