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

23 Oct 2026, 01:10 UTC. Panels at 4 CPUs, median of 3 rounds.

Against Pterodactyl
502x
FeatherPanel served, more successful req/s (1 endpoint, 4 CPUs)
Against Pelican
124x
FeatherPanel served, more successful req/s (1 endpoint, 4 CPUs)
Against Hydrodactyl
44x
FeatherPanel served, more successful req/s (1 endpoint, 4 CPUs)
Best p99 latency
32 ms
FeatherPanel, slowest endpoint at 4 CPUs
FeatherPanel error rate
0%
Non-2xx over every load test. Highest elsewhere: Pterodactyl 65%
FeatherPanel peak memory
193 MiB
Under load at 4 CPUs, idle 127 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 9V74 80-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
  • FeatherPanel913
  • Pterodactyl51
  • Pelican26
  • Hydrodactyl44
Latencyms, lower is better
  • FeatherPanelp50 35, p90 44, p99 57
  • Pterodactylp50 610, p90 702, p99 792
  • Pelicanp50 1,203, p90 1,421, p99 1,692
  • Hydrodactylp50 710, p90 805, p99 900

p50 (typical)p90p99 (slowest 1%)

account (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel876
  • Pterodactyl16
  • Pelican19
  • Hydrodactyl51
Latencyms, lower is better
  • FeatherPanelp50 36, p90 46, p99 70
  • Pterodactylp50 594, p90 684, p99 783
  • Pelicanp50 1,519, p90 1,900, p99 2,095
  • Hydrodactylp50 608, p90 700, p99 792

p50 (typical)p90p99 (slowest 1%)

Non-2xx responses in this test: Pterodactyl 70%, Pelican 3.9%. They are left out of req/s and latency.

list servers (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel778
  • Pterodactylall requests failed-
  • Pelicanall requests failed-
  • Hydrodactyl3
Latencyms, lower is better
  • FeatherPanelp50 41, p90 53, p99 76
  • Pterodactylall requests failed
  • Pelicanall requests failed
  • Hydrodactylp50 597, p90 680, p99 698

p50 (typical)p90p99 (slowest 1%)

Non-2xx responses in this test: Pterodactyl 100%, Pelican 100%, Hydrodactyl 95%. They are left out of req/s and latency.

settings (unauth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel1,503
  • Pterodactyl104
  • Pelican53
  • Hydrodactyl90
Latencyms, lower is better
  • FeatherPanelp50 21, p90 29, p99 38
  • Pterodactylp50 304, p90 362, p99 386
  • Pelicanp50 601, p90 702, p99 778
  • Hydrodactylp50 365, p90 395, p99 419

p50 (typical)p90p99 (slowest 1%)

account (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel1,430
  • Pterodactyl11
  • Pelican21
  • Hydrodactyl57
Latencyms, lower is better
  • FeatherPanelp50 22, p90 31, p99 39
  • Pterodactylp50 300, p90 344, p99 382
  • Pelicanp50 709, p90 826, p99 969
  • Hydrodactylp50 299, p90 344, p99 387

p50 (typical)p90p99 (slowest 1%)

Non-2xx responses in this test: Pterodactyl 89%, Pelican 54%, Hydrodactyl 47%. They are left out of req/s and latency.

list servers (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel1,346
  • Pterodactylall requests failed-
  • Pelicanall requests failed-
  • Hydrodactylall requests failed-
Latencyms, lower is better
  • FeatherPanelp50 23, p90 34, p99 44
  • Pterodactylall requests failed
  • Pelicanall requests failed
  • Hydrodactylall requests failed

p50 (typical)p90p99 (slowest 1%)

Non-2xx responses in this test: Pterodactyl 100%, Pelican 100%, Hydrodactyl 100%. They are left out of req/s and latency.

settings (unauth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel2,053
  • Pterodactyl187
  • Pelican102
  • Hydrodactyl162
Latencyms, lower is better
  • FeatherPanelp50 15, p90 23, p99 30
  • Pterodactylp50 169, p90 194, p99 218
  • Pelicanp50 313, p90 350, p99 417
  • Hydrodactylp50 196, p90 217, p99 244

p50 (typical)p90p99 (slowest 1%)

account (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel2,177
  • Pterodactyl4
  • Pelican18
  • Hydrodactyl49
Latencyms, lower is better
  • FeatherPanelp50 14, p90 22, p99 30
  • Pterodactylp50 168, p90 188, p99 207
  • Pelicanp50 364, p90 411, p99 449
  • Hydrodactylp50 167, p90 184, p99 204

p50 (typical)p90p99 (slowest 1%)

Non-2xx responses in this test: Pterodactyl 98%, Pelican 80%, Hydrodactyl 74%. They are left out of req/s and latency.

list servers (auth)

Successful requests per secondreq/s, higher is better
  • FeatherPanel1,993
  • Pterodactylall requests failed-
  • Pelicanall requests failed-
  • Hydrodactylall requests failed-
Latencyms, lower is better
  • FeatherPanelp50 15, p90 23, p99 32
  • Pterodactylall requests failed
  • Pelicanall requests failed
  • Hydrodactylall requests failed

p50 (typical)p90p99 (slowest 1%)

Non-2xx responses in this test: Pterodactyl 100%, Pelican 100%, Hydrodactyl 100%. They are left out of req/s and latency.

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
01k2k3k1 CPU2 CPUs4 CPUs
  • FeatherPanel
  • Pterodactyl
  • Pelican
  • Hydrodactyl
account (auth)req/s, higher is better
01k2k3k1 CPU2 CPUs4 CPUs
  • FeatherPanel
  • Pterodactyl
  • Pelican
  • Hydrodactyl
list servers (auth)req/s, higher is better
05001k1.5k2k1 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
  • FeatherPanel193
  • Pterodactyl118
  • Pelican368
  • Hydrodactyl134
Idle memoryMiB, lower is better
  • FeatherPanel127
  • Pterodactyl94
  • Pelican191
  • Hydrodactyl107
CPU time per requestms, lower is better
  • FeatherPanel1.14
  • Pterodactyl18.12
  • Pelican42.05
  • Hydrodactyl19.06
Error rate over all load tests% of responses, lower is better
  • FeatherPanel0%
  • Pterodactyl65%
  • Pelican51%
  • Hydrodactyl54%
Startup timeseconds, lower is better

Not recorded in this run.

Image sizeuncompressed, lower is better

Not recorded in this run.

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, one round

Against Pterodactyl Wings
1.1x
FeatherWings served, more successful req/s (5 endpoints, 4 CPUs)
Against Pelican Wings
1.1x
FeatherWings served, more successful req/s (5 endpoints, 4 CPUs)
File tasks against Pterodactyl Wings
1.0x
Faster, geometric mean of 14 timed tasks
File tasks against Pelican Wings
1.0x
Faster, geometric mean of 14 timed tasks
Best p99 latency
159 ms
Pterodactyl Wings, slowest endpoint at 4 CPUs. FeatherWings: 175 ms
FeatherWings error rate
0%
Non-2xx over every load test. Highest elsewhere: Pterodactyl Wings 0%
FeatherWings peak memory
43 MiB
Under load at 4 CPUs, idle 39 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
  • FeatherWings464
  • Pterodactyl Wings428
  • Pelican Wings450
Latencyms, lower is better
  • FeatherWingsp50 71, p90 88, p99 112
  • Pterodactyl Wingsp50 78, p90 95, p99 121
  • Pelican Wingsp50 73, p90 92, p99 114

p50 (typical)p90p99 (slowest 1%)

list directory (50 entries)

Successful requests per secondreq/s, higher is better
  • FeatherWings720
  • Pterodactyl Wings546
  • Pelican Wings625
Latencyms, lower is better
  • FeatherWingsp50 30, p90 85, p99 107
  • Pterodactyl Wingsp50 56, p90 112, p99 217
  • Pelican Wingsp50 32, p90 101, p99 191

p50 (typical)p90p99 (slowest 1%)

download file (4 KiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings6,874
  • Pterodactyl Wings5,695
  • Pelican Wings5,683
Latencyms, lower is better
  • FeatherWingsp50 2.1, p90 5.4, p99 54
  • Pterodactyl Wingsp50 2.6, p90 7.0, p99 55
  • Pelican Wingsp50 2.6, p90 7.1, p99 55

p50 (typical)p90p99 (slowest 1%)

download file (8 MiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings35
  • Pterodactyl Wings34
  • Pelican Wings35
Latencyms, lower is better
  • FeatherWingsp50 214, p90 304, p99 422
  • Pterodactyl Wingsp50 219, p90 313, p99 451
  • Pelican Wingsp50 212, p90 308, p99 401

p50 (typical)p90p99 (slowest 1%)

chmod file

Successful requests per secondreq/s, higher is better
  • FeatherWings8,386
  • Pterodactyl Wings7,665
  • Pelican Wings7,304
Latencyms, lower is better
  • FeatherWingsp50 1.7, p90 2.9, p99 54
  • Pterodactyl Wingsp50 1.6, p90 3.8, p99 55
  • Pelican Wingsp50 1.6, p90 4.0, p99 59

p50 (typical)p90p99 (slowest 1%)

system info

Successful requests per secondreq/s, higher is better
  • FeatherWings471
  • Pterodactyl Wings466
  • Pelican Wings473
Latencyms, lower is better
  • FeatherWingsp50 69, p90 86, p99 110
  • Pterodactyl Wingsp50 70, p90 90, p99 112
  • Pelican Wingsp50 69, p90 87, p99 110

p50 (typical)p90p99 (slowest 1%)

list directory (50 entries)

Successful requests per secondreq/s, higher is better
  • FeatherWings1,486
  • Pterodactyl Wings1,152
  • Pelican Wings1,312
Latencyms, lower is better
  • FeatherWingsp50 21, p90 34, p99 49
  • Pterodactyl Wingsp50 23, p90 55, p99 98
  • Pelican Wingsp50 21, p90 47, p99 83

p50 (typical)p90p99 (slowest 1%)

download file (4 KiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings12,739
  • Pterodactyl Wings10,976
  • Pelican Wings11,368
Latencyms, lower is better
  • FeatherWingsp50 2.2, p90 4.9, p99 7.7
  • Pterodactyl Wingsp50 2.5, p90 5.9, p99 8.8
  • Pelican Wingsp50 2.4, p90 5.8, p99 8.6

p50 (typical)p90p99 (slowest 1%)

download file (8 MiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings65
  • Pterodactyl Wings64
  • Pelican Wings65
Latencyms, lower is better
  • FeatherWingsp50 122, p90 166, p99 214
  • Pterodactyl Wingsp50 120, p90 177, p99 240
  • Pelican Wingsp50 119, p90 167, p99 209

p50 (typical)p90p99 (slowest 1%)

chmod file

Successful requests per secondreq/s, higher is better
  • FeatherWings15,952
  • Pterodactyl Wings14,621
  • Pelican Wings14,324
Latencyms, lower is better
  • FeatherWingsp50 1.7, p90 2.9, p99 12
  • Pterodactyl Wingsp50 1.7, p90 3.4, p99 15
  • Pelican Wingsp50 1.7, p90 3.6, p99 14

p50 (typical)p90p99 (slowest 1%)

system info

Successful requests per secondreq/s, higher is better
  • FeatherWings471
  • Pterodactyl Wings456
  • Pelican Wings450
Latencyms, lower is better
  • FeatherWingsp50 70, p90 88, p99 112
  • Pterodactyl Wingsp50 72, p90 92, p99 112
  • Pelican Wingsp50 74, p90 92, p99 115

p50 (typical)p90p99 (slowest 1%)

list directory (50 entries)

Successful requests per secondreq/s, higher is better
  • FeatherWings1,878
  • Pterodactyl Wings1,510
  • Pelican Wings1,649
Latencyms, lower is better
  • FeatherWingsp50 15, p90 33, p99 56
  • Pterodactyl Wingsp50 16, p90 44, p99 82
  • Pelican Wingsp50 15, p90 41, p99 84

p50 (typical)p90p99 (slowest 1%)

download file (4 KiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings14,408
  • Pterodactyl Wings12,702
  • Pelican Wings12,482
Latencyms, lower is better
  • FeatherWingsp50 1.9, p90 4.1, p99 7.6
  • Pterodactyl Wingsp50 2.1, p90 4.8, p99 8.5
  • Pelican Wingsp50 2.1, p90 5.0, p99 8.8

p50 (typical)p90p99 (slowest 1%)

download file (8 MiB)

Successful requests per secondreq/s, higher is better
  • FeatherWings80
  • Pterodactyl Wings82
  • Pelican Wings80
Latencyms, lower is better
  • FeatherWingsp50 98, p90 133, p99 175
  • Pterodactyl Wingsp50 96, p90 132, p99 159
  • Pelican Wingsp50 99, p90 135, p99 171

p50 (typical)p90p99 (slowest 1%)

chmod file

Successful requests per secondreq/s, higher is better
  • FeatherWings17,474
  • Pterodactyl Wings16,384
  • Pelican Wings15,515
Latencyms, lower is better
  • FeatherWingsp50 1.6, p90 3.3, p99 5.9
  • Pterodactyl Wingsp50 1.7, p90 3.6, p99 6.6
  • Pelican Wingsp50 1.7, p90 3.9, p99 7.2

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
  • FeatherWings43
  • Pterodactyl Wings25
  • Pelican Wings21
Idle memoryMiB, lower is better
  • FeatherWings39
  • Pterodactyl Wings23
  • Pelican Wings23
CPU time per requestms, lower is better
  • FeatherWings6.26
  • Pterodactyl Wings6.32
  • Pelican Wings6.33
Error rate over all load tests% of responses, lower is better

Not recorded in this run.

Startup timeseconds, lower is better

Not recorded in this run.

Image sizeuncompressed, lower is better

Not recorded in this run.

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)102 ms138 ms115 ms
list directory (50000 entries)1.15 s1.34 s1.19 s
compress 100 MiB tree (tar.gz)263 ms331 ms282 ms
compress 1 GiB tree (tar.gz)2.76 s2.11 s2.82 s
compress 50k small files tree (tar.gz)2.56 s1.14 s2.67 s
compress 100 MiB tree (zip)117 ms--
decompress 100 MiB archive (tar.gz)375 ms619 ms414 ms
decompress 1 GiB archive (tar.gz)3.96 s6.84 s4.43 s
decompress 50k small files archive (tar.gz)6.12 s11.3 s6.46 s
decompress 100 MiB archive (zip)363 ms603 ms392 ms
decompress 1 GiB archive (zip)3.89 s6.90 s4.00 s
delete 100 MiB tree230 ms189 ms229 ms
delete 1 GiB tree2.45 s1.97 s2.44 s
delete 50k small files tree5.53 s4.58 s5.39 s
upload file (256 MiB)482 ms539 ms478 ms
TaskFeatherWingsPterodactyl WingsPelican Wings
list directory (5000 entries)102 ms121 ms107 ms
list directory (50000 entries)1.04 s1.17 s1.03 s
compress 100 MiB tree (tar.gz)259 ms213 ms265 ms
compress 1 GiB tree (tar.gz)2.65 s1.10 s2.65 s
compress 50k small files tree (tar.gz)2.41 s967 ms2.40 s
compress 100 MiB tree (zip)117 ms--
decompress 100 MiB archive (tar.gz)363 ms596 ms375 ms
decompress 1 GiB archive (tar.gz)3.80 s6.64 s3.91 s
decompress 50k small files archive (tar.gz)5.86 s10.8 s5.91 s
decompress 100 MiB archive (zip)354 ms577 ms358 ms
decompress 1 GiB archive (zip)3.70 s6.80 s3.70 s
delete 100 MiB tree241 ms218 ms226 ms
delete 1 GiB tree2.41 s2.23 s2.41 s
delete 50k small files tree5.56 s4.99 s5.39 s
upload file (256 MiB)442 ms479 ms450 ms
TaskFeatherWingsPterodactyl WingsPelican Wings
list directory (5000 entries)102 ms119 ms109 ms
list directory (50000 entries)1.04 s1.15 s1.04 s
compress 100 MiB tree (tar.gz)262 ms214 ms267 ms
compress 1 GiB tree (tar.gz)2.65 s1.04 s2.66 s
compress 50k small files tree (tar.gz)2.39 s967 ms2.40 s
compress 100 MiB tree (zip)116 ms--
decompress 100 MiB archive (tar.gz)365 ms582 ms373 ms
decompress 1 GiB archive (tar.gz)3.79 s6.52 s3.88 s
decompress 50k small files archive (tar.gz)5.84 s10.5 s5.91 s
decompress 100 MiB archive (zip)356 ms554 ms360 ms
decompress 1 GiB archive (zip)3.67 s6.58 s3.70 s
delete 100 MiB tree231 ms185 ms223 ms
delete 1 GiB tree2.47 s1.98 s2.37 s
delete 50k small files tree5.48 s4.46 s5.38 s
upload file (256 MiB)442 ms476 ms443 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.

Only one run has been published so far. The chart appears once a second weekly run lands, and every past run stays on the results branch.

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:9bbdfd7fac09-- 3 rounds
Pterodactyl1.15.2ghcr.io/pterodactyl/panel:latestsha256:cd7cda1727f1-- 3 rounds
Pelican1.0.0-rc.2ghcr.io/pelican/panel:latestsha256:cb717c15da9b-- 3 rounds
Hydrodactylv6.4.1-hotfixghcr.io/blueprintframework/hydrodactyl:latestsha256:6a0f10587258-- 3 rounds
FeatherWings1.4.1ghcr.io/mythicalltd/featherwings:latestsha256:6f30d5c70784-- Completed
Pterodactyl Wings1.13.4ghcr.io/pterodactyl/wings:latestsha256:f3eb1fcca035-- Completed
Pelican Wings1.0.0-rc.1ghcr.io/pelican/wings:latestsha256:cf62cae99329-- Completed

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

Methodology

How the numbers
are produced.

Run
MythicalLTD/benchmarking/actions/runs/39871697830
Date
23 Oct 2026, 01:10 UTC
Schedule
Mondays, 03:17 UTC
Panels
AMD EPYC 9V74 80-Core Processor, 4 vCPU, 16 GB RAM, 3 rounds
Wings
AMD EPYC 7763 64-Core Processor, 4 vCPU, 16 GB RAM, 1 round
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.