Game panel benchmarks,
re-run every week.

Every Monday we run FeatherPanel, Pterodactyl, Pelican and Hydrodactyl and their Wings daemons through the same open-source suite on the same machine. This page is generated from the raw results, so no figure on it is typed in by hand.

Panel resultsWings resultsMethodologyRaw JSON

This run at a glance

26 Oct 2026, 12:23 UTC. Panels at 4 CPUs, median of 3 rounds.

Against Pterodactyl
12x
FeatherPanel served, more successful req/s (2 endpoints, 4 CPUs)
Against Pelican
62x
FeatherPanel served, more successful req/s (2 endpoints, 4 CPUs)
Against Hydrodactyl
13x
FeatherPanel served, more successful req/s (2 endpoints, 4 CPUs)
Best p99 latency
22 ms
FeatherPanel, slowest endpoint at 4 CPUs
FeatherPanel error rate
0%
Non-2xx over every load test. Highest elsewhere: Pterodactyl 0%
FeatherPanel peak memory
196 MiB
Under load at 4 CPUs, idle 136 MiB
FeatherPanel startup
15.4 s
Compose up to first healthy response, image 1002 MiB

How to read this

A figure like 3.0x means FeatherPanel answered three times as many requests per second as that panel, on the same machine, in the same run. It is the geometric mean over the endpoints that need a login, so one fast endpoint cannot carry the result. Only successful responses count: an error or a 429 is not a served request.

Latency is shown as percentiles. p50 is the typical request, p99 is the slowest one in a hundred, which is what a user notices when a page hangs. Lower is better for latency, memory, CPU time, error rate and startup.

Compare targets inside one run. Between weeks the runner's CPU model can change, so this week's figure and last week's are not directly comparable. The 4 CPU quota uses the whole runner, so the load generator competes with the panel for CPU there.

Panels

Panel API under load
at 1, 2, 4 CPUs.

oha keeps 32 connections busy for 10 seconds per endpoint while the panel container is capped by a CPU quota. The database and Redis run uncapped beside it. API rate limiting is switched off for every panel through its own configuration.

AMD EPYC 9V45 96-Core Processor, 4 vCPU, 16 GB RAM, median of 3 rounds

Each endpoint

Successful requests per second and latency percentiles for every endpoint. Pick a CPU quota.

