PostgreSQL REST API Benchmark: 15 Frameworks Compared
How fast can different frameworks serve data from PostgreSQL? We put 15 popular REST API frameworks to the test, measuring their ability to execute a PostgreSQL function and return JSON results under various load conditions.
What We Tested
All frameworks executed the same PostgreSQL function that returns a configurable number of JSON records. This isolates the framework overhead from database performance - every framework runs the identical query against the same PostgreSQL instance.
Test Setup:
- PostgreSQL Function: Returns 1, 10, 100, or 500 JSON records (view source)
- Load Tool: k6 load testing framework
- Duration: 60 seconds per test
- Concurrency: 1, 50, and 100 virtual users (VUs)
- Environment: All services running in Docker containers on the same host
- Hardware: Hetzner Cloud CCX33 (General Purpose, x86 AMD) - 8 dedicated vCPUs, 32 GB RAM, 240 GB SSD, 30 TB traffic
Frameworks Tested:
| Framework | Language | Version |
|---|---|---|
| NpgsqlRest (JIT) | .NET | 3.2.2 |
| NpgsqlRest (AOT) | .NET | 3.2.2, 2.36.2 |
| PostgREST | Haskell | 12.2.8 |
| Go (net/http + pgx) | Go | 1.24 |
| Rust (Actix + tokio-postgres) | Rust | 1.83.0 |
| Spring Boot | Java 24 | 4.0.1 |
| .NET Minimal API + Dapper | .NET 10 | - |
| .NET Minimal API + EF Core | .NET 9/10 | - |
| Fastify | Node.js | 5.6.2 |
| Bun | Bun | 1.1.42 |
| Swoole | PHP | 8.4.0 |
| FastAPI | Python | 0.127.1 |
| Django | Python | 6.0 |
Key Findings
NpgsqlRest JIT Dominates High-Concurrency Scenarios
At 100 concurrent users with minimal payload (1 record), NpgsqlRest JIT achieves 5,177 requests per second - nearly 35% faster than the second-place Swoole PHP and over 50% faster than Rust. This demonstrates the efficiency of NpgsqlRest's direct PostgreSQL-to-HTTP pipeline.
The Top Performers
| Tier | Frameworks | Peak Performance |
|---|---|---|
| Elite | NpgsqlRest JIT | 5,177 req/s |
| Top | Swoole PHP, Rust, Fastify | 3,000-3,800 req/s |
| High | Go, Spring Boot, Bun, NpgsqlRest AOT, .NET Dapper | 2,500-2,700 req/s |
| Mid | .NET EF Core, Django | 1,600-2,200 req/s |
| Lower | FastAPI, PostgREST | 800-1,300 req/s |
Performance Scales Differently
Not all frameworks scale equally when concurrency increases:
- NpgsqlRest JIT improves from 601 req/s (1 VU) to 5,177 req/s (100 VU) - an 8.6x improvement
- Swoole PHP scales from 379 req/s to 3,855 req/s - a 10x improvement
- PostgREST actually degrades under load: 385 req/s (1 VU) drops to 843 req/s (100 VU) - only 2.2x improvement
Larger Payloads Level the Playing Field
With 500 records returned per request, the performance gap narrows significantly as database I/O and JSON serialization dominate:
| Framework | 500 Records @ 100 VU | Latency |
|---|---|---|
| NpgsqlRest JIT | 100.90 req/s | 495ms |
| Django | 64.22 req/s | 779ms |
| Swoole PHP | 62.99 req/s | 793ms |
| Rust | 54.94 req/s | 911ms |
| FastAPI | 17.99 req/s | 2,796ms |
Even here, NpgsqlRest maintains a significant lead, processing 60% more requests than the second-place finisher.
Python Frameworks Struggle Under Load
Both FastAPI and Django show concerning behavior under concurrent load:
- FastAPI at 100 VU with 500 records: 2.8 second average latency
- Django performs better with larger payloads but still lags in low-latency scenarios
JIT vs AOT: When to Use Each
NpgsqlRest offers both JIT (Just-In-Time compiled) and AOT (Ahead-Of-Time compiled) versions:
- JIT version consistently outperforms AOT by 50-100% in high-concurrency scenarios
- AOT version has faster cold-start times, smaller memory footprint, and significantly smaller Docker image size (172 MB vs 426 MB for JIT)
- For sustained high-throughput workloads, JIT is the clear winner
- For containerized deployments where image size matters (serverless, edge), AOT may be preferred
Why NpgsqlRest Performs So Well
NpgsqlRest's architecture eliminates multiple layers that other frameworks require:
- No ORM overhead - Direct PostgreSQL protocol communication via Npgsql
- No routing framework - Endpoints derived directly from database metadata
- No serialization layer - PostgreSQL's native JSON functions handle serialization
- Minimal memory allocation - Optimized hot paths using ValueTask and buffer pooling
- Connection pooling - Efficient connection reuse via Npgsql's built-in pooling
Traditional frameworks must: parse routes, validate input, map to models, execute queries, map results, serialize to JSON, and format responses. NpgsqlRest collapses this into: receive request, execute function, stream response.
Important Note: JSON and Array Type Handling
When interpreting these benchmark results, it's important to understand that not all frameworks return identical JSON responses. The differences lie in how each framework handles PostgreSQL's JSON, JSONB, and array types.
Here's a summary of actual test results from each framework:
| Framework | json | jsonb | int[] | text[] |
|---|---|---|---|---|
| NpgsqlRest (JIT/AOT) | ✅ | ✅ | ✅ | ✅ |
| .NET EF Core / Dapper | ✅ | ✅ | ✅ | ✅ |
| Rust | ✅ | ✅ | ✅ | ✅ |
| Fastify | ✅ | ✅ | ✅ | ✅ |
| Django | ✅ | ❌ | ✅ | ✅ |
| Go | ❌ | ❌ | ✅ | ✅ |
| FastAPI | ❌ | ❌ | ✅ | ✅ |
| PostgREST | ⚠️ | ⚠️ | ✅ | ✅ |
| Bun | ⚠️ | ⚠️ | ✅ | ✅ |
| Spring Boot | ⚠️ | ⚠️ | ✅ | ✅ |
| Swoole PHP | ❌ | ❌ | ❌ | ❌ |
✅ = Properly parsed as native JSON/array ❌ = Returns raw PostgreSQL text format (string) ⚠️ = Unusual format (wrapped in metadata or array)
Correct handling (NpgsqlRest, Rust, Fastify, .NET):
{
"json_val": {"i": 1, "key": "value"},
"jsonb_val": {"key": "value", "row": 1},
"int_array_val": [1, 2, 3, 1],
"text_array_val": ["a", "b", "c", "test1"]
}Raw PostgreSQL format (Swoole PHP):
{
"json_val": "{\"i\": 1, \"key\": \"value\"}",
"jsonb_val": "{\"key\": \"value\", \"row\": 1}",
"int_array_val": "{1,2,3,1}",
"text_array_val": "{a,b,c,test1}"
}Partial handling (Go, FastAPI - arrays work, JSON/JSONB returned as strings):
{
"json_val": "{\"i\": 1, \"key\": \"value\"}",
"jsonb_val": "{\"key\": \"value\", \"row\": 1}",
"int_array_val": [1, 2, 3, 1],
"text_array_val": ["a", "b", "c", "test1"]
}Unusual wrapping (Spring Boot - wraps JSON in type metadata):
{
"json_val": {"null": false, "type": "json", "value": "{\"i\": 1, \"key\": \"value\"}"},
"jsonb_val": {"null": false, "type": "jsonb", "value": "{\"key\": \"value\", \"row\": 1}"}
}This means frameworks like Swoole PHP's impressive performance numbers come with a caveat: properly parsing JSON and array fields would require an additional processing step on the client, which would impact overall application performance. The .NET services in this benchmark use a custom RawJsonConverter to handle this correctly.
This difference should be considered when evaluating which framework best fits your use case - raw throughput vs. correct type handling out of the box.
Conclusion
For PostgreSQL-backed REST APIs where performance matters, NpgsqlRest JIT delivers exceptional throughput - often 2-5x faster than traditional frameworks. The "database as API" approach isn't just about developer productivity; it's a fundamentally more efficient architecture.
Beyond performance, the development effort difference is striking. Here's the code required for each framework in this benchmark:
| Framework | Lines of Code |
|---|---|
| NpgsqlRest | 22 (config only) |
| Fastify | 46 |
| Swoole PHP | 84 |
| Go | 129 |
| Rust | 142 |
NpgsqlRest requires zero application code - just a 22-line JSON configuration file. The framework automatically discovers your PostgreSQL functions and exposes them as REST endpoints. Compare this to Go (129 lines) or Rust (142 lines) where you must manually define routes, handle parameters, execute queries, and serialize responses.
This means NpgsqlRest delivers the best performance with the least code - a rare combination that eliminates entire categories of bugs and maintenance burden.
The benchmark source code and detailed results are available in the pg_function_load_tests repository.
Full Benchmark Results
Results are grouped by concurrency level and payload size, sorted by requests per second (highest first).
1 Virtual User, 1 Record
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| npgsqlrest-jit-v3.2.2 | 601.37/s | 1.65ms | 36,083 | summary | source |
| go-app-v1.24 | 434.56/s | 2.29ms | 26,074 | summary | source |
| postgrest-v12.2.8 | 385.89/s | 2.58ms | 23,155 | summary | source |
| swoole-php-app-v8.4.0 | 379.12/s | 2.62ms | 22,748 | summary | source |
| npgsqlrest-aot-v2.36.2 | 375.83/s | 2.65ms | 22,551 | summary | source |
| fastify-app-v5.6.2 | 373.30/s | 2.66ms | 22,399 | summary | source |
| bun-app-v1.1.42 | 360.33/s | 2.76ms | 21,620 | summary | source |
| npgsqlrest-aot-v3.2.2 | 358.91/s | 2.77ms | 21,535 | summary | source |
| java24-spring-boot-v4.0.1 | 357.59/s | 2.78ms | 21,456 | summary | source |
| fastapi-app-v0.127.1 | 357.20/s | 2.78ms | 21,432 | summary | source |
| rust-app-v1.83.0 | 348.83/s | 2.85ms | 20,930 | summary | source |
| net10-minapi-dapper-jit | 334.92/s | 2.97ms | 20,096 | summary | source |
| net9-minapi-ef-jit | 291.26/s | 3.42ms | 17,477 | summary | source |
| net10-minapi-ef-jit | 291.09/s | 3.42ms | 17,466 | summary | source |
| django-app-v6.0 | 200.85/s | 4.96ms | 12,051 | summary | source |
1 Virtual User, 10 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| npgsqlrest-jit-v3.2.2 | 281.62/s | 3.54ms | 16,898 | summary | source |
| swoole-php-app-v8.4.0 | 236.71/s | 4.21ms | 14,203 | summary | source |
| go-app-v1.24 | 226.25/s | 4.40ms | 13,576 | summary | source |
| npgsqlrest-aot-v2.36.2 | 208.80/s | 4.77ms | 12,528 | summary | source |
| npgsqlrest-aot-v3.2.2 | 204.71/s | 4.87ms | 12,283 | summary | source |
| fastify-app-v5.6.2 | 203.79/s | 4.89ms | 12,228 | summary | source |
| rust-app-v1.83.0 | 203.19/s | 4.91ms | 12,192 | summary | source |
| postgrest-v12.2.8 | 196.37/s | 5.08ms | 11,783 | summary | source |
| net10-minapi-dapper-jit | 195.52/s | 5.10ms | 11,732 | summary | source |
| java24-spring-boot-v4.0.1 | 191.65/s | 5.20ms | 11,499 | summary | source |
| bun-app-v1.1.42 | 185.44/s | 5.38ms | 11,127 | summary | source |
| net10-minapi-ef-jit | 179.23/s | 5.56ms | 10,754 | summary | source |
| net9-minapi-ef-jit | 173.02/s | 5.76ms | 10,382 | summary | source |
| fastapi-app-v0.127.1 | 164.15/s | 6.08ms | 9,849 | summary | source |
| django-app-v6.0 | 135.13/s | 7.38ms | 8,108 | summary | source |
1 Virtual User, 100 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| swoole-php-app-v8.4.0 | 53.55/s | 18.66ms | 3,213 | summary | source |
| npgsqlrest-jit-v3.2.2 | 51.06/s | 19.57ms | 3,064 | summary | source |
| go-app-v1.24 | 48.71/s | 20.51ms | 2,923 | summary | source |
| npgsqlrest-aot-v2.36.2 | 46.92/s | 21.29ms | 2,816 | summary | source |
| npgsqlrest-aot-v3.2.2 | 46.14/s | 21.65ms | 2,769 | summary | source |
| rust-app-v1.83.0 | 44.81/s | 22.29ms | 2,689 | summary | source |
| fastify-app-v5.6.2 | 41.95/s | 23.82ms | 2,517 | summary | source |
| bun-app-v1.1.42 | 39.52/s | 25.28ms | 2,372 | summary | source |
| postgrest-v12.2.8 | 38.50/s | 25.95ms | 2,311 | summary | source |
| net10-minapi-dapper-jit | 38.21/s | 26.15ms | 2,293 | summary | source |
| net10-minapi-ef-jit | 38.09/s | 26.23ms | 2,286 | summary | source |
| net9-minapi-ef-jit | 37.64/s | 26.55ms | 2,259 | summary | source |
| django-app-v6.0 | 35.22/s | 28.37ms | 2,114 | summary | source |
| java24-spring-boot-v4.0.1 | 32.62/s | 30.63ms | 1,958 | summary | source |
| fastapi-app-v0.127.1 | 27.60/s | 36.21ms | 1,657 | summary | source |
1 Virtual User, 500 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| swoole-php-app-v8.4.0 | 12.31/s | 81.22ms | 739 | summary | source |
| npgsqlrest-jit-v3.2.2 | 11.48/s | 87.07ms | 690 | summary | source |
| go-app-v1.24 | 10.87/s | 91.99ms | 653 | summary | source |
| npgsqlrest-aot-v3.2.2 | 10.46/s | 95.54ms | 628 | summary | source |
| npgsqlrest-aot-v2.36.2 | 10.39/s | 96.18ms | 624 | summary | source |
| rust-app-v1.83.0 | 10.22/s | 97.84ms | 614 | summary | source |
| bun-app-v1.1.42 | 9.54/s | 104.81ms | 573 | summary | source |
| fastify-app-v5.6.2 | 9.35/s | 106.89ms | 562 | summary | source |
| postgrest-v12.2.8 | 8.76/s | 114.07ms | 526 | summary | source |
| net10-minapi-ef-jit | 8.62/s | 115.92ms | 518 | summary | source |
| net9-minapi-ef-jit | 8.56/s | 116.74ms | 514 | summary | source |
| net10-minapi-dapper-jit | 8.47/s | 118.01ms | 509 | summary | source |
| django-app-v6.0 | 8.42/s | 118.80ms | 505 | summary | source |
| java24-spring-boot-v4.0.1 | 7.27/s | 137.44ms | 437 | summary | source |
| fastapi-app-v0.127.1 | 6.36/s | 157.25ms | 382 | summary | source |
50 Virtual Users, 1 Record
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| swoole-php-app-v8.4.0 | 3,596.04/s | 6.94ms | 215,868 | summary | source |
| npgsqlrest-jit-v3.2.2 | 3,298.63/s | 7.56ms | 197,959 | summary | source |
| rust-app-v1.83.0 | 3,076.98/s | 8.11ms | 184,671 | summary | source |
| fastify-app-v5.6.2 | 3,069.37/s | 8.13ms | 184,250 | summary | source |
| go-app-v1.24 | 2,690.25/s | 9.27ms | 161,468 | summary | source |
| java24-spring-boot-v4.0.1 | 2,689.82/s | 9.27ms | 161,479 | summary | source |
| npgsqlrest-aot-v3.2.2 | 2,680.35/s | 9.31ms | 160,889 | summary | source |
| npgsqlrest-aot-v2.36.2 | 2,672.30/s | 9.34ms | 160,415 | summary | source |
| bun-app-v1.1.42 | 2,623.85/s | 9.51ms | 157,496 | summary | source |
| net10-minapi-dapper-jit | 2,516.75/s | 9.92ms | 151,063 | summary | source |
| net9-minapi-ef-jit | 2,165.76/s | 11.53ms | 129,994 | summary | source |
| net10-minapi-ef-jit | 2,115.07/s | 11.80ms | 126,958 | summary | source |
| django-app-v6.0 | 1,631.21/s | 15.31ms | 97,916 | summary | source |
| fastapi-app-v0.127.1 | 1,382.42/s | 18.07ms | 82,968 | summary | source |
| postgrest-v12.2.8 | 1,236.31/s | 20.21ms | 74,261 | summary | source |
50 Virtual Users, 10 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| swoole-php-app-v8.4.0 | 1,550.33/s | 16.09ms | 93,054 | summary | source |
| go-app-v1.24 | 1,418.95/s | 17.58ms | 85,177 | summary | source |
| fastify-app-v5.6.2 | 1,358.58/s | 18.37ms | 81,563 | summary | source |
| npgsqlrest-aot-v3.2.2 | 1,291.89/s | 19.31ms | 77,534 | summary | source |
| npgsqlrest-aot-v2.36.2 | 1,286.78/s | 19.38ms | 77,240 | summary | source |
| npgsqlrest-jit-v3.2.2 | 1,261.29/s | 19.77ms | 75,728 | summary | source |
| net10-minapi-dapper-jit | 1,213.52/s | 20.56ms | 72,832 | summary | source |
| rust-app-v1.83.0 | 1,207.68/s | 20.65ms | 72,479 | summary | source |
| bun-app-v1.1.42 | 1,156.78/s | 21.58ms | 69,470 | summary | source |
| django-app-v6.0 | 1,147.59/s | 21.77ms | 68,893 | summary | source |
| net10-minapi-ef-jit | 1,108.81/s | 22.50ms | 66,554 | summary | source |
| net9-minapi-ef-jit | 1,096.59/s | 22.75ms | 65,825 | summary | source |
| java24-spring-boot-v4.0.1 | 1,017.51/s | 24.52ms | 61,067 | summary | source |
| postgrest-v12.2.8 | 967.41/s | 25.80ms | 58,074 | summary | source |
| fastapi-app-v0.127.1 | 561.29/s | 44.53ms | 33,708 | summary | source |
50 Virtual Users, 100 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| swoole-php-app-v8.4.0 | 279.99/s | 89.21ms | 16,825 | summary | source |
| django-app-v6.0 | 264.75/s | 94.36ms | 15,908 | summary | source |
| go-app-v1.24 | 240.27/s | 103.96ms | 14,440 | summary | source |
| rust-app-v1.83.0 | 230.71/s | 108.31ms | 13,864 | summary | source |
| npgsqlrest-aot-v2.36.2 | 227.73/s | 109.71ms | 13,694 | summary | source |
| npgsqlrest-aot-v3.2.2 | 227.73/s | 109.71ms | 13,689 | summary | source |
| fastify-app-v5.6.2 | 215.71/s | 115.88ms | 12,965 | summary | source |
| bun-app-v1.1.42 | 214.08/s | 116.71ms | 12,870 | summary | source |
| net10-minapi-dapper-jit | 209.89/s | 119.05ms | 12,623 | summary | source |
| postgrest-v12.2.8 | 200.99/s | 124.31ms | 12,079 | summary | source |
| net10-minapi-ef-jit | 197.63/s | 126.39ms | 11,888 | summary | source |
| net9-minapi-ef-jit | 194.97/s | 128.13ms | 11,723 | summary | source |
| npgsqlrest-jit-v3.2.2 | 179.29/s | 139.32ms | 10,779 | summary | source |
| java24-spring-boot-v4.0.1 | 175.88/s | 142.10ms | 10,578 | summary | source |
| fastapi-app-v0.127.1 | 82.45/s | 303.36ms | 4,984 | summary | source |
50 Virtual Users, 500 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| django-app-v6.0 | 62.00/s | 403.49ms | 3,739 | summary | source |
| swoole-php-app-v8.4.0 | 60.35/s | 414.86ms | 3,647 | summary | source |
| rust-app-v1.83.0 | 53.40/s | 468.49ms | 3,226 | summary | source |
| go-app-v1.24 | 51.97/s | 481.89ms | 3,143 | summary | source |
| npgsqlrest-aot-v3.2.2 | 50.72/s | 493.04ms | 3,065 | summary | source |
| npgsqlrest-aot-v2.36.2 | 50.52/s | 495.04ms | 3,051 | summary | source |
| bun-app-v1.1.42 | 49.45/s | 507.96ms | 2,997 | summary | source |
| net10-minapi-dapper-jit | 46.38/s | 538.86ms | 2,803 | summary | source |
| fastify-app-v5.6.2 | 46.36/s | 540.08ms | 2,804 | summary | source |
| postgrest-v12.2.8 | 45.12/s | 554.25ms | 2,728 | summary | source |
| net10-minapi-ef-jit | 43.98/s | 571.26ms | 2,673 | summary | source |
| net9-minapi-ef-jit | 43.33/s | 576.77ms | 2,626 | summary | source |
| npgsqlrest-jit-v3.2.2 | 40.95/s | 611.07ms | 2,481 | summary | source |
| java24-spring-boot-v4.0.1 | 39.34/s | 635.85ms | 2,381 | summary | source |
| fastapi-app-v0.127.1 | 17.99/s | 1,393.14ms | 1,121 | summary | source |
100 Virtual Users, 1 Record
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| npgsqlrest-jit-v3.2.2 | 5,177.74/s | 9.64ms | 310,753 | summary | source |
| swoole-php-app-v8.4.0 | 3,855.88/s | 12.95ms | 231,448 | summary | source |
| rust-app-v1.83.0 | 3,432.72/s | 14.54ms | 206,089 | summary | source |
| fastify-app-v5.6.2 | 3,072.85/s | 16.25ms | 184,513 | summary | source |
| go-app-v1.24 | 2,691.84/s | 18.55ms | 161,662 | summary | source |
| java24-spring-boot-v4.0.1 | 2,688.93/s | 18.56ms | 161,477 | summary | source |
| bun-app-v1.1.42 | 2,627.67/s | 19.00ms | 157,837 | summary | source |
| npgsqlrest-aot-v2.36.2 | 2,596.05/s | 19.24ms | 155,916 | summary | source |
| npgsqlrest-aot-v3.2.2 | 2,552.41/s | 19.56ms | 153,289 | summary | source |
| net10-minapi-dapper-jit | 2,467.96/s | 20.24ms | 148,232 | summary | source |
| net9-minapi-ef-jit | 2,180.88/s | 22.90ms | 130,981 | summary | source |
| net10-minapi-ef-jit | 2,149.92/s | 23.23ms | 129,141 | summary | source |
| django-app-v6.0 | 1,660.52/s | 30.10ms | 99,684 | summary | source |
| fastapi-app-v0.127.1 | 1,310.52/s | 38.14ms | 78,686 | summary | source |
| postgrest-v12.2.8 | 843.06/s | 59.34ms | 50,779 | summary | source |
100 Virtual Users, 10 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| npgsqlrest-jit-v3.2.2 | 2,446.61/s | 20.41ms | 146,871 | summary | source |
| swoole-php-app-v8.4.0 | 1,623.96/s | 30.69ms | 97,490 | summary | source |
| go-app-v1.24 | 1,458.33/s | 34.21ms | 87,547 | summary | source |
| fastify-app-v5.6.2 | 1,383.29/s | 36.08ms | 83,064 | summary | source |
| npgsqlrest-aot-v3.2.2 | 1,321.02/s | 37.79ms | 79,362 | summary | source |
| npgsqlrest-aot-v2.36.2 | 1,313.01/s | 38.01ms | 78,842 | summary | source |
| bun-app-v1.1.42 | 1,271.81/s | 39.23ms | 76,375 | summary | source |
| net10-minapi-dapper-jit | 1,263.76/s | 39.44ms | 75,905 | summary | source |
| rust-app-v1.83.0 | 1,254.17/s | 39.79ms | 75,305 | summary | source |
| django-app-v6.0 | 1,190.53/s | 41.99ms | 71,502 | summary | source |
| net10-minapi-ef-jit | 1,143.00/s | 43.66ms | 68,631 | summary | source |
| net9-minapi-ef-jit | 1,119.29/s | 44.59ms | 67,200 | summary | source |
| java24-spring-boot-v4.0.1 | 1,043.23/s | 47.80ms | 62,649 | summary | source |
| postgrest-v12.2.8 | 753.64/s | 66.33ms | 45,283 | summary | source |
| fastapi-app-v0.127.1 | 524.94/s | 95.13ms | 31,642 | summary | source |
100 Virtual Users, 100 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| npgsqlrest-jit-v3.2.2 | 406.89/s | 122.84ms | 24,464 | summary | source |
| swoole-php-app-v8.4.0 | 285.81/s | 174.80ms | 17,212 | summary | source |
| django-app-v6.0 | 280.10/s | 178.48ms | 16,851 | summary | source |
| go-app-v1.24 | 246.58/s | 202.58ms | 14,839 | summary | source |
| rust-app-v1.83.0 | 238.05/s | 209.84ms | 14,325 | summary | source |
| npgsqlrest-aot-v3.2.2 | 234.23/s | 213.13ms | 14,114 | summary | source |
| npgsqlrest-aot-v2.36.2 | 232.84/s | 214.45ms | 14,020 | summary | source |
| bun-app-v1.1.42 | 222.69/s | 224.31ms | 13,410 | summary | source |
| fastify-app-v5.6.2 | 219.62/s | 227.42ms | 13,224 | summary | source |
| net10-minapi-dapper-jit | 216.44/s | 230.76ms | 13,036 | summary | source |
| postgrest-v12.2.8 | 205.02/s | 243.72ms | 12,364 | summary | source |
| net10-minapi-ef-jit | 201.56/s | 247.84ms | 12,146 | summary | source |
| net9-minapi-ef-jit | 199.60/s | 250.27ms | 12,022 | summary | source |
| java24-spring-boot-v4.0.1 | 182.93/s | 273.12ms | 11,028 | summary | source |
| fastapi-app-v0.127.1 | 81.05/s | 618.46ms | 4,956 | summary | source |
100 Virtual Users, 500 Records
| Framework | Requests/s | Avg Latency | Total Requests | Summary | Source |
|---|---|---|---|---|---|
| npgsqlrest-jit-v3.2.2 | 100.90/s | 494.84ms | 6,098 | summary | source |
| django-app-v6.0 | 64.22/s | 778.96ms | 3,894 | summary | source |
| swoole-php-app-v8.4.0 | 62.99/s | 793.21ms | 3,824 | summary | source |
| rust-app-v1.83.0 | 54.94/s | 911.01ms | 3,336 | summary | source |
| go-app-v1.24 | 53.40/s | 936.01ms | 3,248 | summary | source |
| npgsqlrest-aot-v3.2.2 | 51.71/s | 972.24ms | 3,150 | summary | source |
| npgsqlrest-aot-v2.36.2 | 51.66/s | 976.33ms | 3,161 | summary | source |
| bun-app-v1.1.42 | 50.68/s | 987.55ms | 3,077 | summary | source |
| net10-minapi-dapper-jit | 47.32/s | 1,057.47ms | 2,882 | summary | source |
| fastify-app-v5.6.2 | 47.29/s | 1,056.71ms | 2,864 | summary | source |
| postgrest-v12.2.8 | 45.57/s | 1,098.04ms | 2,777 | summary | source |
| net10-minapi-ef-jit | 44.43/s | 1,127.11ms | 2,704 | summary | source |
| net9-minapi-ef-jit | 44.07/s | 1,135.02ms | 2,684 | summary | source |
| java24-spring-boot-v4.0.1 | 40.43/s | 1,237.52ms | 2,469 | summary | source |
| fastapi-app-v0.127.1 | 17.99/s | 2,796.24ms | 1,161 | summary | source |
Get Started: Quick Start Guide · Installation · Configuration Guide