{"id":43911264,"url":"https://github.com/ferronweb/ferrbench","last_synced_at":"2026-02-06T20:34:10.866Z","repository":{"id":282582799,"uuid":"949049738","full_name":"ferronweb/ferrbench","owner":"ferronweb","description":"A modern HTTP benchmarking tool supporting HTTP/1 and HTTP/2 benchmarks, based on rewrk.","archived":false,"fork":false,"pushed_at":"2025-04-21T07:38:43.000Z","size":159,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-21T08:36:41.205Z","etag":null,"topics":["benchmark","http","rust","web"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/ferronweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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,"zenodo":null}},"created_at":"2025-03-15T15:03:53.000Z","updated_at":"2025-04-21T07:38:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"0cdde30f-8d62-4d81-9ced-3a4147b9c2b7","html_url":"https://github.com/ferronweb/ferrbench","commit_stats":null,"previous_names":["ferronweb/ferrbench"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/ferronweb/ferrbench","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ferronweb%2Fferrbench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ferronweb%2Fferrbench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ferronweb%2Fferrbench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ferronweb%2Fferrbench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ferronweb","download_url":"https://codeload.github.com/ferronweb/ferrbench/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ferronweb%2Fferrbench/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29175285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T20:14:21.878Z","status":"ssl_error","status_checked_at":"2026-02-06T20:14:21.443Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["benchmark","http","rust","web"],"created_at":"2026-02-06T20:34:10.179Z","updated_at":"2026-02-06T20:34:10.858Z","avatar_url":"https://github.com/ferronweb.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FerrBench\nA more modern http framework benchmark utility, based on [rewrk](https://github.com/lnx-search/rewrk).\n\n```\nF:\\ferrbench\u003e ferrbench -h http://127.0.0.1:5000 -t 12 -c 60 -d 5s\n\nBenchmarking 60 connections @ http://127.0.0.1:5000 for 5 seconds\n  Latencies:\n    Avg      Stdev    Min      Max    \n    3.27ms   0.40ms   1.95ms   9.39ms\n  Requests:\n    Total:  91281  Req/Sec: 18227.81\n  Transfer:\n    Total: 1.13 MB Transfer Rate: 231.41 KB/Sec\n```\n\n*With optional --pct flag*\n```\n+ --------------- + --------------- +\n|   Percentile    |   Avg Latency   |\n+ --------------- + --------------- +\n|      99.9%      |     6.88ms      |\n|       99%       |     5.62ms      |\n|       95%       |     4.62ms      |\n|       90%       |     4.24ms      |\n|       75%       |     3.78ms      |\n|       50%       |     3.49ms      |\n+ --------------- + --------------- +\n```\n\n# Motivation\nThe motivation behind this project extends from developers tunnel visioning on benchmarks like [techempower](https://www.techempower.com/benchmarks/) that use the benchmarking tool called [wrk](https://github.com/wg/wrk).\n\nThe issue is that wrk only handle *some* of the HTTP spec and is entirely biased towards frameworks and servers that can make heavy use of HTTP/1 Pipelining which is no longer enabled in most modern browsers or clients, this can give a very unfair and unreasonable set of stats when comparing frameworks as those at the top are simply\nbetter at using a process which is now not used greatly.\n\nThis is where FerrBench comes in, this benchmarker is built on top of [hyper's client api](https://github.com/hyperium/hyper) and brings with it many advantages and more realistic methods of benchmarking.\n\n### Current features\n- Supports **both** HTTP/1 and HTTP/2.\n- Pipelining is disabled giving a more realistic idea on actual performance.\n- Cross-platform support.\n\n### To do list\n- Add a random artificial delay benchmark to simulate random latency with clients.\n- Arithmetic benchmark to simulate different loads across clients.\n- State checking, making the frameworks and servers use all of their API rather than a minimised set.\n- JSON deserialization and validation benchmarks and checking.\n- Truly concurrent HTTP/2 benchmark.\n\n# Usage\nUsage is relatively simple, if you have a compiled binary simply run using the CLI.\n\n## Example\nHere's an example to produce the following benchmark:\n- 256 connections (`-c 256`)\n- HTTP/2 only (`--http2`)\n- 12 threads (`-t 12`)\n- 15 seconds (`-d 15s`)\n- with percentile table (`--pct`)\n- on host `http://127.0.0.1:5000` (`-h http://127.0.0.1:5000`)\u003cbr\u003e\n\n**CLI command:**\u003cbr\u003e\n`ferrbench -c 256 -t 12 -d 15s -h http://127.0.0.1:5000 --http2 --pct`\n\n\n## CLI Help\nTo bring up the help menu simply run `ferrbench --help` to produce this:\n\n```\nBenchmark HTTP/1 and HTTP/2 frameworks without pipelining bias.\n\nUsage: ferrbench [OPTIONS] --host \u003chost\u003e --duration \u003cduration\u003e\n\nOptions:\n      --help                       Print help\n  -t, --threads \u003cthreads\u003e          Set the amount of threads to use e.g. '-t 12' [default: 1]\n  -c, --connections \u003cconnections\u003e  Set the amount of concurrent e.g. '-c 512' [default: 1]\n  -h, --host \u003chost\u003e                Set the host to bench e.g. '-h http://127.0.0.1:5050'\n      --http2...                   Set the client to use http2 only. (default is http/1) e.g. '--http2'\n  -d, --duration \u003cduration\u003e        Set the duration of the benchmark.\n      --pct...                     Displays the percentile table after benchmarking.\n      --json...                    Displays the results in a json format\n  -r, --rounds \u003crounds\u003e            Repeats the benchmarks n amount of times\n  -m, --method \u003cmethod\u003e            Set request method e.g. '-m get'\n  -H, --header \u003cheader\u003e            Add header to request e.g. '-H \"content-type: text/plain\"'\n  -b, --body \u003cbody\u003e                Add body to request e.g. '-b \"foo\"'\n  -V, --version                    Print version\n```\n\n# Building from source\n\nBuilding from source is incredibly simple, just make sure you have a stable version of Rust installed before you start.\n\n**With Cargo Install**\n1) - Run `cargo install ferrbench --git https://github.com/ferronweb/ferrbench.git`\n\n**With Cargo Run**\n1) - Clone the repo source code\n2) - Run `cargo run --release -- \u003center flags here\u003e`\n\n**With Cargo Build**\n1) - Clone the repo source code\n2) - Run `cargo build --release`\n3) - Extract the binary from the release folder\n4) - Binary ready to use.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fferronweb%2Fferrbench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fferronweb%2Fferrbench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fferronweb%2Fferrbench/lists"}