HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
TechEmpower
FrameworkBenchmarks
C++2013–2026
TechEmpower / FrameworkBenchmarks · Archived

FrameworkBenchmarks

Source for the TechEmpower Framework Benchmarks project

143Distinct people
247Mentions
3Explicit recommenders
8.1KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Source for the TechEmpower Framework Benchmarks project

GitHub

Where it is used

  • ASP.NET Core — ASP.NET Core used the TechEmpower Framework Benchmarks as a focus for performance work. Microsoft prioritized improving ASP.NET’s performance in these benchmarks. Source
  • Benchmarks for ASP.NET Core — Benchmarks for ASP.NET Core includes scenarios from the TechEmpower Web Framework Benchmarks in its benchmarking suite. Source

What people are saying

Sorry, I should have been more precise. I am very, very familiar with the TechEmpower benchmarks and I first learned Java around SE 5, right after they switched from 1.x…

AaronFriel used a recommendation phrase. 3 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 12:54:37 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year247 dated mentions

Observed mentions: 2013-03-28 15:05:31 UTC to 2026-03-24 12:37:38 UTC.

02550751002013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 106 mentions; 2 submissions, 104 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 20 mentions; 0 submissions, 20 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 8 mentions; 0 submissions, 8 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 8 mentions; 0 submissions, 8 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 10 mentions; 0 submissions, 10 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 14 mentions; 0 submissions, 14 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 25 mentions; 0 submissions, 25 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 14 mentions; 0 submissions, 14 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 15 mentions; 0 submissions, 15 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 8 mentions; 1 submissions, 7 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 4 mentions; 2 submissions, 2 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC1062104
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC20020
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC808
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC808
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC404
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC909
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC10010
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC14014
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC25025
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC14014
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC15015
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC817
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC202
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC422

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Welcome to TechEmpower Framework Benchmarks (TFB) If you're new to the project, welcome! Please feel free to ask questions here. We encourage new frameworks and contributors to ask questions. We're here to help! This project provides representative performance measures across a wide field of web application frameworks. With much help from the community, coverage is quite broad and we are happy to broaden it further with contributions. The project presently includes frameworks on many languages including Go, Python, Java, Ruby, PHP, C#, F#,Clojure, Groovy, Dart, JavaScript, Erlang, Haskell, Scala, Perl, Lua, C, and others. The current tests exercise plaintext responses, JSON serialization, database reads and writes via the object-relational mapper (ORM), collections, sorting, server-side templates, and XSS counter-measures. Future tests will exercise other components and greater computation. Read more and see the results of our tests on cloud and physical hardware. For descriptions of the test types that we run, see the test requirements section. If you find yourself in a directory or file that you're not sure what the purpose is, checkout our file structure in our documentation, which will briefly explain the use of relevant directories and files. Quick Start Guide To get started developing you'll need to install docker or see our Quick Start Guide using vagrant Clone TFB. $ git clone https://github.com/TechEmpower/FrameworkBenchmarks.git Change directories $ cd FrameworkBenchmarks Run a test. $ ./tfb --mode verify --test gemini Explanation of the ./tfb script The run script is pretty wordy, but each and every flag is required. If you are using windows, either adapt the docker command at the end of the ./tfb shell script (replacing ${SCRIPT_ROOT} with /c/path/to/FrameworkBenchmarks), or use vagrant. The command looks like this: docker run -it --rm --network tfb -v /var/run/docker.sock:/var/run/docker.sock -v [FWROOT]:/FrameworkBenchmarks techempower/tfb [ARGS] -it tells docker to run this in 'interactive' mode and simulate a TTY, so that ctrl+c is propagated. --rm tells docker to remove the container as soon as the toolset finishes running, meaning there aren't hundreds of stopped containers lying around. --network=tfb tells the container to join the 'tfb' Docker virtual network The first -v specifies which Docker socket path to mount as a volume in the running container. This allows docker commands run inside this container to use the host container's docker to create/run/stop/remove containers. The second -v mounts the FrameworkBenchmarks source directory as a volume to share with the container so that rebuilding the toolset image is unnecessary and any changes you make on the host system are available in the running toolset container. techempower/tfb is the name of toolset container to run A note on Windows Docker expects Linux-style paths. If you cloned on your C:\ drive, then [ABS PATH TO THIS DIR] would be /c/FrameworkBenchmarks. Docker for Windows understands /var/run/docker.sock even though that is not a valid path on Windows, but only when using Linux containers (it doesn't work with Windows containers and LCOW). Docker Toolbox may not understand /var/run/docker.sock, even when using Linux containers - use at your own risk. Quick Start Guide (Vagrant) Get started developing quickly by utilizing vagrant with TFB. Git, Virtualbox and vagrant are required. Clone TFB. $ git clone https://github.com/TechEmpower/FrameworkBenchmarks.git Change directories $ cd FrameworkBenchmarks/deployment/vagrant Build the vagrant virtual machine $ vagrant up Run a test $ vagrant ssh $ tfb --mode verify --test gemini Add a New Test Either on your computer, or once you open an SSH connection to your vagrant box, start the new test initialization wizard. vagrant@TFB-all:~/FrameworkBenchmarks$ ./tfb --new This will walk you through the entire process of creating a new test to include in the suite. Resources Official Documentation Our official documentation can be found in the wiki. If you find any errors or areas for improvement within the docs, feel free to open an issue in this repo. Live Results Results of continuous benchmarking runs are available in real time here. Data Visualization If you have a results.json file that you would like to visualize, you can do that here. You can also attach a runid parameter to that url where runid is a run listed on tfb-status like so: https://www.techempower.com/benchmarks/#section=test&runid=fd07b64e-47ce-411e-8b9b-b13368e988c6. If you want to visualize them or compare different results files on bash, here is an unofficial plaintext results parser Contributing The community has consistently helped in making these tests better, and we welcome any and all changes. Reviewing our contribution practices and guidelines will help to keep us all on the same page. The contribution guide can be found in the TFB documentation. Join in the conversation in the Discussions tab, on Twitter, or chat with us on Freenode at #techempower-fwbm.
Read the full README on GitHub

