Panel benchmarks
Performance results for the Calagopus panel, measured against five other panels on identical hardware. Each chart compares every panel across every test configuration.
For the node agent that runs game servers, see daemon benchmarks.
Headline figures come from settings (unauth), the one scenario every panel answers with real 200s. The authenticated scenarios are dominated by each panel's own rate limiting, so they are not comparable as throughput. How this was measured
Throughput
↑ Higher is better - more requests served per second.
View this chart's data as a table
| System | Calagopus (req/s) | FeatherPanel (req/s) | Hydrodactyl (req/s) | Pelican (req/s) | Pterodactyl (req/s) | PufferPanel (req/s) |
|---|---|---|---|---|---|---|
| 9900X | 228422.3 | 1449.9 | 809.8 | 541.0 | 1168.2 | 201497.3 |
| EPYC 7443P | 82971.8 | 706.4 | 315.2 | 210.5 | 432.6 | 73285.3 |
| 2× E5-2680v2 | 47226.6 | 139.8 | 112.4 | 69.5 | 148.0 | 12903.4 |
| i5-12500 | 130520.9 | 1076.2 | 498.0 | 329.5 | 721.3 | 147382.5 |
| Altra Q80-30 | 68419.4 | 667.4 | 315.2 | 235.6 | 459.2 | 47021.2 |
Latency
↓ Lower is better - faster average response.
View this chart's data as a table
| System | Calagopus (ms) | FeatherPanel (ms) | Hydrodactyl (ms) | Pelican (ms) | Pterodactyl (ms) | PufferPanel (ms) |
|---|---|---|---|---|---|---|
| 9900X | 1.7 | 259.6 | 461.8 | 681.5 | 322.4 | 1.9 |
| EPYC 7443P | 4.6 | 523.4 | 1148.1 | 1672.6 | 850.0 | 5.2 |
| 2× E5-2680v2 | 8.1 | 2436.2 | 2994.2 | 4534.6 | 2316.1 | 29.6 |
| i5-12500 | 2.9 | 347.6 | 741.0 | 1102.8 | 518.5 | 2.6 |
| Altra Q80-30 | 5.6 | 553.8 | 1149.3 | 1512.2 | 800.2 | 8.1 |
CPU cost per request
↓ Lower is better - less CPU burned per response, with the idle floor removed.
View this chart's data as a table
| System | Calagopus (cpu-ms) | FeatherPanel (cpu-ms) | Hydrodactyl (cpu-ms) | Pelican (cpu-ms) | Pterodactyl (cpu-ms) | PufferPanel (cpu-ms) |
|---|---|---|---|---|---|---|
| 9900X | 0.0340 | 5.5 | 9.8 | 14.6 | 6.8 | 0.0250 |
| EPYC 7443P | 0.0930 | 11.3 | 24.6 | 37.9 | 18.4 | 0.0760 |
| 2× E5-2680v2 | 0.161 | 57.1 | 70.9 | 109.4 | 53.9 | 0.370 |
| i5-12500 | 0.0540 | 7.4 | 16.0 | 24.1 | 11.0 | 0.0320 |
| Altra Q80-30 | 0.107 | 12.0 | 23.5 | 33.9 | 16.6 | 0.0990 |
Reading the CPU charts
On settings (unauth), Calagopus spends 0.02 to 0.16 ms per request and the PHP panels spend 2 to 138 ms, two to three orders of magnitude more. PufferPanel, the other compiled panel, is in the same class as Calagopus and slightly cheaper on all but four configurations.
This matters most when the panel shares a box with game servers. A game server runs under a hard CPU quota and a tick deadline, so time taken from it is lost rather than delayed. A PHP panel under load takes enough to notice. The daemon always runs next to the game servers, so the same argument applies to it more strongly.
Memory
↓ Lower is better - footprint with no traffic, sampled before the run.
View this chart's data as a table
| System | Calagopus (MiB) | FeatherPanel (MiB) | Hydrodactyl (MiB) | Pelican (MiB) | Pterodactyl (MiB) | PufferPanel (MiB) |
|---|---|---|---|---|---|---|
| 9900X | 54.7 | 58.9 | 100.0 | 173.9 | 98.4 | 16.4 |
| EPYC 7443P | 61.8 | 51.3 | 81.1 | 125.6 | 74.2 | 16.4 |
| 2× E5-2680v2 | 61.7 | 61.0 | 100.1 | 207.3 | 98.3 | 16.3 |
| i5-12500 | 61.8 | 60.7 | 97.8 | 174.8 | 96.1 | 16.5 |
| Altra Q80-30 | 59.0 | 61.4 | 100.1 | 174.7 | 98.0 | 16.4 |
↓ Lower is better - worst-case footprint on settings (unauth).
View this chart's data as a table
| System | Calagopus (MiB) | FeatherPanel (MiB) | Hydrodactyl (MiB) | Pelican (MiB) | Pterodactyl (MiB) | PufferPanel (MiB) |
|---|---|---|---|---|---|---|
| 9900X | 68.9 | 177.7 | 139.6 | 383.6 | 123.4 | 51.5 |
| EPYC 7443P | 69.3 | 152.4 | 112.2 | 281.6 | 101.8 | 48.7 |
| 2× E5-2680v2 | 68.0 | 176.1 | 140.1 | 316.4 | 124.7 | 52.5 |
| i5-12500 | 69.4 | 158.6 | 186.3 | 329.1 | 121.1 | 53.8 |
| Altra Q80-30 | 63.5 | 170.9 | 138.3 | 451.7 | 123.7 | 54.2 |
Reading the memory charts
The gap between the idle and peak charts is what a panel costs above its resting footprint. Calagopus stays within about 15 MiB of idle, and PufferPanel starts smaller and ends up in the same range. The PHP panels grow: on the Ryzen at eight CPUs, Pelican rests at 174 MiB and reaches 384 MiB under load.
Test setup
Methodology
Every panel runs from its official :latest Docker image (as of 2026-10-04) with no configuration beyond initial setup, driven by our open-source benchmarking suite. Each one is swept across CPU limits of 1, 2, 4 and 8 CPUs while its container's CPU and memory are sampled. Each scenario holds 384 concurrent connections for 10 seconds after a 1-second warmup (the suite defaults to 32; this run passed -c 384) against three endpoints: public settings, account details and the server list. Panels keep their default rate limiting, so the two authenticated endpoints mostly return 429s and their throughput measures how fast a panel refuses. This is a saturation test of each panel's fixed cost per request, so the ratios between panels compare overhead, not how many users a panel can serve.
Only the panel's own container is limited and measured. Databases and caches run unlimited and unmeasured, so work a panel pushes into them is free here.
Memory is anon + shmem, excluding page cache and slab. cpu-ms is CPU time per request with the idle floor subtracted. Unlike CPU percent, it keeps meaning something once a panel hits its quota, and lower is better.
Panels tested
1.2.41.3.7.106.4.11.0.0-beta381.15.13.0.9Test environments
Ryzen 9 9900XAMD Ryzen 9 9900X · DDR5-6000
EPYC 7443PAMD EPYC 7443P · DDR4-2666
2× Xeon E5-2680 v22× Intel Xeon E5-2680 v2 · DDR3-1600
Core i5-12500Intel Core i5-12500 · DDR4-3200
Ampere Altra Q80-30Ampere Altra Q80-30 · DDR4-2133
Expand a system for each panel's peaks, the highest values observed across all CPU configs and scenarios on that system.
Data
Where the numbers come from
Every figure here comes from the suite's JSON reports (pnpm run bench <target> --json), checked into the site repository as one typed file per panel and system, with each scenario's load profile, sampled CPU and memory, and the suite's notes. The import script rounds to three decimals and drops per-run timings and failure strings. The reports record each panel's self-reported version, but not the suite commit or image digests.
Detailed comparisons
Raw numbers are only part of the picture. For feature-by-feature breakdowns against specific panels, see Calagopus vs Pterodactyl, Calagopus vs Pelican, and Calagopus vs AMP. For file-manager and archive performance, see daemon benchmarks.