The $12 Server Challenge
LeaderboardOne small feed API on SQLite, any language, one 1 vCPU / 2 GB box. The community's fastest servers, benchmarked by me on the same machine.
| Rank | Language | Best score | Fastest implementation |
|---|---|---|---|
| 1 | 264,000 | rust-epoll-scooter1337 · @Scooter1337 | |
| 2 | 219,000 | cpp-eastl-io_uring-pgo-hendy643 · @hendy643 | |
| 3 | Assembly | 171,000 | asm-nasm-melroy89 · @melroy89 |
| 4 | 165,000 | go-epoll-MegaPanchamZ · @MegaPanchamZ | |
| 5 | 150,000 | c-iouring-ssmurfgg04-gif · @ssmurfgg04-gif | |
| 6 | 120,000 | kotlin-nio-3x3xX3N0N · @3x3xX3N0N | |
| 7 | 102,000 | java-nio-stohirov · @stohirov | |
| 8 | 100,000 | v-epoll-i098 🔒 · @i098 | |
| 9 | 97,000 | node-uwebsockets-zahidcakici 🔒 · @zahidcakici | |
| 10 | 90,000 | typescript-bun-xxmohamed012 🔒 · @XXMOHAMED012 | |
| 11 | 90,000 | scala-netty-jacksonhoran 🔒 · @JacksonHoran | |
| 12 | 90,000 | python-pypy-epoll-pranavds-codes 🔒 · @PranavDS-codes | |
| 13 | 88,000 | lua-openresty-yar0slav 🔒 · @yar0slav | |
| 14 | 71,000 | zig-iouring-marler8997 🔒 · @marler8997 | |
| 15 | 71,000 | typescript-deno-JakeAve 🔒 · @JakeAve | |
| 16 | 71,000 | dart-rawsocket-C-Hatton 🔒 · @C-Hatton | |
| 17 | 65,000 | fsharp-oxpecker-delneg 🔒 · @delneg | |
| 18 | 64,000 | csharp-epoll-gichamba 🔒 · @gichamba | |
| 19 | 55,000 | haskell-warp-staticfx 🔒 · @StaticFX | |
| 20 | 48,000 | swift-hummingbird-denizak 🔒 · @denizak | |
| 21 | 9,000 | ruby-rails-gambitboy 🔒 · @Gambitboy | |
| 22 | 3,500 | bash-socat-framegrace 🔒 · @framegrace |
Every language's best is public. Implementations outside the top 10 (🔒) open with the newsletter.
How it was run
The machine. A Synteq VPS with 1 vCPU (Xeon Platinum 8260) and 2 GB RAM, no swap, running Ubuntu 24.04 with no kernel tuning. The load generators are separate 16-core machines in the same datacenter.
How each entry is scored. Every entry is built from source on the box with its own install.sh and build.sh, started on a fresh copy of the seed database, and has to pass the 42-check test suite before any load. Virtual users follow the challenge's user model (feed → think → post → think → 15% like, 2% post). Two-minute runs double the users until one fails, then narrow down to within 5%. A 5-minute hold confirms the number, stepping down 5% until one passes. The score is the most users held for 5 minutes with p95 under 500 ms, p99 under 1 s and under 1% errors. Every run restarts the app on a fresh database.