{"id":13514031,"url":"https://github.com/kataras/server-benchmarks","last_synced_at":"2025-07-02T07:35:47.104Z","repository":{"id":41845236,"uuid":"246700648","full_name":"kataras/server-benchmarks","owner":"kataras","description":":rocket: Cross-platform transparent benchmarks for HTTP/2 Web Servers at 2020-2024","archived":false,"fork":false,"pushed_at":"2024-09-30T09:07:32.000Z","size":234,"stargazers_count":93,"open_issues_count":19,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-01T02:06:22.546Z","etag":null,"topics":["benchmarks","chi","echo","gin","go","iris","martini","netcore","nodejs","server-benchmarks"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kataras.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-11T23:28:32.000Z","updated_at":"2025-05-15T17:59:54.000Z","dependencies_parsed_at":"2024-01-13T19:24:18.933Z","dependency_job_id":"e2ef5f6f-3faf-4c07-bef8-b0abd99f9b2c","html_url":"https://github.com/kataras/server-benchmarks","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/kataras/server-benchmarks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kataras%2Fserver-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kataras%2Fserver-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kataras%2Fserver-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kataras%2Fserver-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kataras","download_url":"https://codeload.github.com/kataras/server-benchmarks/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kataras%2Fserver-benchmarks/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263094426,"owners_count":23412970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmarks","chi","echo","gin","go","iris","martini","netcore","nodejs","server-benchmarks"],"created_at":"2024-08-01T05:00:44.033Z","updated_at":"2025-07-02T07:35:47.082Z","avatar_url":"https://github.com/kataras.png","language":"Go","readme":"# Server Benchmarks\n\nA benchmark suite which, **transparently**, stress-tests web servers and generates a report in markdown. It measures the requests per second, data transferred and time between requests and responses.\n\n![Benchmarks: Jun 20, 2020 at 8:17pm (UTC)](https://iris-go.com/images/benchmarks.svg)\n\n## Why YABS (Yet Another Benchmark Suite)\n\nIt's true, there already enough of benchmark suites to play around. However, most of them don't even contain real-life test applications to benchmark, therefore the results are not always accurate e.g. a route handler executes SQL queries or reads and sends JSON. This benchmark suite is a fresh start, it can contain any type of tests as the tests are running as self-executables and the measuring is done by a popular and trusted 3rd-party software which acts as a real HTTP Client (one more reason of transparency). [Contributions](CONTRIBUTING.md) and improvements are always welcomed here.\n\n## Use case\n\nMeasure the performance of application(s) between different versions or implementations (or web frameworks).\n\nThis suite can be further customized, through its [tests.yml](tests.yml) file, in order to test personal or internal web applications before their public releases.\n\n## Installation\n\nThe only requirement for the benchmark tool is the [Go Programming Language](https://go.dev/dl/).\n\n```sh\n$ go get github.com/kataras/server-benchmarks@master\n$ go install github.com/codesenberg/bombardier@master\n```\n\nDepending on your test cases you may want to install [Node.js](https://nodejs.org/en/download/prebuilt-installer/current) and [.NET Core](https://dotnet.microsoft.com/download) too.\n\n## How to run\n\n1. Navigate to your tests directory, the one which includes a  **tests.yml** file\n1. Open a terminal and execute: `server-benchmarks`\n2. Wait for the executable _server-benchmarks_ (or _server-benchmarks.exe_ for windows) to finish\n3. That's all, now open the the results from the generated **RESULTS.md** file.\n\n### Advanced usage\n\n- Read the tests from the _./tests.dev.yml_ file\n- Wait 3 seconds between tests\n- Output the results to the _./dev_ directory\n- Write the results to a remote [google spreadsheet](https://www.google.com/sheets/about/) table, which you can convert to a graph later on (as shown above).\n\n```sh\n$ server-benchmarks --wait-run=3s -i ./tests.dev.yml -o ./dev -g-spreadsheet $GoogleSpreadsheetID -g-secret client_secret.json\n```\n\n### Run using Docker\n\nThe only requirement is [Docker](https://docs.docker.com/).\n\n```sh\n$ docker run -v ${PWD}:/data kataras/server-benchmarks\n```\n\n## Benchmarks\n\nThe following generated README contains benchmark results from builtin tests between popular **HTTP/2 web frameworks as of 2022**.\n\n_Note:_ it's possible that the contents of this file will be updated regularly to accept even more tests cases and frameworks.\n\n## System\n\n|    |    |\n|----|:---|\n| Processor | AMD Ryzen 9 4900HS with Radeon Graphics          |\n| RAM | 15.42 GB |\n| OS | Microsoft Windows 11 Pro |\n| [Bombardier](https://github.com/codesenberg/bombardier) | v1.2.4 |\n| [Go](https://golang.org) | go1.19beta1 |\n| [.Net Core](https://dotnet.microsoft.com/) | 6.0.300 |\n\n| [Node.js](https://nodejs.org/) | v18.2.0 |\n\n\u003e Last updated: Jun 20, 2022 at 8:17pm (UTC)\n\n## Terminology\n\n**Name** is the name of the framework(or router) used under a particular test.\n\n**Reqs/sec** is the avg number of total requests could be processed per second (the higher the better).\n\n**Latency** is the amount of time it takes from when a request is made by the client to the time it takes for the response to get back to that client (the smaller the better).\n\n**Throughput** is the rate of production or the rate at which data are transferred (the higher the better, it depends from response length (body + headers).\n\n**Time To Complete** is the total time (in seconds) the test completed (the smaller the better).\n\n## Results\n\n### Test:Static\n\n📖 Fires 1000000 requests, receives a static message as response.\n\n| Name | Language | Reqs/sec | Latency | Throughput | Time To Complete |\n|------|:---------|:---------|:--------|:-----------|:-----------------|\n| [Iris](https://github.com/kataras/iris) | Go |284059 |438.34us |49.58MB |3.52s |\n| [Chi](https://github.com/go-chi/chi) | Go |275525 |451.01us |48.18MB |3.62s |\n| [Echo](https://github.com/labstack/echo) | Go |267815 |466.16us |46.64MB |3.74s |\n| [Kestrel](https://github.com/dotnet/aspnetcore) | C# |263479 |472.72us |44.68MB |3.80s |\n| [Gin](https://github.com/gin-gonic/gin) | Go |263399 |472.70us |45.98MB |3.80s |\n| [Martini](https://github.com/go-martini/martini) | Go |233051 |534.43us |40.68MB |4.29s |\n| [Koa](https://github.com/koajs/koa) | Javascript |131274 |0.93ms |29.24MB |7.50s |\n| [Buffalo](https://github.com/gobuffalo/buffalo) | Go |78963 |1.58ms |13.78MB |12.66s |\n| [Express](https://github.com/expressjs/express) | Javascript |41078 |3.02ms |11.54MB |24.22s |\n\n### Test:Parameterized\n\n📖 Fires 550000 requests with a dynamic parameter of string, receives a hello text based on the parameter as response.\n\n| Name | Language | Reqs/sec | Latency | Throughput | Time To Complete |\n|------|:---------|:---------|:--------|:-----------|:-----------------|\n| [Iris](https://github.com/kataras/iris) | Go |277099 |449.55us |53.07MB |1.99s |\n| [Chi](https://github.com/go-chi/chi) | Go |272434 |456.62us |52.21MB |2.02s |\n| [Echo](https://github.com/labstack/echo) | Go |261467 |476.01us |50.14MB |2.10s |\n| [Gin](https://github.com/gin-gonic/gin) | Go |259308 |480.32us |49.70MB |2.12s |\n| [Kestrel](https://github.com/dotnet/aspnetcore) | C# |233843 |534.73us |43.34MB |2.36s |\n| [Martini](https://github.com/go-martini/martini) | Go |225790 |551.37us |43.29MB |2.44s |\n| [Koa](https://github.com/koajs/koa) | Javascript |114667 |1.08ms |27.21MB |4.78s |\n| [Buffalo](https://github.com/gobuffalo/buffalo) | Go |76747 |1.63ms |14.71MB |7.17s |\n| [Express](https://github.com/expressjs/express) | Javascript |37110 |3.32ms |11.11MB |14.69s |\n\n### Test:REST\n\n📖 Fires 200000 requests with a dynamic parameter of int, sends JSON as request body and receives JSON as response.\n\n| Name | Language | Reqs/sec | Latency | Throughput | Time To Complete |\n|------|:---------|:---------|:--------|:-----------|:-----------------|\n| [Iris](https://github.com/kataras/iris) | Go |238954 |521.69us |64.15MB |0.84s |\n| [Gin](https://github.com/gin-gonic/gin) | Go |229665 |541.96us |62.86MB |0.87s |\n| [Chi](https://github.com/go-chi/chi) | Go |228072 |545.78us |62.61MB |0.88s |\n| [Echo](https://github.com/labstack/echo) | Go |224491 |553.84us |61.70MB |0.89s |\n| [Martini](https://github.com/go-martini/martini) | Go |198166 |627.46us |54.47MB |1.01s |\n| [Kestrel](https://github.com/dotnet/aspnetcore) | C# |163486 |766.90us |47.42MB |1.23s |\n| [Buffalo](https://github.com/gobuffalo/buffalo) | Go |102478 |1.22ms |28.14MB |1.95s |\n| [Koa](https://github.com/koajs/koa) | Javascript |48425 |2.56ms |15.39MB |4.14s |\n| [Express](https://github.com/expressjs/express) | Javascript |23622 |5.25ms |9.04MB |8.41s |\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkataras%2Fserver-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkataras%2Fserver-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkataras%2Fserver-benchmarks/lists"}