settings (unauth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel1,600
  • Pterodactyl79
  • Pelican19
  • Hydrodactyl65
Latencyms, lower is better
  • FeatherPanelp50 20, p90 28, p99 37
  • Pterodactylp50 399, p90 491, p99 508
  • Pelicanp50 1,698, p90 1,932, p99 2,107
  • Hydrodactylp50 496, p90 583, p99 604

p50 (typical)p90p99 (slowest 1%)

account (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel1,489
  • Pterodactyl83
  • Pelican17
  • Hydrodactyl77
Latencyms, lower is better
  • FeatherPanelp50 21, p90 30, p99 39
  • Pterodactylp50 395, p90 414, p99 497
  • Pelicanp50 1,886, p90 2,169, p99 2,478
  • Hydrodactylp50 404, p90 485, p99 498

p50 (typical)p90p99 (slowest 1%)

list servers (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel1,377
  • Pterodactyl77
  • Pelican18
  • Hydrodactyl70
Latencyms, lower is better
  • FeatherPanelp50 23, p90 32, p99 60
  • Pterodactylp50 404, p90 486, p99 497
  • Pelicanp50 1,795, p90 2,000, p99 2,192
  • Hydrodactylp50 477, p90 504, p99 584

p50 (typical)p90p99 (slowest 1%)

settings (unauth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel2,482
  • Pterodactyl152
  • Pelican38
  • Hydrodactyl122
Latencyms, lower is better
  • FeatherPanelp50 13, p90 20, p99 25
  • Pterodactylp50 204, p90 263, p99 289
  • Pelicanp50 812, p90 916, p99 996
  • Hydrodactylp50 272, p90 299, p99 353

p50 (typical)p90p99 (slowest 1%)

account (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel2,436
  • Pterodactyl158
  • Pelican34
  • Hydrodactyl149
Latencyms, lower is better
  • FeatherPanelp50 13, p90 20, p99 27
  • Pterodactylp50 200, p90 222, p99 270
  • Pelicanp50 914, p90 1,011, p99 1,096
  • Hydrodactylp50 206, p90 262, p99 283

p50 (typical)p90p99 (slowest 1%)

list servers (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel2,569
  • Pterodactyl154
  • Pelican35
  • Hydrodactyl140
Latencyms, lower is better
  • FeatherPanelp50 12, p90 20, p99 26
  • Pterodactylp50 204, p90 246, p99 268
  • Pelicanp50 916, p90 1,006, p99 1,087
  • Hydrodactylp50 218, p90 272, p99 289

p50 (typical)p90p99 (slowest 1%)

settings (unauth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel3,246
  • Pterodactyl294
  • Pelican53
  • Hydrodactyl220
Latencyms, lower is better
  • FeatherPanelp50 9.4, p90 16, p99 21
  • Pterodactylp50 107, p90 126, p99 147
  • Pelicanp50 575, p90 700, p99 888
  • Hydrodactylp50 142, p90 168, p99 193

p50 (typical)p90p99 (slowest 1%)

account (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel3,405
  • Pterodactyl290
  • Pelican53
  • Hydrodactyl272
Latencyms, lower is better
  • FeatherPanelp50 8.9, p90 15, p99 21
  • Pterodactylp50 110, p90 123, p99 141
  • Pelicanp50 588, p90 644, p99 778
  • Hydrodactylp50 116, p90 133, p99 161

p50 (typical)p90p99 (slowest 1%)

list servers (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel3,279
  • Pterodactyl264
  • Pelican55
  • Hydrodactyl242
Latencyms, lower is better
  • FeatherPanelp50 9.2, p90 16, p99 22
  • Pterodactylp50 120, p90 136, p99 160
  • Pelicanp50 569, p90 633, p99 710
  • Hydrodactylp50 130, p90 152, p99 175

p50 (typical)p90p99 (slowest 1%)

CPU scaling

How successful req/s changes as the container gets more CPU. A line that keeps rising uses extra cores; a flat line is limited by something else, such as a single-threaded worker or the database.

settings (unauth)req/s, higher is better
01k2k3k4k1 CPU2 CPUs4 CPUs
  • FeatherPanel
  • Pterodactyl
  • Pelican
  • Hydrodactyl
account (auth)req/s, higher is better
01k2k3k4k1 CPU2 CPUs4 CPUs
  • FeatherPanel
  • Pterodactyl
  • Pelican
  • Hydrodactyl
list servers (auth)req/s, higher is better
01k2k3k4k1 CPU2 CPUs4 CPUs
  • FeatherPanel
  • Pterodactyl
  • Pelican
  • Hydrodactyl

Resources

Memory and CPU at 4 CPUs, the error rate over every load test, and what it takes to start the stack. Startup runs from docker compose up to the first healthy response, so it includes database migrations the image runs on boot.

Peak memory under loadMiB, lower is better
  • FeatherPanel196
  • Pterodactyl143
  • Pelican328
  • Hydrodactyl134
Idle memoryMiB, lower is better
  • FeatherPanel136
  • Pterodactyl94
  • Pelican200
  • Hydrodactyl107
CPU time per requestms, lower is better
  • FeatherPanel0.71
  • Pterodactyl12.17
  • Pelican57.15
  • Hydrodactyl14.18
Error rate over all load tests% of responses, lower is better

Not recorded in this run.

Startup timeseconds, lower is better
  • FeatherPanel15.4 s
  • Pterodactyl7.63 s
  • Pelican11.5 s
  • Hydrodactyl8.63 s
Image sizeuncompressed, lower is better
  • FeatherPanel1002 MiB
  • Pterodactyl332 MiB
  • Pelican510 MiB
  • Hydrodactyl555 MiB

Wings

Node daemons
file API and tasks.

Each daemon boots against a small mock of the panel API, so the numbers isolate the daemon. Load tests use oha. File tasks are timed one at a time on a generated dataset, and the first run is discarded.

AMD EPYC 7763 64-Core Processor, 4 vCPU, 16 GB RAM, median of 3 rounds

Against Pterodactyl Wings
1.0x
FeatherWings served, more successful req/s (5 endpoints, 4 CPUs)
Against Pelican Wings
1.0x
FeatherWings served, more successful req/s (5 endpoints, 4 CPUs)
File tasks against Pterodactyl Wings
0.8x
Slower, geometric mean of 14 timed tasks
File tasks against Pelican Wings
0.8x
Slower, geometric mean of 14 timed tasks
Best p99 latency
161 ms
FeatherWings, slowest endpoint at 4 CPUs
FeatherWings error rate
0%
Non-2xx over every load test. Highest elsewhere: Pterodactyl Wings 0%
FeatherWings peak memory
42 MiB
Under load at 4 CPUs, idle 38 MiB
FeatherWings startup
883 ms
Compose up to first healthy response, image 56 MiB

Each endpoint

Successful requests per second and latency percentiles for every endpoint. Pick a CPU quota.

system info

Successful requests per secondreq/s, higher is better
  • FeatherWings478
  • Pterodactyl Wings482
  • Pelican Wings476
Latencyms, lower is better
  • FeatherWingsp50 68, p90 89, p99 112
  • Pterodactyl Wingsp50 68, p90 87, p99 109
  • Pelican Wingsp50 69, p90 86, p99 108

p50 (typical)p90p99 (slowest 1%)

list directory (50 entries)

Successful requests per secondreq/s, higher is better
  • FeatherWings629
  • Pterodactyl Wings578
  • Pelican Wings636
Latencyms, lower is better
  • FeatherWingsp50 55, p90 90, p99 125
  • Pterodactyl Wingsp50 39, p90 109, p99 205
  • Pelican Wingsp50 29, p90 101, p99 194

p50 (typical)p90p99 (slowest 1%)

download file (4 KiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings6,133
  • Pterodactyl Wings5,909
  • Pelican Wings5,880
Latencyms, lower is better
  • FeatherWingsp50 2.3, p90 6.2, p99 55
  • Pterodactyl Wingsp50 2.5, p90 6.7, p99 55
  • Pelican Wingsp50 2.4, p90 6.6, p99 55

p50 (typical)p90p99 (slowest 1%)

download file (8 MiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings35
  • Pterodactyl Wings35
  • Pelican Wings35
Latencyms, lower is better
  • FeatherWingsp50 212, p90 313, p99 401
  • Pterodactyl Wingsp50 213, p90 306, p99 408
  • Pelican Wingsp50 214, p90 309, p99 410

p50 (typical)p90p99 (slowest 1%)

chmod file

Successful requests per secondreq/s, higher is better
  • FeatherWings7,628
  • Pterodactyl Wings7,744
  • Pelican Wings7,516
Latencyms, lower is better
  • FeatherWingsp50 1.8, p90 3.3, p99 54
  • Pterodactyl Wingsp50 1.6, p90 3.5, p99 55
  • Pelican Wingsp50 1.6, p90 3.7, p99 56

p50 (typical)p90p99 (slowest 1%)

system info

Successful requests per secondreq/s, higher is better
  • FeatherWings470
  • Pterodactyl Wings465
  • Pelican Wings475
Latencyms, lower is better
  • FeatherWingsp50 70, p90 86, p99 110
  • Pterodactyl Wingsp50 69, p90 90, p99 112
  • Pelican Wingsp50 69, p90 87, p99 109

p50 (typical)p90p99 (slowest 1%)

list directory (50 entries)

Successful requests per secondreq/s, higher is better
  • FeatherWings1,300
  • Pterodactyl Wings1,167
  • Pelican Wings1,302
Latencyms, lower is better
  • FeatherWingsp50 24, p90 39, p99 57
  • Pterodactyl Wingsp50 23, p90 54, p99 99
  • Pelican Wingsp50 21, p90 48, p99 84

p50 (typical)p90p99 (slowest 1%)

download file (4 KiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings12,115
  • Pterodactyl Wings11,258
  • Pelican Wings11,050
Latencyms, lower is better
  • FeatherWingsp50 2.3, p90 5.2, p99 8.1
  • Pterodactyl Wingsp50 2.4, p90 5.8, p99 8.7
  • Pelican Wingsp50 2.5, p90 5.9, p99 8.8

p50 (typical)p90p99 (slowest 1%)

download file (8 MiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings66
  • Pterodactyl Wings67
  • Pelican Wings67
Latencyms, lower is better
  • FeatherWingsp50 117, p90 165, p99 224
  • Pterodactyl Wingsp50 114, p90 166, p99 216
  • Pelican Wingsp50 116, p90 166, p99 227

p50 (typical)p90p99 (slowest 1%)

chmod file

Successful requests per secondreq/s, higher is better
  • FeatherWings14,830
  • Pterodactyl Wings14,901
  • Pelican Wings14,106
Latencyms, lower is better
  • FeatherWingsp50 1.8, p90 3.1, p99 13
  • Pterodactyl Wingsp50 1.7, p90 3.4, p99 14
  • Pelican Wingsp50 1.7, p90 3.7, p99 15

p50 (typical)p90p99 (slowest 1%)

system info

Successful requests per secondreq/s, higher is better
  • FeatherWings449
  • Pterodactyl Wings470
  • Pelican Wings471
Latencyms, lower is better
  • FeatherWingsp50 73, p90 94, p99 116
  • Pterodactyl Wingsp50 70, p90 90, p99 111
  • Pelican Wingsp50 70, p90 89, p99 112

p50 (typical)p90p99 (slowest 1%)

list directory (50 entries)

Successful requests per secondreq/s, higher is better
  • FeatherWings1,669
  • Pterodactyl Wings1,495
  • Pelican Wings1,678
Latencyms, lower is better
  • FeatherWingsp50 18, p90 37, p99 62
  • Pterodactyl Wingsp50 16, p90 46, p99 91
  • Pelican Wingsp50 15, p90 40, p99 80

p50 (typical)p90p99 (slowest 1%)

download file (4 KiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings13,530
  • Pterodactyl Wings12,722
  • Pelican Wings12,700
Latencyms, lower is better
  • FeatherWingsp50 2.0, p90 4.5, p99 8.1
  • Pterodactyl Wingsp50 2.1, p90 4.8, p99 8.6
  • Pelican Wingsp50 2.1, p90 4.9, p99 8.7

p50 (typical)p90p99 (slowest 1%)

download file (8 MiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings84
  • Pterodactyl Wings83
  • Pelican Wings83
Latencyms, lower is better
  • FeatherWingsp50 94, p90 129, p99 161
  • Pterodactyl Wingsp50 95, p90 131, p99 162
  • Pelican Wingsp50 96, p90 128, p99 166

p50 (typical)p90p99 (slowest 1%)

chmod file

Successful requests per secondreq/s, higher is better
  • FeatherWings16,929
  • Pterodactyl Wings16,683
  • Pelican Wings15,888
Latencyms, lower is better
  • FeatherWingsp50 1.6, p90 3.4, p99 6.1
  • Pterodactyl Wingsp50 1.6, p90 3.5, p99 6.4
  • Pelican Wingsp50 1.7, p90 3.8, p99 7.0

p50 (typical)p90p99 (slowest 1%)

CPU scaling

How successful req/s changes as the container gets more CPU. A line that keeps rising uses extra cores; a flat line is limited by something else, such as a single-threaded worker or the database.

system inforeq/s, higher is better
02004006001 CPU2 CPUs4 CPUs
  • FeatherWings
  • Pterodactyl Wings
  • Pelican Wings
list directory (50 entries)req/s, higher is better
05001k1.5k2k1 CPU2 CPUs4 CPUs
  • FeatherWings
  • Pterodactyl Wings
  • Pelican Wings
download file (4 KiB)req/s, higher is better
05k10k15k1 CPU2 CPUs4 CPUs
  • FeatherWings
  • Pterodactyl Wings
  • Pelican Wings
download file (8 MiB)req/s, higher is better
0501001 CPU2 CPUs4 CPUs
  • FeatherWings
  • Pterodactyl Wings
  • Pelican Wings
chmod filereq/s, higher is better
05k10k15k20k1 CPU2 CPUs4 CPUs
  • FeatherWings
  • Pterodactyl Wings
  • Pelican Wings

Resources

Memory and CPU at 4 CPUs, the error rate over every load test, and what it takes to start the stack. Startup runs from docker compose up to the first healthy response, so it includes database migrations the image runs on boot.

Peak memory under loadMiB, lower is better
  • FeatherWings42
  • Pterodactyl Wings21
  • Pelican Wings21
Idle memoryMiB, lower is better
  • FeatherWings38
  • Pterodactyl Wings25
  • Pelican Wings25
CPU time per requestms, lower is better
  • FeatherWings6.19
  • Pterodactyl Wings6.25
  • Pelican Wings6.19
Error rate over all load tests% of responses, lower is better

Not recorded in this run.

Startup timeseconds, lower is better
  • FeatherWings883 ms
  • Pterodactyl Wings876 ms
  • Pelican Wings884 ms
Image sizeuncompressed, lower is better
  • FeatherWings56 MiB
  • Pterodactyl Wings29 MiB
  • Pelican Wings41 MiB

File tasks

Median time per task, lower is better. The fastest daemon in each row is shown in white.

TaskFeatherWingsPterodactyl WingsPelican Wings
list directory (5000 entries)123 ms129 ms115 ms
list directory (50000 entries)1.36 s1.30 s1.18 s
compress 100 MiB tree (tar.gz)276 ms307 ms270 ms
compress 1 GiB tree (tar.gz)2.91 s2.07 s2.82 s
compress 50k small files tree (tar.gz)2.62 s1.11 s2.65 s
compress 100 MiB tree (zip)119 ms--
decompress 100 MiB archive (tar.gz)588 ms623 ms380 ms
decompress 1 GiB archive (tar.gz)6.65 s6.90 s4.06 s
decompress 50k small files archive (tar.gz)10.9 s11.4 s6.16 s
decompress 100 MiB archive (zip)577 ms595 ms376 ms
decompress 1 GiB archive (zip)6.82 s6.90 s3.91 s
delete 100 MiB tree257 ms193 ms232 ms
delete 1 GiB tree2.70 s2.04 s2.43 s
delete 50k small files tree6.05 s4.55 s5.52 s
upload file (256 MiB)539 ms566 ms480 ms
TaskFeatherWingsPterodactyl WingsPelican Wings
list directory (5000 entries)118 ms120 ms107 ms
list directory (50000 entries)1.21 s1.16 s1.02 s
compress 100 MiB tree (tar.gz)271 ms216 ms268 ms
compress 1 GiB tree (tar.gz)2.77 s1.09 s2.68 s
compress 50k small files tree (tar.gz)2.40 s960 ms2.40 s
compress 100 MiB tree (zip)119 ms--
decompress 100 MiB archive (tar.gz)563 ms571 ms363 ms
decompress 1 GiB archive (tar.gz)6.39 s6.37 s3.73 s
decompress 50k small files archive (tar.gz)10.4 s10.5 s5.70 s
decompress 100 MiB archive (zip)549 ms556 ms346 ms
decompress 1 GiB archive (zip)6.60 s6.56 s3.63 s
delete 100 MiB tree263 ms187 ms231 ms
delete 1 GiB tree2.68 s2.08 s2.50 s
delete 50k small files tree5.97 s4.56 s5.64 s
upload file (256 MiB)485 ms488 ms429 ms
TaskFeatherWingsPterodactyl WingsPelican Wings
list directory (5000 entries)119 ms120 ms105 ms
list directory (50000 entries)1.21 s1.16 s1.04 s
compress 100 MiB tree (tar.gz)271 ms214 ms263 ms
compress 1 GiB tree (tar.gz)2.75 s1.06 s2.66 s
compress 50k small files tree (tar.gz)2.41 s958 ms2.38 s
compress 100 MiB tree (zip)118 ms--
decompress 100 MiB archive (tar.gz)563 ms572 ms364 ms
decompress 1 GiB archive (tar.gz)6.36 s6.50 s3.77 s
decompress 50k small files archive (tar.gz)10.4 s10.4 s5.75 s
decompress 100 MiB archive (zip)554 ms560 ms350 ms
decompress 1 GiB archive (zip)6.46 s6.53 s3.62 s
delete 100 MiB tree256 ms195 ms240 ms
delete 1 GiB tree2.69 s2.04 s2.45 s
delete 50k small files tree6.02 s4.62 s5.51 s
upload file (256 MiB)475 ms492 ms425 ms

History

Week by week

Successful req/s on the logged-in endpoints (geometric mean), one point per published run. Runner hardware can change between weeks, so read the shape, not small steps.

Panels, logged-in endpointsreq/s, higher is better
01k2k3k4k10-2310-26
  • FeatherPanel
  • Pterodactyl
  • Pelican
  • Hydrodactyl

Tested

Versions and images

The version each target reported while it ran, the image it came from, its size and its start time.

TargetVersionImageSizeStartupStatus
FeatherPanel1.5.2ghcr.io/mythicalltd/featherpanel-backend:latestsha256:9bbdfd7fac091002 MiB15.4 s 3 rounds
Pterodactyl1.15.2ghcr.io/pterodactyl/panel:latestsha256:cd7cda1727f1332 MiB7.63 s 3 rounds
Pelican1.0.0-rc.2ghcr.io/pelican/panel:latestsha256:9a4364ce709c510 MiB11.5 s 3 rounds
Hydrodactylv6.4.1-hotfixghcr.io/blueprintframework/hydrodactyl:latestsha256:6a0f10587258555 MiB8.63 s 3 rounds
FeatherWings1.4.3ghcr.io/mythicalltd/featherwings:latestsha256:6173d2cf96e456 MiB883 ms 3 rounds
Pterodactyl Wings1.13.4ghcr.io/pterodactyl/wings:latestsha256:f3eb1fcca03529 MiB876 ms 3 rounds
Pelican Wings1.0.0-rc.1ghcr.io/pelican/wings:latestsha256:cf62cae9932941 MiB884 ms 3 rounds

A dash means the value was not recorded in this run.

Methodology

How the numbers
are produced.

Run
MythicalLTD/benchmarking/actions/runs/40296650963
Date
26 Oct 2026, 12:23 UTC
Schedule
Mondays, 03:17 UTC
Panels
AMD EPYC 9V45 96-Core Processor, 4 vCPU, 16 GB RAM, 3 rounds
Wings
AMD EPYC 7763 64-Core Processor, 4 vCPU, 16 GB RAM, 3 rounds
Figures
Median across rounds
Targets
7 of 7 completed
  1. 01

    Every target starts from its published :latest image in its own Docker Compose stack. The version in the table is the one the running software reported.

  2. 02

    API rate limiting is switched off for every panel through configuration only: the APP_API_*_RATELIMIT settings for Pterodactyl, Pelican and Hydrodactyl, and FeatherPanel's rate-limit file. No panel's code is changed.

  3. 03

    Each stack runs at 1, 2 and 4 CPUs with Docker's cpus limit on the panel or daemon container. Startup time is measured from docker compose up to the first healthy response.

  4. 04

    For panels, the suite creates an admin user, logs in, and points oha at a public endpoint, the account endpoint and the server list for 10 seconds each after a 1 second warmup. The public endpoint is each panel's own cheapest route, so it is left out of the headline figures.

  5. 05

    For daemons, Wings talks to an in-process mock of the panel API. Load tests cover system info, a 50-entry listing, file downloads and chmod. Tasks cover large listings, compress, decompress, delete and a 256 MiB upload on a generated dataset.

  6. 06

    Container CPU and memory (anonymous plus shared memory, page cache excluded) are sampled during each test and at idle. CPU time per request subtracts the idle floor.

  7. 07

    A GitHub Actions workflow runs Mondays, 03:17 UTC as two jobs: all panels in series on one runner and all Wings daemons in series on another. Each group runs three rounds in alternating order (forwards, backwards, forwards), and the page shows the median.