What Hacker News says

247 sources
For anyone wondering, the ASP.NET Core benchmark applications appear to be largely the same. However it also appears that as of the last benchmark (round 23), “aspnetcore“ has fallen to 35on the fortunes leaderboard. The code for that result, really just uses kestrel. It doesn’t even import any of the usual ASP.NET Core NuGet packages, just what’s provided by the web sdk. [0] [0]: https://github.com/TechEmpower/FrameworkBenchmarks/blob/57d9...
In Sunsetting the Techempower Framework Benchmarks
We run the TechEmpower Framework Benchmarks: open-source, reproducible web framework benchmarks across hundreds of implementations. Between Round 22 and Round 23, our spring-mongo query test dropped from ~5,900 req/s to 583. That's weird, what gives? We worked with MongoDB's performance team and Intel to trace it to two root causes: 1. TCMalloc's per-CPU memory pools behaving poorly inside Docker containers 2. Connection pool sizing and driver config not tuned for the hardware After MongoDB submitted fixes, the query test went from 583 to 14,200 req/s. The db test hit 205k (up from 68k). Fortune went from 59k to 188k. All benchmark code and results are open source: https://github.com/TechEmpower/FrameworkBenchmarks
In TechEmpower Benchmarks Led to a 25x MongoDB Performance Improvement
TIL about blazeio. blazeio: https://github.com/anonyxbiz/Blazeio TechEmpower Framework Benchmarks > Round 23 (2025-02) > Data Updates: https://www.techempower.com/benchmarks/#section=data-r23&tes... TechEmpower/FrameworkBenchmarks > wiki > Project-Information-Framework-Tests-Overview: https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Proj... TechEmpower/FrameworkBenchmarks > Python: https://github.com/TechEmpower/FrameworkBenchmarks/tree/mast...
In Blazeio vs. FastAPI vs. Robyn: Benchmarking Reveals 86x Performance Difference
TechEmpower benchmarks and The Benchmark Game[0] are pretty comprehensive. The latter has not yet been updated for .NET 9. The former has been updated with .NET 9[1], but will have to wait for the next round of results. You can see the continuous results, though[2] I know that TechEmpower gets a lot of flak for being "unrealistic", but it's easy enough to filter out the pure middleware ones. But even those I feel are "fair game" because it shows that such optimizations are possible on the runtime if needed. The story behind one of the top entrants, Just(js) talks a bit about this[3] [0] https://benchmarksgame-team.pages.debian.net/benchmarksgame/... [1] https://github.com/TechEmpower/FrameworkBenchmarks/blob/mast... [2] https://tfb-status.techempower.com/ [2] https://just.billywhizz.io/blog/on-javascript-performance-01...
In .NET 9 Is Out
They don't even use Razor Pages but a custom RazorSlices package to do the templating [1]. Yes, that is much faster because it removes MVC and a ton of infrastructure but it's also kind of gross. Also the use of stuff like UnsafePreferInlineScheduling has some downsides (running application code on the IO thread) and honestly I'd never use in production. The custom BufferWriter stuff is pretty neat though, although also not really something most people will reach for. And there is more, like the caching of StringBuilders etc. But it also doesn't use the actual HTTP server to build headers, but they just dump a string into the socket [2], feels a bit unrealistic to me. In general the BenchmarkApplication class [3] is full of non-standard stuff that you'd normally let the framework handle. [1] https://github.com/TechEmpower/FrameworkBenchma
Read the rest
In A comparison of Rust’s borrow checker to the one in C#
> The database pool needs to be at 512 to 1024? Yet Rails seems to get away with far less than that and still have better performance.[2] Rails concurrency model is per process. So you will have `n_workers` pools and the amount of connections will be `n_workers * 3` based on the code you shared. The production machine has 28 total threads [1], which means Rails is starting 35 workers, according to their auto tuning code [2]. Overall, Rails uses 35x more pools than the Phoenix application and has twice the number of connections (105). It is absurd to imply that Rails is actually running with far less. Second of all, the database pool needs to be 512 or 1024 if your app server can push traffic quickly enough to the database. If you are increasing the Rails pool size and it is not getting faster, then Rails is your bottleneck. Based on the r
Read the rest
uns I did last week, it seems the pool is the bottleneck in Elixir's case. We will know for sure in a couple weeks once the PRs land. > If these people can't get good results in tuning Elixir, who can? You can look at the results from the latest community efforts in main: https://www.techempower.com/benchmarks/#section=test&runid=1... If you want to compare with Rails in particular, we beat Rails in every benchmark except two: 1. Single query: which will be tackled by better sizing our pools 2. Plain text: where we are currently sending the wrong payload (but when we sent the proper payload, as in the last published round, we beat Rails too) And it does not include any of my proposed changes yet. My point is exactly that the feedback cycle is long, so it takes time, and I was not able to invest time before. But given how intent some folks are to misinterpret benchmarks (and assign malice to the whole community), it is probably better to continue looking into it. [1]: https://ark.intel.com/content/www/us/en/ark/products/120474/... [2]: https://github.com/TechEmpower/FrameworkBenchmarks/blob/mast...
In Ask HN: Why Isn't Elixir More Popular?
Sounds like you are agreeing with me. You tried to work on it years ago and didn't fix it. Even when it was completing last year it's performance was half of what Rails was, which isn't known to be fast [1]. The database pool needs to be at 512 to 1024? Yet Rails seems to get away with far less than that and still have better performance.[2] Even if, somehow, Elixir is actually faster, which seemingly lacks evidence at this point other than some anecdotes by people who have a vested interest in people adopting the language (primarily Elixir dev shops and framework/language authors), the fact that the community of Elixir devs cannot get decent results on these tests says a lot. If these people can't get good results in tuning Elixir, who can? Not a surprise to see people ITT also noting that they ran into the same types of problems that th
Read the rest
In Ask HN: Why Isn't Elixir More Popular?
> And they say "Oh we didn't care to put much effort into it", Yet Jose Valim himself tried to work on it and didn't fix it. This is inaccurate. I have started looking again into solutions only last week [1]. My suspicion was always the database pool size was too small but, when I tried to contribute 4+ years ago, fine tuning was hard because it took too long, so I didn't pursue it further [2]. My discontent with the benchmarks is that they are not measuring what people effectively run in production. Since you mentioned Rails, here is how a Rails application looks like: https://github.com/TechEmpower/FrameworkBenchmarks/blob/mast... But almost nobody runs a Rails application like that in production. And then you look at the configuration of most stacks and they have been explicitly fine tuned to match exactly the concurrency traffic and p
Read the rest
atterns that the benchmark sends through. But, for most web applications, your web traffic is not homogeneous and you don't have a predetermined number of concurrent requests. I still believe those benchmarks are not indicative of what you will actually see in production. Most companies who have gone from Rails to Phoenix, for example, report a 10-20x reduction in operation size and costs. But it is clear at this point people put way too much stock on these benchmarks. The irony of it all is that, if someone copies these setups into their actual applications, they will most likely perform worse. Oh well. [1]: https://github.com/TechEmpower/FrameworkBenchmarks/pull/9302 [2]: https://github.com/TechEmpower/FrameworkBenchmarks/pull/5432 - here you can see me increasing the database pool to 40... but most benchmarks today run with 512-1024 connections (which, once again, is most likely not what you would do in prod). In any case, we need to bump our numbers accordingly.
In Ask HN: Why Isn't Elixir More Popular?
What do you think about how well uWebSockets.js performed in the TechEmpower benchmark? Just js is admittedly experimental, but it has the fourth highest score, and the highest score of any non-Rust framework as well which I found interesting. Elysia (a Bun framework) did pretty well too. Deno would have probably scored well too (it uses Rust's Hyper crate under the hood), but they're only running a single instance of the server despite Deno supporting the Linux SO_REUSEPORT socket option, which is important because the test is run on three servers with Intel Xeon Gold 5120 Processors that have 14 cores and 28 hyperthreads [0]. [0] https://github.com/TechEmpower/FrameworkBenchmarks/tree/9f0c...
In Developing a Modern Full-Stack Application: Choosing the Right Tech Stack
Instead of putting together ad-hoc benchmarks, it would be preferable if Bun is compared with the same benchark tests already used by other frameworks, such as the TechEmpower benchmark. https://github.com/TechEmpower/FrameworkBenchmarks/discussio... This would eliminate any funny business with benchmarks, such as comparing suboptimal implementations of other tech stacks with our own finely tuned custom implementation, and proceed to run it in a cherry-picked test.
In Go vs. Rust vs. Bun vs. Node, Simple HTTP Benchmark

Showing the 15 most recent of 247 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.